diff options
author | Casper van Donderen <casper.vandonderen@nokia.com> | 2011-10-26 16:16:00 +0200 |
---|---|---|
committer | Casper van Donderen <casper.vandonderen@nokia.com> | 2011-10-26 16:16:00 +0200 |
commit | 2b4f4e45c60de10c2895d14c4ebf35aad952f9e3 (patch) | |
tree | e388d3172e11e11ef67e1e1ec4e7fb2d21b15d2c | |
parent | c47b2e9c5fc43ef9c55c8ee884e83a33da00ae0b (diff) | |
parent | 1f8b48de5e7e96e307bec195d0653104e8d71984 (diff) | |
download | qt4-tools-2b4f4e45c60de10c2895d14c4ebf35aad952f9e3.tar.gz |
Merge remote-tracking branch 'qt-doc-review/master'
206 files changed, 5879 insertions, 1607 deletions
diff --git a/config.profiles/symbian/platform_paths.prf b/config.profiles/symbian/platform_paths.prf index 0e2131ff43..176988568d 100644 --- a/config.profiles/symbian/platform_paths.prf +++ b/config.profiles/symbian/platform_paths.prf @@ -239,10 +239,23 @@ defineReplace(CORE_TOOLS_LAYER_IBY_EXPORT_PATH) { defineReplace(CORE_ADAPT_LAYER_IBY_EXPORT_PATH) { return(/epoc32/rom/include/$$1) } + +defineReplace(LANGUAGE_APP_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/language/app/$$1) +} +defineReplace(LANGUAGE_MW_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/language/mw/$$1) +} +defineReplace(LANGUAGE_OS_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/language/os/$$1) +} + defineReplace(CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH) { return(/epoc32/rom/include/customervariant/app/$$1) } + + # You need to define the following in pro-file, if you are using the stllib: # QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS # DEFINES *= $$STLLIB_USAGE_DEFINES diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index 17caec6c3f..56ed764534 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -145,6 +145,7 @@ QtNetwork - HTTP cache: do not load resources from cache that must be revalidated [QTBUG-18983] - HTTP cache: change file organization (MR-2505) - SOCKS5: write errors are propagated to the outer socket [QTBUG-18713] + - Cookies: Commas are no longer used to support multiple cookies in a single Set-Cookie header [QTBUG-21456] - QNetworkReply: errorString() returns translated messages now [QTBUG-18382] QtOpenGL diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 668f3b44a3..692322c1d5 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -82,6 +82,7 @@ Qt applications. \section1 QML Add-Ons \list +\o \l{Qt Quick Components for Symbian 1.1}{Qt Quick Components for Symbian} - a native component set for the Symbian^3 platform \o \l{QtWebKit QML Module} \o \l{http://doc.qt.nokia.com/qtmobility-1.1.0/qml-plugins.html}{Mobility QML Plugins} \o \l {http://doc.qt.nokia.com/qt-components-symbian-1.1/index.html}{Qt Quick Components} diff --git a/doc/src/getting-started/demos.qdoc b/doc/src/getting-started/demos.qdoc index 5c0652c032..201b5c7466 100644 --- a/doc/src/getting-started/demos.qdoc +++ b/doc/src/getting-started/demos.qdoc @@ -149,13 +149,6 @@ implement a small Web browser. \endlist - \section1 Multimedia - - \list - \o \l{demos/spectrum}{Spectrum Analyser} shows how the \l{QtMultimedia} - module can be used to manipulate audio as it is played. - \endlist - \section1 Phonon \list diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 6c4e90c7b8..239f117f1e 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -504,58 +504,8 @@ in the \l{Qt for Windows CE Requirements} document. \tableofcontents -Qt for the Symbian platform has some requirements that are given in more detail -in the \l{Qt for the Symbian platform Requirements} document. - - -\section1 Step 1: Install Qt - - Download the \c {Qt libraries 4.x for Windows} package (for \c minGW or \c {VS 2008}) - from the \l {http://qt.nokia.com/downloads#qt-lib}{downloads} page. - - Run the downloaded package and follow the instructions. - - \note Qt must be installed on the same drive as the Symbian SDK you are - using, and the install path must not contain any spaces. - -\section1 Step 2: Install Qt into a device - - To run Qt applications on a device, \c{qt_installer.sis} found - in the Qt installation directory must be first installed into the device. - \c{Qt_installer.sis} contains Qt libraries and Open C libraries all in one - convenient package. - Begin installation by connecting your device via USB cable to a computer that - has the \l{http://www.nokia.com/pcsuite}{Nokia PC Suite} installed. - On the device, select "PC Suite mode". In Windows Explorer right click - on the \c{qt_installer.sis} file, select "Install with Nokia Application - Installer" and follow the instructions. - -\section1 Running Qt demos - - We've included a subset of the Qt demos in this package for you - to try out. An excellent starting point is the "fluidlauncher" - demo. - - To run the demo on a real device, install \c{fluidlauncher.sis} - found in the Qt installation directory to a device that already has Qt installed. - After installation, you can find fluidlauncher in the applications folder of the device. - - To run the demos and examples on the emulator, you need to build them first. - Open the "Qt for the Symbian platform Command Prompt" from the Start menu and type: - - \snippet doc/src/snippets/code/doc_src_installation.qdoc 25 - - To run the demos on the emulator simply navigate to the directory of the demo - you want to see and run: - - \snippet doc/src/snippets/code/doc_src_installation.qdoc 27 - - For more information about building and running Qt programs on the -Symbian platform, - see \l{The Symbian platform - Introduction to Qt}. - -\bold{We hope you will enjoy using Qt.} - + Qt for Symbian binary packages (SIS files) are available from the \l + {http://qt.nokia.com/downloads}{Qt SDK}. */ /*! \page install-Symbian.html diff --git a/doc/src/internationalization/i18n.qdoc b/doc/src/internationalization/i18n.qdoc index 2abc28648c..f70662350c 100644 --- a/doc/src/internationalization/i18n.qdoc +++ b/doc/src/internationalization/i18n.qdoc @@ -514,7 +514,6 @@ \ingroup internationalization \previouspage Internationalization with Qt \contentspage Internationalization with Qt - \nextpage Translation Rules for Plurals \brief How to write source code in a way that makes it possible for user-visible text to be translated. \tableofcontents @@ -700,8 +699,8 @@ set using QLocale::setDefault(). (If no default locale was specified, the "C" locale is used.) - A summary of the rules used to translate strings containing plurals can be - found in the \l{Translation Rules for Plurals} document. + A summary of supported languages and the rules used to translate strings + containing plurals can be obtained by running \tt{lupdate -list-languages}. \section1 Enabling Translation @@ -717,55 +716,5 @@ \section1 Further Reading - \l{Qt Linguist Manual}, \l{Hello tr() Example}, \l{Translation Rules for Plurals} -*/ - -/*! - \page i18n-plural-rules.html - \title Translation Rules for Plurals - \ingroup internationalization - \previouspage Writing Source Code for Translation - \contentspage Internationalization with Qt - \brief A summary of the translation rules for plurals produced by Qt's i18n tools. - - The table below shows the specific rules that are produced by Qt Linguist - and \c lrelease for a selection of languages. Cells marked \e otherwise - indicate the form used when none of the other rules are appropriate for a - specific language. - - \table 80% - \header \o Language \o Rule 1 \o Rule 2 \o Rule 3 - \row \o English \o \c{n == 1} - \o \e{otherwise} \o N/A - \row \o French \o \c{n < 2} - \o \e{otherwise} \o N/A - \row \o Czech \o \c{n % 100 == 1} - \o \c{n % 100 >= 2 && n % 100 <= 4} - \o \e{otherwise} - \row \o Irish \o \c{n == 1} - \o \c{n == 2} \o \e{otherwise} - \row \o Latvian \o \c{n % 10 == 1&& n % 100 != 11} - \o \c{n != 0} \o \e{otherwise} - \row \o Lithuanian \o \c{n % 10 == 1&& n % 100 != 11} - \o \c{n % 100 != 12 && n % 10 == 2} - \o \e{otherwise} - \row \o Macedonian \o \c{n % 10 == 1} - \o \c{n % 10 == 2} \o \e{otherwise} - \row \o Polish \o \c{n == 1} - \o \c{n % 10 >= 2 && n % 10 <= 4 - && (n % 100 < 10 || n % 100 > 20)} - \o \e{otherwise} - \row \o Romanian \o \c{n == 1} - \o \c{n == 0|| (n % 100 >= 1 && n % 100 <= 20)} - \o \e{otherwise} - \row \o Russian \o \c{n % 10 == 1&& n % 100 != 11} - \o \c{n % 10 >= 2 && n % 10 <= 4 - && (n % 100 < 10 || n % 100 > 20)} - \o \e{otherwise} - \row \o Slovak \o \c{n == 1} \o \c{n >= 2 && n <= 4} - \o \e{otherwise} - \row \o Japanese \o \e{otherwise} \o N/A \o N/A - \endtable - - The rules themselves are not documented and are internal to Qt Linguist and \c lrelease. + \l{Qt Linguist Manual}, \l{Hello tr() Example} */ diff --git a/doc/src/mainpage.qdoc b/doc/src/mainpage.qdoc index 41818eea3d..154d14c1ae 100644 --- a/doc/src/mainpage.qdoc +++ b/doc/src/mainpage.qdoc @@ -110,6 +110,7 @@ applications using layouts and Qt Quick interfaces with QML. \o \l{Qt Quick} - create UIs using QML \list \o \l{external: Developing Qt Quick Applications}{Creator's QML Design Mode} - design Qt Quick interfaces using Creator's design mode + \o \l{Qt Quick Components for Symbian 1.1}{Qt Quick Components for Symbian} - a native QML component set for the Symbian^3 platform \endlist \o \l{Widgets and Layouts} - primary elements for C++ based interfaces \list diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index e1e8c44cd8..f177cd7b17 100644 --- a/doc/src/platforms/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -685,7 +685,10 @@ \ingroup platform-specific \brief Information about the state of support for the Symbian platform. - This page documents the current notes for the Symbian port. + This page describes implementation details regarding the Qt for Symbian port. To get + started with application development for Symbian devices, read the \l + {http://doc.qt.nokia.com/qtcreator/creator-developing-symbian.html} + {Connecting Symbian Devices} document. \section1 Source Compatibility @@ -698,10 +701,10 @@ As with every supported platform, Qt strives to maintain application behavior and binary compatibility throughout the lifetime of the Qt 4.x - major version and on the Symbian devices that support Qt. Symbian support in - Qt SDK and Ovi Store were introduced with Qt 4.6. Each Qt release contains - bug fixes that might change the API behavior and thereby affect application - compatibility. + major version and on the \l {Supported Devices}{Symbian devices that support Qt}. + Symbian support in Qt SDK and Ovi Store were introduced with Qt 4.6. Each Qt + release contains bug fixes that might change the API behavior and thereby + affect application compatibility. In addition, Symbian devices have different input methods, such as different keyboard styles or touch input, screen sizes, memory, and CPU and GPU @@ -711,74 +714,94 @@ Generally, an earlier target (such as S60 5th Edition) is supported on a larger number of devices than a later target (such as Symbian Belle). + \target Supported Devices \section1 Supported Devices + + The \l {http://developer.qt.nokia.com/wiki/support_for_Symbian}{Support for Symbian} document + details the Qt support on different Symbian devices. - \l {http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian#Supported_Devices}{Nokia Smart Installer for Symbian} - documentation lists supported devices. + The \l {http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian#Supported_Devices} + {Nokia Smart Installer for Symbian} document lists how Qt is supported on + different Symbian devices through Smart Installer. Qt versions are supported by Symbian devices as follows: \list \o Qt 4.6 is supported by S60 3rd Edition feature pack 1 and newer devices through \l {http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian}{Smart Installer}. - \o Qt 4.7.3 is supported by S60 5th Edition and newer devices. + \o Qt 4.7.3 is supported by S60 5th Edition and newer devices + through \l {http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian}{Smart Installer}. \endlist Symbian devices have a pre-installed Qt support as follows: \list - \o Symbian Anna: Qt 4.7.3 in C: drive. + \o Symbian Anna: Qt 4.7.3 in C: drive. Note that Qt 4.7.4 is supported in Symbian Anna + through \l {http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian}{Smart Installer}. \o Symbian Belle: Qt 4.7.4 in device firmware (ROM). \endlist - \section1 Supported Functionality - - The following technologies and classes are not currently supported: - - \table - \header \o Technology - \o Note - \row \o QtConcurrent - \o Planned for future release. - \row \o QtDBus - \o No current plans to support this feature. - \row \o Printing support - \o No current plans to support this feature. - \row \o Qt3Support - \o No current plans to support this feature. - \endtable + \section1 Functionality Support + The following technologies and classes are not supported: + \list + \o QtConcurrent + \o QtDBus + \o \l {http://doc.qt.nokia.com/4.8/printing.html}{Printing support} + \o Qt3Support + \endlist + The following technologies have limited support: \table - \header \o Technology + \header \o Module \o Note \row \o QtSql \o The supported drivers are SQLite and QSYMSQL. \row \o QtMultimedia - \o For support details see \l {Multimedia and Phonon Support} section. + \o For support details see \l {Multimedia Support} section. + \row \o QtGui + \o QtGui's widgets are deprecated (i.e. they are available but not + recommended to use) in the Symbian port. It is recommended to use \l + {http://doc.qt.nokia.com/qt-components-symbian-1.1/symbian-components-functional.html} + {Qt Quick Components for Symbian} instead, because they provide + better look and feel on Symbian devices. + + Moreover, the following classes of QtGui \bold {should not + be used} in a Symbian application: + + \list + \o QFileDialog with the \c DontUseNativeDialog option + \o QColorDialog with the \c DontUseNativeDialog option + \o QFontDialog + \o QWizard + \o QCalendarWidget + \o QDateTimeEdit + \o QMdiArea + \o QDockWidget + \o QMdiSubWindow + \o QPrintPreviewWidget + \endlist + + QScrollArea: The scrolling and focus handling of QScrollArea's all + scrollable widgets, for example QListView, differs from native Avkon + list widgets' one. Native Avkon scrollable components support + touch-gesture-based scrolling by dragging and flicking the UI + component but this functionality is not implemented in Qt widgets. + Scrolling by dragging and flicking works also in Qt Quick Components + that implements the \l + {http://www.developer.nokia.com/Resources/Library/Symbian_Design_Guidelines/} + {Symbian design guidelines}. + \endtable - - It is not recommended to use the following Qt widgets: - \list - \o QFileDialog with the \c DontUseNativeDialog option - \o QColorDialog with the \c DontUseNativeDialog option - \o QFontDialog - \o QWizard - \o QCalendarWidget - \o QDateTimeEdit - \o QMdiArea - \o QMdiSubWindow - \o QDockWidget - \o QPrintPreviewWidget - \endlist \section1 Compiler Notes - - \section2 GCCE (Symbian) - - GCCE cannot be used to compile Qt libaries for the Symbian platform, but GCCE is supported - when compiling Qt applications for the Symbian platform. + + For the application development the necessary compiler toolchain is included in \l + {http://qt.nokia.com/downloads}{Qt SDK}. For instructions compiling Qt + itself see the \l + {http://doc.qt.nokia.com/stable/install-symbian.html} + {Installing Qt for the Symbian platform} document. \section1 Known Issues @@ -794,11 +817,14 @@ \section1 Required Capabilities - The Qt libraries are typically signed with \c{All -TCB} capabilites, but + The Qt libraries are typically signed with \c{All -TCB} capabilites but that does not mean your Qt application needs to be signed with the same capabilities to function properly. The capabilities your application needs - to function properly depends on which parts of Qt you use, here is an - overview: + to function properly depends on which parts of Qt you use. + In a Qt application Symbian capabilities are defined in the + \l {http://doc.qt.nokia.com/4.8/qmake-variable-reference.html#target-capability} + {TARGET.CAPABILITY} qmake variable in the project file. + Here is an overview for which capabilities may be needed when using different modules: \table \header \o Module @@ -815,9 +841,9 @@ \o \c ReadUserData is required to include all the phone's SSL certificates in the system's default CA certificate list (for example those added by the user or stored in the SIM card), without this capability only the CA certs built into the phone are used. - \row \o QtMultiMedia + \row \o QtMultimedia \o \c UserEnvironment if QAudioInput is used. - \row \o QtWebkit + \row \o QtWebKit \o \c NetworkServices is automatically added for this module if no capabilities are explicitly specified. \endtable @@ -828,30 +854,41 @@ For more information see the documentation of the individual Qt classes. If a class does not mention Symbian capabilities, it requires none. - \target Multimedia and Phonon Support - \section1 Multimedia and Phonon Support + \target Multimedia Support + \section1 Multimedia Support - Qt provides a high-level API for multimedia functionality with - (\l{http://doc.qt.nokia.com/qtmobility/multimedia.html}). + Qt Mobility provides a high-level API for multimedia functionality with + \l{http://doc.qt.nokia.com/qtmobility/multimedia.html}{QtMultimediaKit}. + In addition, Qt provides the low-level \l {QtMultimedia}{QtMultimedia} + module that is internally used by the QtMultimediaKit. For more information + on developing multimedia applications for Symbian devices, see + \l {http://www.developer.nokia.com/info/sw.nokia.com/id/4abf12e7-72d8-45ef-b1a2-46184abe18ba/Guide_for_Qt_Multimedia_Developers.html} + {Guide for Qt Multimedia Developers}. - Qt also provides a backend for Qt's Phonon module, which supports video and - sound playback through Symbian's Multimedia Framework, MMF. Note that Phonon - support is not being extended, and that Qt's multimedia module will - take over for Phonon at a later stage. + Moreover, there is a third multimedia-related module called Phonon. Qt + provides two backends for the Phonon module in Symbian: \i MMF and \i Helix. - In this release the support is experimental. Video playback may show - artifacts when the video is moved or resized (for instance during - orientation flips). This problem is present on S60 5th Edition and earlier - versions, and on Symbian^3 systems. + Note that Phonon is a legacy module and the QtMultimediaKit module is + replacing Phonon in Qt 5. Although Phonon is supported in Symbian for + backwards compatibility and there is no plan to remove Phonon from Symbian + any new applications should use QtMultimediaKit in Symbian using Qt 4.7 + bundle. The QtMultimediaKit feature set is comparable to that in Phonon. - The audio and video formats that Phonon supports depends on what support + The following applies to Phonon: + \list + \o MMF Phonon backend supports video and sound playback through Symbian's + Multimedia Framework, MMF. Phonon's video playback may show artifacts when + the video is moved or resized (for instance, during device orientation + changes from portrait to landscape and vice versa). This problem is present + on S60 5th Edition and earlier versions, as well as in Symbian Anna devices. + \o The audio and video formats that Phonon supports depends on what support the platform provides for MMF. The emulator is known to have limited codec support. - - In addition, there exists a backend for the Helix framework. However, since + \o In addition, there exists a backend for the Helix framework. However, since it is not shipped with Qt, its availability depends on the Symbian platform in use. If the MFF plugin fails to load, the Helix plugin, if present on the device, will be loaded instead. + \endlist \section1 Hardware Accelerated Rendering @@ -870,17 +907,18 @@ \o Popups \endlist - \section1 QtOpenGL Support in Symbian + \section1 OpenGL Support in Symbian Qt 4.7 introduces the \l {QtOpenGL} module. QtOpenGL is supported on devices which support OpenGL ES 2.0. Symbian platforms prior - to Symbian^3 are not supported. + to Symbian Anna (and Symbian^3) are not supported. \l QGLWidget usage as a \l QGraphicsView viewport is not recommended on Symbian. The OpenVG graphics system is not able to manage OpenGL graphics resources. Also, a QGLWidget object is not able to release its GPU resources when the application goes to the background. If OpenGL functionality is - needed, OpenGL graphics system usage is recommended. If an application + needed, \l { http://doc.qt.nokia.com/4.7-snapshot/qapplication.html#setGraphicsSystem} + {OpenGL graphics system} usage is recommended. If an application decides to use QGLWidget, then it is the application's responsibility to destroy and release QGLWidget and related OpenGL resources when the application goes to the background. Otherwise, the \l{Graphics Out Of Memory monitor} @@ -891,7 +929,7 @@ QGLShader, and \l QGLShaderProgram are direct GPU resources and it is the application's responsibility to manage them. - \section1 UI Performance in devices prior to Symbian^3 + \section1 UI Performance in S60 3rd and 5th Edition Devices Qt uses the QPainter class to perform low-level painting on widgets and other paint devices. QPainter provides functions to draw complex shapes, @@ -899,11 +937,18 @@ transformations and Porter-Duff composition. If the underlying graphics architecture does not support all of these operations then Qt uses the raster graphics system for rendering. - - Most of the Symbian devices prior to Symbian^3 use a non-ScreenPlay - graphics architecture which does not have native support for all functions - provided by QPainter. In non-ScreenPlay devices Qt uses the raster - graphics system by default which has a performance penalty when compared + + In Symbian Anna (and Symbian^3) Qt uses hardware accelerated graphics as explained above. + This is enabled by \l + {http://library.developer.nokia.com/index.jsp?topic=/GUID-E35887BB-7E58-438C-AA27-97B2CDE7E069/GUID-D93978BE-11A3-5CE3-B110-1DEAA5AD566C.html} + {ScreenPlay Graphics Architecture} in these devices. + + Most of the Symbian S60 3rd and 5th Edition devices have a + graphics architecture that does not have native support for all functions + provided by QPainter. In these \l + {http://library.developer.nokia.com/index.jsp?topic=/GUID-E35887BB-7E58-438C-AA27-97B2CDE7E069/GUID-D93978BE-11A3-5CE3-B110-1DEAA5AD566C.html} + {non-ScreenPlay} devices Qt uses the raster + graphics system by default that has a performance penalty compared to native Symbian rendering. In order to be able to perform all functions provided by QPainter, the @@ -914,7 +959,8 @@ offscreen buffer is blitted to the framebuffer via Symbian Window Server. The following table shows the rendering stacks of native Symbian and Qt in - non-ScreenPlay devices. + \l {http://library.developer.nokia.com/index.jsp?topic=/GUID-E35887BB-7E58-438C-AA27-97B2CDE7E069/GUID-D93978BE-11A3-5CE3-B110-1DEAA5AD566C.html} + {non-ScreenPlay devices}. \table \header \o Symbian diff --git a/doc/src/platforms/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc index ba59c375f4..92bf12d744 100644 --- a/doc/src/platforms/supported-platforms.qdoc +++ b/doc/src/platforms/supported-platforms.qdoc @@ -465,6 +465,8 @@ \o \l{Platform and Compiler Notes - Symbian}{Platform Notes - Symbian} - Platform specific notes. \o \l{Getting Started Guides}{Getting started} + \o \l{Qt Quick Components for Symbian 1.1}{Qt Quick Components for Symbian} + - provides a QML component set for the Symbian^3 platform \endlist \section1 Key Features for Symbian Development @@ -481,6 +483,9 @@ time and lines of code required for traditional UI styling with Qt Style Sheets. + The \l{Qt Quick Components for Symbian 1.1}{Qt Quick Components for Symbian 1.1} + provides a native QML component set. + \section2 Graphics Features Qt for Symbian contains a powerful paint engine that provides diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc index e5d4a16488..bacdbc8740 100644 --- a/doc/src/platforms/symbian-introduction.qdoc +++ b/doc/src/platforms/symbian-introduction.qdoc @@ -42,7 +42,6 @@ \o \list \o \l {Qt for the Symbian platform Requirements} - \o \l {Installing Qt for the Symbian platform from a Binary Package} \o \l {Installing Qt for the Symbian platform} \o \l {The Symbian platform - Introduction to Qt}{Introduction to using Qt} \endlist @@ -95,9 +94,6 @@ \section1 Installing Qt and Running Demos - Follow the instructions found in \l{Installing Qt for the Symbian platform from a Binary Package} - to learn how to install Qt using a binary package and how to build and run Qt demos. - Follow the instructions found in \l{Installing Qt for the Symbian platform} to learn how to install Qt using using source package and how to build and run the Qt demos. diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc index f67ff83bf9..c4d400d438 100644 --- a/doc/src/qt-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc @@ -554,3 +554,8 @@ \externalpage http://labs.qt.nokia.com/2011/05/03/qt-modules-maturity-level/ \title Qt Modules' Maturity Level - Description */ + +/*! + \externalpage http://doc.qt.nokia.com/qtquick-components-symbian-1.1/index.html + \title Qt Quick Components for Symbian 1.1 +*/
\ No newline at end of file diff --git a/doc/src/snippets/code/doc_src_unix-signal-handlers.cpp b/doc/src/snippets/code/doc_src_unix-signal-handlers.cpp index fd5f38631a..a5f3ed120b 100644 --- a/doc/src/snippets/code/doc_src_unix-signal-handlers.cpp +++ b/doc/src/snippets/code/doc_src_unix-signal-handlers.cpp @@ -44,7 +44,7 @@ class MyDaemon : public QObject Q_OBJECT public: - MyDaemon(QObject *parent = 0, const char *name = 0); + MyDaemon(QObject *parent = 0); ~MyDaemon(); // Unix signal handlers. @@ -67,8 +67,8 @@ class MyDaemon : public QObject //! [1] -MyDaemon::MyDaemon(QObject *parent, const char *name) - : QObject(parent,name) +MyDaemon::MyDaemon(QObject *parent) + : QObject(parent) { if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sighupFd)) qFatal("Couldn't create HUP socketpair"); diff --git a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp b/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp index 11f5163f50..e695572997 100644 --- a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp +++ b/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp @@ -76,7 +76,7 @@ QString result = future.result(); //! [4] // call 'QList<QByteArray> QByteArray::split(char sep) const' in a separate thread QByteArray bytearray = "hello world"; -QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split), ','); +QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split, ','); ... QList<QByteArray> result = future.result(); //! [4] @@ -84,7 +84,7 @@ QList<QByteArray> result = future.result(); //! [5] // call 'void QImage::invertPixels(InvertMode mode)' in a separate thread QImage image = ...; -QFuture<void> future = QtConcurrent::run(image, &QImage::invertPixels, QImage::InvertRgba); +QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba); ... future.waitForFinished(); // At this point, the pixels in 'image' have been inverted diff --git a/doc/src/snippets/code/src_corelib_io_qsettings.cpp b/doc/src/snippets/code/src_corelib_io_qsettings.cpp index 269aa44079..91c540121c 100644 --- a/doc/src/snippets/code/src_corelib_io_qsettings.cpp +++ b/doc/src/snippets/code/src_corelib_io_qsettings.cpp @@ -230,7 +230,7 @@ settings.setValue("sofa", true); settings.setValue("tv", false); QStringList groups = settings.childGroups(); -// group: ["fridge"] +// groups: ["fridge"] //! [21] diff --git a/doc/src/template/scripts/functions.js b/doc/src/template/scripts/functions.js index 3ab4a082a7..af204d8d06 100755 --- a/doc/src/template/scripts/functions.js +++ b/doc/src/template/scripts/functions.js @@ -183,17 +183,6 @@ var blankRE=/^\s*$/; function CheckEmptyAndLoadList() { - /* Start Extracting information for feedback and adding this to the feedback form */ - var pageUrl = window.location.pathname; - var pageVal = $('title').html(); - $('#pageType').removeClass('red'); - $('#feedUrl').remove(); - $('#pageVal').remove(); - $('.menuAlert').remove(); - $('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">'); - $('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">'); - /* End Extracting information for feedback and adding this to the feedback form */ - /* extracts search query */ var value = document.getElementById('pageType').value; /* if the search is less than three chars long remove class names and remove elements from old search*/ @@ -255,4 +244,4 @@ function CheckEmptyAndLoadList() }); }, 500); /* timer set to 500 ms */ }); - });
\ No newline at end of file + }); diff --git a/examples/examples.pro b/examples/examples.pro index cf12dd6dc1..0c4c9cb003 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -63,7 +63,7 @@ contains(QT_CONFIG, opengl): SUBDIRS += opengl contains(QT_CONFIG, openvg): SUBDIRS += openvg contains(QT_CONFIG, dbus): SUBDIRS += dbus contains(QT_CONFIG, declarative): SUBDIRS += declarative -win32: SUBDIRS += activeqt +win32:!win32-g++*: SUBDIRS += activeqt contains(QT_CONFIG, xmlpatterns):!contains(QT_CONFIG, no-gui): SUBDIRS += xmlpatterns contains(DEFINES, QT_NO_CURSOR): SUBDIRS -= mainwindows contains(QT_CONFIG, concurrent): SUBDIRS += qtconcurrent diff --git a/examples/xml/saxbookmarks/main.cpp b/examples/xml/saxbookmarks/main.cpp index 5d70ec89a5..ba0e1dbcbc 100644 --- a/examples/xml/saxbookmarks/main.cpp +++ b/examples/xml/saxbookmarks/main.cpp @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); MainWindow mainWin; #if defined(Q_OS_SYMBIAN) - mainWin.showFullScreen(); + mainWin.showMaximized(); #else mainWin.show(); #endif diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 61a622843a..c50dc77480 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -151,11 +151,11 @@ SYMBIAN_SUPPORTED_LANGUAGES = \ mr mo mn nb pl pt pa ro ru sr \ si sk sl so es sw sv tl ta te \ th bo ti tr tk uk ur vi cy zu \ - nn eu zh gl fa st en_US fr_BE \ - pt_BR en_CA fr_CA el_CY tr_CY \ - en_TW en_HK en_CN en_JP en_TH \ - sv_FI zh_HK es_419 en_ZA fr_CH \ - de_CH it_CH zh_TW + nn eu zh gl fa st en_us fr_be \ + pt_br en_ca fr_ca el_cy tr_cy \ + en_tw en_hk en_cn en_jp en_th \ + sv_fi zh_hk es_419 en_za fr_ch \ + de_ch it_ch zh_tw # These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins @@ -251,7 +251,8 @@ defineTest(matchSymbianLanguages) { # Cannot parse .ts file for language here, so detect it from filename. # Allow two and three character language and country codes. for(translation, TRANSLATIONS) { - language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) + low_translation = $$lower($$translation) + language = $$replace(low_translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) !contains(HANDLED_LANGUAGES, $$language) { HANDLED_LANGUAGES += $$language # Make sure translation path is absolute or shadow builds will not work diff --git a/mkspecs/features/symbian/localize_deployment.prf b/mkspecs/features/symbian/localize_deployment.prf index 185c7130c0..3e7f585094 100644 --- a/mkspecs/features/symbian/localize_deployment.prf +++ b/mkspecs/features/symbian/localize_deployment.prf @@ -76,26 +76,26 @@ SYMBIAN_LANG.cy = 97 #Welsh SYMBIAN_LANG.zu = 98 #Zulu # Regional dialects -SYMBIAN_LANG.en_US = 10 #American English -SYMBIAN_LANG.fr_BE = 21 #Belgian French -SYMBIAN_LANG.pt_BR = 76 #Brazilian Portuguese -SYMBIAN_LANG.en_CA = 46 #Canadian English -SYMBIAN_LANG.fr_CA = 51 #Canadian French -SYMBIAN_LANG.el_CY = 55 #Cyprus Greek -SYMBIAN_LANG.tr_CY = 91 #Cyprus Turkish -SYMBIAN_LANG.en_TW = 157 #English as appropriate for use in Taiwan -SYMBIAN_LANG.en_HK = 158 #English as appropriate for use in Hong Kong -SYMBIAN_LANG.en_CN = 159 #English as appropriate for use in the Peoples Republic of China -SYMBIAN_LANG.en_JP = 160 #English as appropriate for use in Japan -SYMBIAN_LANG.en_TH = 161 #English as appropriate for use in Thailand -SYMBIAN_LANG.sv_FI = 85 #Finland Swedish -SYMBIAN_LANG.zh_HK = 30 #HongKong Chinese +SYMBIAN_LANG.en_us = 10 #American English +SYMBIAN_LANG.fr_be = 21 #Belgian French +SYMBIAN_LANG.pt_br = 76 #Brazilian Portuguese +SYMBIAN_LANG.en_ca = 46 #Canadian English +SYMBIAN_LANG.fr_ca = 51 #Canadian French +SYMBIAN_LANG.el_cy = 55 #Cyprus Greek +SYMBIAN_LANG.tr_cy = 91 #Cyprus Turkish +SYMBIAN_LANG.en_tw = 157 #English as appropriate for use in Taiwan +SYMBIAN_LANG.en_hk = 158 #English as appropriate for use in Hong Kong +SYMBIAN_LANG.en_cn = 159 #English as appropriate for use in the Peoples Republic of China +SYMBIAN_LANG.en_jp = 160 #English as appropriate for use in Japan +SYMBIAN_LANG.en_th = 161 #English as appropriate for use in Thailand +SYMBIAN_LANG.sv_fi = 85 #Finland Swedish +SYMBIAN_LANG.zh_hk = 30 #HongKong Chinese SYMBIAN_LANG.es_419 = 83 #Latin American Spanish -SYMBIAN_LANG.en_ZA = 48 #South African English -SYMBIAN_LANG.fr_CH = 11 #Swiss French -SYMBIAN_LANG.de_CH = 12 #Swiss German -SYMBIAN_LANG.it_CH = 61 #Swiss Italian -SYMBIAN_LANG.zh_TW = 29 #Taiwan Chinese +SYMBIAN_LANG.en_za = 48 #South African English +SYMBIAN_LANG.fr_ch = 11 #Swiss French +SYMBIAN_LANG.de_ch = 12 #Swiss German +SYMBIAN_LANG.it_ch = 61 #Swiss Italian +SYMBIAN_LANG.zh_tw = 29 #Taiwan Chinese isEmpty(SYMBIAN_MATCHED_LANGUAGES) { matchSymbianLanguages() diff --git a/qmake/generators/integrity/gbuild.cpp b/qmake/generators/integrity/gbuild.cpp index f273237958..f9fdb3885b 100644 --- a/qmake/generators/integrity/gbuild.cpp +++ b/qmake/generators/integrity/gbuild.cpp @@ -392,19 +392,13 @@ QString GBuildMakefileGenerator::writeOne(QString filename, QString pathtoremove s += "\n"; } else if (filename.endsWith(Option::cpp_ext.first())) { QString tmpstr(filename.section("/", -1)); -// QString moctool(project->values("QMAKE_MOC").first()); QString filepath(pathtoremove); if (!project->values("QT_SOURCE_TREE").isEmpty()) { filepath.remove(project->values("QT_SOURCE_TREE").first()); filepath.remove(0, 1); } -// if (!project->values("QT_BUILD_TREE").isEmpty()) { -// moctool.remove(project->values("QT_BUILD_TREE").first()); -// moctool.remove(0, 1); -// } s += "\n\t:preexecShellSafe='${QT_BUILD_DIR}/bin/moc "; -// s += moctool; -// s += " "; + s += "-nn "; s += varGlue("DEFINES", "-D", " -D", " "); s += varGlue("INCLUDEPATH", "-I", " -I", " "); s += filepath; diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index f9cbed1465..4f4c1ff57e 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -568,7 +568,8 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file) keyword_len++; } - if(keyword_len == 7 && !strncmp(keyword, "include", keyword_len)) { + if((keyword_len == 7 && !strncmp(keyword, "include", 7)) // C & Obj-C + || (keyword_len == 6 && !strncmp(keyword, "import", 6))) { // Obj-C char term = *(buffer + x); if(term == '<') { try_local = false; diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 2c4373a36d..8db82d6dca 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -850,6 +850,7 @@ void SymbianCommonGenerator::parseTsFiles(SymbianLocalizationList *symbianLocali foreach (QString file, symbianTsFiles) { QRegExp matcher(matchStr); + matcher.setCaseSensitivity(Qt::CaseInsensitive); if (matcher.exactMatch(file) && parseTsContent(file, &loc)) break; } diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index 0b201b8723..bf84e60a69 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -653,7 +653,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) << valueTagT(tool.SingleProjects.at(i).Configuration.linker.IgnoreImportLibrary); } - if ( tool.SingleProjects.at(i).Configuration.linker.LinkIncremental != unset) { + if ( tool.SingleProjects.at(i).Configuration.linker.LinkIncremental != linkIncrementalDefault) { const triState ts = (tool.SingleProjects.at(i).Configuration.linker.LinkIncremental == linkIncrementalYes ? _True : _False); xml << tag("LinkIncremental") << attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(tool.SingleProjects.at(i).Configuration.Name)) diff --git a/qmake/qmake.pri b/qmake/qmake.pri index 87735d6747..c2fc1d51e8 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -20,6 +20,7 @@ SOURCES += project.cpp property.cpp main.cpp generators/makefile.cpp \ generators/symbian/symmake_abld.cpp \ generators/symbian/symmake_sbsv2.cpp \ generators/symbian/initprojectdeploy_symbian.cpp \ + generators/integrity/gbuild.cpp \ windows/registry.cpp \ symbian/epocroot.cpp @@ -36,6 +37,7 @@ HEADERS += project.h property.h generators/makefile.h \ generators/symbian/symmake_abld.h \ generators/symbian/symmake_sbsv2.h \ generators/symbian/initprojectdeploy_symbian.h \ + generators/integrity/gbuild.h \ windows/registry_p.h \ symbian/epocroot_p.h diff --git a/src/3rdparty/libpng/pngconf.h b/src/3rdparty/libpng/pngconf.h index 2a41a297e4..b02f2a0cd8 100644 --- a/src/3rdparty/libpng/pngconf.h +++ b/src/3rdparty/libpng/pngconf.h @@ -286,6 +286,11 @@ # endif # endif +/* Avoid exporting libpng symbols from Qt DLL on Windows */ +# if defined (_MSC_VER) && defined(PNG_IMPEXP) +# undef PNG_IMPEXP +# endif + # ifndef PNG_IMPEXP # define PNG_IMPEXP # endif diff --git a/src/corelib/global/qconfig-minimal.h b/src/corelib/global/qconfig-minimal.h index ace1eea508..1035631e9a 100644 --- a/src/corelib/global/qconfig-minimal.h +++ b/src/corelib/global/qconfig-minimal.h @@ -324,9 +324,6 @@ #ifndef QT_NO_QWSEMBEDWIDGET # define QT_NO_QWSEMBEDWIDGET #endif -#ifndef QT_NO_QWS_ALPHA_CURSOR -# define QT_NO_QWS_ALPHA_CURSOR -#endif #ifndef QT_NO_QWS_CURSOR # define QT_NO_QWS_CURSOR #endif diff --git a/src/corelib/global/qconfig-nacl.h b/src/corelib/global/qconfig-nacl.h index 18ae261809..5aefdfeee5 100644 --- a/src/corelib/global/qconfig-nacl.h +++ b/src/corelib/global/qconfig-nacl.h @@ -247,9 +247,6 @@ #ifndef QT_NO_QWSEMBEDWIDGET # define QT_NO_QWSEMBEDWIDGET #endif -#ifndef QT_NO_QWS_ALPHA_CURSOR -# define QT_NO_QWS_ALPHA_CURSOR -#endif #ifndef QT_NO_QWS_CURSOR # define QT_NO_QWS_CURSOR #endif diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index e0b8a8fb6d..64d5f08686 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -178,9 +178,6 @@ // QWSEmbedWidget //#define QT_NO_QWSEMBEDWIDGET -// Alpha Cursor -//#define QT_NO_QWS_ALPHA_CURSOR - // Decoration //#define QT_NO_QWS_DECORATION_DEFAULT diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index 6b861d4d17..dea05e0ac1 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -1268,13 +1268,6 @@ Requires: CURSOR Name: Cursor SeeAlso: ??? -Feature: QWS_ALPHA_CURSOR -Description: Supports alpha-blended cursors. -Section: Qt for Embedded Linux -Requires: -Name: Alpha Cursor -SeeAlso: ??? - Feature: QWS_MANAGER Description: Supports the window manager. Section: Qt for Embedded Linux diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 4ba8e0675d..48b9358fe9 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -1872,7 +1872,10 @@ QString QDir::currentPath() Under non-Windows operating systems the \c HOME environment variable is used if it exists, otherwise the path returned by the - rootPath(). On Symbian always the same as the path returned by the rootPath(). + rootPath(). + + On Symbian this typically returns "c:/data", + i.e. the same as native PathInfo::PhoneMemoryRootPath(). \sa home(), currentPath(), rootPath(), tempPath() */ @@ -1936,9 +1939,8 @@ QString QDir::tempPath() /*! Returns the absolute path of the root directory. - For Unix operating systems this returns "/". For Windows file - systems this normally returns "c:/". On Symbian this typically returns - "c:/data", i.e. the same as native PathInfo::PhoneMemoryRootPath(). + For Unix operating systems this returns "/". For Windows and Symbian file + systems this normally returns "c:/". I.E. the root of the system drive. \sa root(), drives(), currentPath(), homePath(), tempPath() */ diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 06c403a117..d08574d456 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -1332,6 +1332,13 @@ bool QFile::open(const RFile &f, OpenMode mode, FileHandleFlags handleFlags) This function is not supported on Windows CE. + On Symbian, this function returns -1 if the file was opened normally, + as Symbian OS native file handles do not fit in an int, and are + incompatible with C library functions that the handle would be used for. + If the file was opened using the overloads that take an open C library + file handle / file descriptor, then this function returns that same + handle. + \sa QSocketNotifier */ diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 031d64ba80..28a72672c6 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -692,7 +692,7 @@ bool QFileSystemEngine::fillPermissions(const QFileSystemEntry &entry, QFileSyst if (what & QFileSystemMetaData::UserWritePermission) { if (::_waccess((wchar_t*)entry.nativeFilePath().utf16(), W_OK) == 0) data.entryFlags |= QFileSystemMetaData::UserWritePermission; - data.knownFlagsMask |= QFileSystemMetaData::UserReadPermission; + data.knownFlagsMask |= QFileSystemMetaData::UserWritePermission; } } @@ -1094,7 +1094,6 @@ QFileSystemEntry QFileSystemEngine::currentPath() if (ret.length() >= 2 && ret[1] == QLatin1Char(':')) ret[0] = ret.at(0).toUpper(); // Force uppercase drive letters. #else - Q_UNUSED(fileName); //TODO - a race condition exists when using currentPath / setCurrentPath from multiple threads if (qfsPrivateCurrentDir.isEmpty()) qfsPrivateCurrentDir = QCoreApplication::applicationDirPath(); diff --git a/src/corelib/io/qfilesystemwatcher_symbian.cpp b/src/corelib/io/qfilesystemwatcher_symbian.cpp index 63cc4f1ce6..fa857c61a9 100644 --- a/src/corelib/io/qfilesystemwatcher_symbian.cpp +++ b/src/corelib/io/qfilesystemwatcher_symbian.cpp @@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE QNotifyChangeEvent::QNotifyChangeEvent(RFs &fs, const TDesC &file, - QSymbianFileSystemWatcherEngine *e, bool aIsDir, + QSymbianFileSystemWatcherInterface *e, bool aIsDir, TInt aPriority) : CActive(aPriority), isDir(aIsDir), @@ -96,9 +96,9 @@ void QNotifyChangeEvent::RunL() if (!failureCount) { int err; - QT_TRYCATCH_ERROR(err, engine->emitPathChanged(this)); + QT_TRYCATCH_ERROR(err, engine->handlePathChanged(this)); if (err != KErrNone) - qWarning("QNotifyChangeEvent::RunL() - emitPathChanged threw exception (Converted error code: %d)", err); + qWarning("QNotifyChangeEvent::RunL() - handlePathChanged threw exception (Converted error code: %d)", err); } } } @@ -203,7 +203,7 @@ QStringList QSymbianFileSystemWatcherEngine::removePaths(const QStringList &path return p; } -void QSymbianFileSystemWatcherEngine::emitPathChanged(QNotifyChangeEvent *e) +void QSymbianFileSystemWatcherEngine::handlePathChanged(QNotifyChangeEvent *e) { QMutexLocker locker(&mutex); @@ -255,7 +255,7 @@ void QSymbianFileSystemWatcherEngine::addNativeListener(const QString &directory QMutexLocker locker(&mutex); QString nativeDir(QDir::toNativeSeparators(directoryPath)); TPtrC ptr(qt_QString2TPtrC(nativeDir)); - currentAddEvent = new QNotifyChangeEvent(qt_s60GetRFs(), ptr, this, directoryPath.endsWith(QChar(L'/'), Qt::CaseSensitive)); + currentAddEvent = q_check_ptr(new QNotifyChangeEvent(qt_s60GetRFs(), ptr, this, directoryPath.endsWith(QChar(L'/')))); syncCondition.wakeOne(); } diff --git a/src/corelib/io/qfilesystemwatcher_symbian_p.h b/src/corelib/io/qfilesystemwatcher_symbian_p.h index 0b317a062f..842df802c3 100644 --- a/src/corelib/io/qfilesystemwatcher_symbian_p.h +++ b/src/corelib/io/qfilesystemwatcher_symbian_p.h @@ -66,29 +66,35 @@ QT_BEGIN_NAMESPACE -class QSymbianFileSystemWatcherEngine; +class QSymbianFileSystemWatcherInterface; class QNotifyChangeEvent : public CActive { public: - QNotifyChangeEvent(RFs &fsSession, const TDesC &file, QSymbianFileSystemWatcherEngine *engine, + QNotifyChangeEvent(RFs &fsSession, const TDesC &file, QSymbianFileSystemWatcherInterface *engine, bool aIsDir, TInt aPriority = EPriorityStandard); ~QNotifyChangeEvent(); bool isDir; + TPath watchedPath; private: void RunL(); void DoCancel(); RFs &fsSession; - TPath watchedPath; - QSymbianFileSystemWatcherEngine *engine; + QSymbianFileSystemWatcherInterface *engine; int failureCount; }; -class QSymbianFileSystemWatcherEngine : public QFileSystemWatcherEngine +class QSymbianFileSystemWatcherInterface +{ +public: + virtual void handlePathChanged(QNotifyChangeEvent *e) = 0; +}; + +class QSymbianFileSystemWatcherEngine : public QFileSystemWatcherEngine, public QSymbianFileSystemWatcherInterface { Q_OBJECT @@ -111,7 +117,7 @@ public Q_SLOTS: private: friend class QNotifyChangeEvent; - void emitPathChanged(QNotifyChangeEvent *e); + void handlePathChanged(QNotifyChangeEvent *e); void startWatcher(); diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index e900663400..d70811c57d 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -2281,7 +2281,7 @@ QT_END_INCLUDE_NAMESPACE However, note that repeated calls to this function will recreate the list of environment variables, which is a non-trivial operation. - \note For new code, it is recommended to use QProcessEvironment::systemEnvironment() + \note For new code, it is recommended to use QProcessEnvironment::systemEnvironment() \sa QProcessEnvironment::systemEnvironment(), environment(), setEnvironment() */ diff --git a/src/corelib/kernel/qcore_symbian_p.cpp b/src/corelib/kernel/qcore_symbian_p.cpp index 04acfb0362..4f953a7df1 100644 --- a/src/corelib/kernel/qcore_symbian_p.cpp +++ b/src/corelib/kernel/qcore_symbian_p.cpp @@ -45,6 +45,7 @@ #include "qcore_symbian_p.h" #include <string> #include <in_sock.h> +#include "qdebug.h" QT_BEGIN_NAMESPACE @@ -115,6 +116,23 @@ public: QS60RFsSession() { qt_symbian_throwIfError(iFs.Connect()); qt_symbian_throwIfError(iFs.ShareProtected()); + //BC with 4.7: create private path on system drive + TInt sysdrive = iFs.GetSystemDrive(); + TInt err = iFs.CreatePrivatePath(sysdrive); + if (err != KErrNone && err != KErrAlreadyExists) + qWarning("Failed to create private path on system drive."); + TFileName pfn = RProcess().FileName(); + TInt drive; + if (pfn.Length() > 0 && iFs.CharToDrive(pfn[0], drive) == KErrNone) { + //BC with 4.7: create private path on application drive (except rom or system drive which is done above) + if (drive != sysdrive && drive != EDriveZ) { + err = iFs.CreatePrivatePath(drive); + if (err != KErrNone && err != KErrAlreadyExists) + qWarning("Failed to create private path on application drive."); + } + //BC with 4.7: set working directory to same drive as application + iFs.SetSessionToPrivate(drive); + } } ~QS60RFsSession() { diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 752bbaa0dc..2eb68f7c8e 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1991,12 +1991,6 @@ QString QCoreApplication::applicationDirPath() appPath = qt_TDesC2QString(privatePath); appPath.prepend(QLatin1Char(':')).prepend(qDriveChar); - // Create the appPath if it doesn't exist. Non-existing appPath will cause - // Platform Security violations later on if the app doesn't have AllFiles capability. - err = fs.CreatePrivatePath(drive); - if (err != KErrNone) - qWarning("QCoreApplication::applicationDirPath: Failed to create private path."); - d->cachedApplicationDirPath = QFileInfo(appPath).path(); } #else @@ -2335,6 +2329,33 @@ QString QCoreApplication::applicationVersion() #ifndef QT_NO_LIBRARY +#if defined(Q_OS_SYMBIAN) +void qt_symbian_installLibraryPaths(QString installPathPlugins, QStringList& libPaths) +{ + // Add existing path on all drives for relative PluginsPath in Symbian + QString tempPath = installPathPlugins; + if (tempPath.at(tempPath.length() - 1) != QDir::separator()) { + tempPath += QDir::separator(); + } + RFs& fs = qt_s60GetRFs(); + TPtrC tempPathPtr(reinterpret_cast<const TText*> (tempPath.constData())); + // Symbian searches should start from Y:. Fix start drive otherwise TFindFile starts from the session drive + _LIT(KStartDir, "Y:"); + TFileName dirPath(KStartDir); + dirPath.Append(tempPathPtr); + TFindFile finder(fs); + TInt err = finder.FindByDir(tempPathPtr, dirPath); + while (err == KErrNone) { + QString foundDir(reinterpret_cast<const QChar *>(finder.File().Ptr()), + finder.File().Length()); + foundDir = QDir(foundDir).canonicalPath(); + if (!libPaths.contains(foundDir)) + libPaths.append(foundDir); + err = finder.Find(); + } +} +#endif + Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive)) /*! @@ -2367,24 +2388,8 @@ QStringList QCoreApplication::libraryPaths() QStringList *app_libpaths = coreappdata()->app_libpaths = new QStringList; QString installPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath); #if defined(Q_OS_SYMBIAN) - // Add existing path on all drives for relative PluginsPath in Symbian if (installPathPlugins.at(1) != QChar(QLatin1Char(':'))) { - QString tempPath = installPathPlugins; - if (tempPath.at(tempPath.length() - 1) != QDir::separator()) { - tempPath += QDir::separator(); - } - RFs& fs = qt_s60GetRFs(); - TPtrC tempPathPtr(reinterpret_cast<const TText*> (tempPath.constData())); - TFindFile finder(fs); - TInt err = finder.FindByDir(tempPathPtr, tempPathPtr); - while (err == KErrNone) { - QString foundDir(reinterpret_cast<const QChar *>(finder.File().Ptr()), - finder.File().Length()); - foundDir = QDir(foundDir).canonicalPath(); - if (!app_libpaths->contains(foundDir)) - app_libpaths->append(foundDir); - err = finder.Find(); - } + qt_symbian_installLibraryPaths(installPathPlugins, *app_libpaths); } #else if (QFile::exists(installPathPlugins)) { @@ -2499,6 +2504,36 @@ void QCoreApplication::removeLibraryPath(const QString &path) QFactoryLoader::refreshAll(); } +#if defined(Q_OS_SYMBIAN) +void QCoreApplicationPrivate::rebuildInstallLibraryPaths() +{ + // check there is not a single fixed install path + QString nativeInstallPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath); + if (nativeInstallPathPlugins.at(1) == QChar(QLatin1Char(':'))) + return; + QString installPathPlugins = QDir::cleanPath(nativeInstallPathPlugins); + // look for the install path at the drive roots + installPathPlugins.prepend(QChar(QLatin1Char(':'))); + + QMutexLocker locker(libraryPathMutex()); + QStringList &app_libpaths = *coreappdata()->app_libpaths; + // Build a new library path, copying non-installPath components, and replacing existing install path with new + QStringList newPaths; + bool installPathFound = false; + foreach (QString path, app_libpaths) { + if (path.mid(1).compare(installPathPlugins, Qt::CaseInsensitive) == 0) { + // skip existing install paths, insert new install path when we find the first + if (!installPathFound) + qt_symbian_installLibraryPaths(nativeInstallPathPlugins, newPaths); + installPathFound = true; + } else { + newPaths.append(path); + } + } + app_libpaths = newPaths; +} +#endif + #endif //QT_NO_LIBRARY /*! diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index c6c6489a51..6f75da309d 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -126,6 +126,9 @@ public: void symbianInit(); # endif static CApaCommandLine* symbianCommandLine(); +#ifndef QT_NO_LIBRARY + static void rebuildInstallLibraryPaths(); +#endif #endif static bool isTranslatorInstalled(QTranslator *translator); diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index 281367b567..f1a04071f4 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -209,8 +209,8 @@ public: // last event id used = 132 #ifdef QT_KEYPAD_NAVIGATION - EnterEditFocus = 150, // enter edit mode in keypad navigation - LeaveEditFocus = 151, // enter edit mode in keypad navigation + EnterEditFocus = 150, // enter edit mode in keypad navigation (Defined only with QT_KEYPAD_NAVIGATION) + LeaveEditFocus = 151, // leave edit mode in keypad navigation (Defined only with QT_KEYPAD_NAVIGATION) #endif AcceptDropsChange = 152, diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 67dbadb1a5..5d6e4d7db2 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3002,7 +3002,7 @@ bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, } const void *cbdata[] = { sender, signal.mobj ? signalSignature.constData() : 0, receiver, method.mobj ? methodSignature.constData() : 0 }; - if (QInternal::activateCallbacks(QInternal::ConnectCallback, (void **) cbdata)) + if (QInternal::activateCallbacks(QInternal::DisconnectCallback, (void **) cbdata)) return true; } diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index c8831e5ae5..24b4be0e8a 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -50,8 +50,13 @@ #include "qmutex.h" #include "qplugin.h" #include "qpluginloader.h" +#include "qlibraryinfo.h" #include "private/qobject_p.h" #include "private/qcoreapplication_p.h" +#ifdef Q_OS_SYMBIAN +#include "private/qcore_symbian_p.h" +#include "private/qfilesystemwatcher_symbian_p.h" +#endif QT_BEGIN_NAMESPACE @@ -59,6 +64,23 @@ Q_GLOBAL_STATIC(QList<QFactoryLoader *>, qt_factory_loaders) Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_factoryloader_mutex, (QMutex::Recursive)) +#ifdef Q_OS_SYMBIAN +class QSymbianSystemPluginWatcher : public QSymbianFileSystemWatcherInterface +{ +public: + QSymbianSystemPluginWatcher(); + ~QSymbianSystemPluginWatcher(); + + void watchForUpdates(); + void handlePathChanged(QNotifyChangeEvent *e); + + QList<QNotifyChangeEvent*> watchers; + TDriveList drives; +}; + +Q_GLOBAL_STATIC(QSymbianSystemPluginWatcher, qt_symbian_system_plugin_watcher) +#endif + class QFactoryLoaderPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QFactoryLoader) @@ -98,102 +120,117 @@ QFactoryLoader::QFactoryLoader(const char *iid, QMutexLocker locker(qt_factoryloader_mutex()); update(); qt_factory_loaders()->append(this); +#ifdef Q_OS_SYMBIAN + // kick off Symbian plugin watcher for updates + qt_symbian_system_plugin_watcher(); +#endif } - -void QFactoryLoader::update() +void QFactoryLoader::updateDir(const QString &pluginDir, QSettings& settings) { -#ifdef QT_SHARED Q_D(QFactoryLoader); - QStringList paths = QCoreApplication::libraryPaths(); - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); - for (int i = 0; i < paths.count(); ++i) { - const QString &pluginDir = paths.at(i); - // Already loaded, skip it... - if (d->loadedPaths.contains(pluginDir)) - continue; - d->loadedPaths << pluginDir; + QString path = pluginDir + d->suffix; + if (!QDir(path).exists(QLatin1String("."))) + return; - QString path = pluginDir + d->suffix; - if (!QDir(path).exists(QLatin1String("."))) - continue; + QStringList plugins = QDir(path).entryList(QDir::Files); + QLibraryPrivate *library = 0; + for (int j = 0; j < plugins.count(); ++j) { + QString fileName = QDir::cleanPath(path + QLatin1Char('/') + plugins.at(j)); - QStringList plugins = QDir(path).entryList(QDir::Files); - QLibraryPrivate *library = 0; - for (int j = 0; j < plugins.count(); ++j) { - QString fileName = QDir::cleanPath(path + QLatin1Char('/') + plugins.at(j)); + if (qt_debug_component()) { + qDebug() << "QFactoryLoader::QFactoryLoader() looking at" << fileName; + } + library = QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath()); + if (!library->isPlugin(&settings)) { if (qt_debug_component()) { - qDebug() << "QFactoryLoader::QFactoryLoader() looking at" << fileName; + qDebug() << library->errorString; + qDebug() << " not a plugin"; } - library = QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath()); - if (!library->isPlugin(&settings)) { + library->release(); + continue; + } + QString regkey = QString::fromLatin1("Qt Factory Cache %1.%2/%3:/%4") + .arg((QT_VERSION & 0xff0000) >> 16) + .arg((QT_VERSION & 0xff00) >> 8) + .arg(QLatin1String(d->iid)) + .arg(fileName); + QStringList reg, keys; + reg = settings.value(regkey).toStringList(); + if (reg.count() && library->lastModified == reg[0]) { + keys = reg; + keys.removeFirst(); + } else { + if (!library->loadPlugin()) { if (qt_debug_component()) { qDebug() << library->errorString; - qDebug() << " not a plugin"; + qDebug() << " could not load"; } library->release(); continue; } - QString regkey = QString::fromLatin1("Qt Factory Cache %1.%2/%3:/%4") - .arg((QT_VERSION & 0xff0000) >> 16) - .arg((QT_VERSION & 0xff00) >> 8) - .arg(QLatin1String(d->iid)) - .arg(fileName); - QStringList reg, keys; - reg = settings.value(regkey).toStringList(); - if (reg.count() && library->lastModified == reg[0]) { - keys = reg; - keys.removeFirst(); - } else { - if (!library->loadPlugin()) { - if (qt_debug_component()) { - qDebug() << library->errorString; - qDebug() << " could not load"; - } - library->release(); - continue; - } - QObject *instance = library->instance(); - if (!instance) { - library->release(); - // ignore plugins that have a valid signature but cannot be loaded. - continue; - } - QFactoryInterface *factory = qobject_cast<QFactoryInterface*>(instance); - if (instance && factory && instance->qt_metacast(d->iid)) - keys = factory->keys(); - if (keys.isEmpty()) - library->unload(); - reg.clear(); - reg << library->lastModified; - reg += keys; - settings.setValue(regkey, reg); - } - if (qt_debug_component()) { - qDebug() << "keys" << keys; - } - - if (keys.isEmpty()) { + QObject *instance = library->instance(); + if (!instance) { library->release(); + // ignore plugins that have a valid signature but cannot be loaded. continue; } - d->libraryList += library; - for (int k = 0; k < keys.count(); ++k) { - // first come first serve, unless the first - // library was built with a future Qt version, - // whereas the new one has a Qt version that fits - // better - QString key = keys.at(k); - if (!d->cs) - key = key.toLower(); - QLibraryPrivate *previous = d->keyMap.value(key); - if (!previous || (previous->qt_version > QT_VERSION && library->qt_version <= QT_VERSION)) { - d->keyMap[key] = library; - d->keyList += keys.at(k); - } + QFactoryInterface *factory = qobject_cast<QFactoryInterface*>(instance); + if (instance && factory && instance->qt_metacast(d->iid)) + keys = factory->keys(); + if (keys.isEmpty()) + library->unload(); + reg.clear(); + reg << library->lastModified; + reg += keys; + settings.setValue(regkey, reg); + } + if (qt_debug_component()) { + qDebug() << "keys" << keys; + } + + if (keys.isEmpty()) { + library->release(); + continue; + } + + int keysUsed = 0; + for (int k = 0; k < keys.count(); ++k) { + // first come first serve, unless the first + // library was built with a future Qt version, + // whereas the new one has a Qt version that fits + // better + QString key = keys.at(k); + if (!d->cs) + key = key.toLower(); + QLibraryPrivate *previous = d->keyMap.value(key); + if (!previous || (previous->qt_version > QT_VERSION && library->qt_version <= QT_VERSION)) { + d->keyMap[key] = library; + d->keyList += keys.at(k); + keysUsed++; } } + if (keysUsed) + d->libraryList += library; + else + library->release(); + } +} + +void QFactoryLoader::update() +{ +#ifdef QT_SHARED + Q_D(QFactoryLoader); + QStringList paths = QCoreApplication::libraryPaths(); + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + for (int i = 0; i < paths.count(); ++i) { + const QString &pluginDir = paths.at(i); + // Already loaded, skip it... + if (d->loadedPaths.contains(pluginDir)) + continue; + d->loadedPaths << pluginDir; + updateDir(pluginDir, settings); } #else Q_D(QFactoryLoader); @@ -264,6 +301,56 @@ void QFactoryLoader::refreshAll() } } +#ifdef Q_OS_SYMBIAN +QSymbianSystemPluginWatcher::QSymbianSystemPluginWatcher() +{ + qt_s60GetRFs().DriveList(drives); + watchForUpdates(); +} + +QSymbianSystemPluginWatcher::~QSymbianSystemPluginWatcher() +{ + qDeleteAll(watchers); +} + +void QSymbianSystemPluginWatcher::watchForUpdates() +{ + QString installPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath); + if (installPathPlugins.at(1) == QChar(QLatin1Char(':'))) + return; + + installPathPlugins.prepend(QLatin1String("?:")); + installPathPlugins = QDir::toNativeSeparators(installPathPlugins); + RFs& fs = qt_s60GetRFs(); + for (int i=0; i<KMaxDrives; i++) { + int attr = drives[i]; + if ((attr & KDriveAttLocal) && !(attr & KDriveAttRom)) { + // start new watcher + TChar driveLetter; + fs.DriveToChar(i, driveLetter); + installPathPlugins[0] = driveLetter; + TPtrC ptr(qt_QString2TPtrC(installPathPlugins)); + QNotifyChangeEvent *event = q_check_ptr(new QNotifyChangeEvent(fs, ptr, this, true)); + watchers.push_back(event); + } + } +} + +void QSymbianSystemPluginWatcher::handlePathChanged(QNotifyChangeEvent *e) +{ + QCoreApplicationPrivate::rebuildInstallLibraryPaths(); + QMutexLocker locker(qt_factoryloader_mutex()); + QString dirName(QDir::cleanPath(qt_TDesC2QString(e->watchedPath))); + QList<QFactoryLoader *> *loaders = qt_factory_loaders(); + for (QList<QFactoryLoader *>::const_iterator it = loaders->constBegin(); + it != loaders->constEnd(); ++it) { + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + (*it)->updateDir(dirName, settings); + } +} + +#endif + QT_END_NAMESPACE #endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h index e90ebf66c3..8548ab2359 100644 --- a/src/corelib/plugin/qfactoryloader_p.h +++ b/src/corelib/plugin/qfactoryloader_p.h @@ -82,6 +82,7 @@ public: #endif void update(); + void updateDir(const QString &pluginDir, QSettings& settings); static void refreshAll(); }; diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index bbb64e42e7..9f9ea1a4ed 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -198,7 +198,7 @@ QPluginLoader::~QPluginLoader() */ QObject *QPluginLoader::instance() { - if (!isLoaded() && !load()) + if (!load()) return 0; if (!d->inst && d->instance) d->inst = d->instance(); diff --git a/src/corelib/statemachine/qfinalstate.cpp b/src/corelib/statemachine/qfinalstate.cpp index c583c32183..7d659848c3 100644 --- a/src/corelib/statemachine/qfinalstate.cpp +++ b/src/corelib/statemachine/qfinalstate.cpp @@ -80,7 +80,7 @@ QT_BEGIN_NAMESPACE machine.start(); \endcode - \sa QStateMachine::finished(), QState::finished() + \sa QState::finished() */ class QFinalStatePrivate : public QAbstractStatePrivate diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp index 9db7d1ae83..b296129173 100644 --- a/src/corelib/tools/qchar.cpp +++ b/src/corelib/tools/qchar.cpp @@ -1481,7 +1481,8 @@ static void decomposeHelper(QString *str, bool canonical, QChar::UnicodeVersion ucs4 = QChar::surrogateToUcs4(high, ucs4); } } - if (QChar::unicodeVersion(ucs4) > version) + QChar::UnicodeVersion v = QChar::unicodeVersion(ucs4); + if (v == QChar::Unicode_Unassigned || v > version) continue; int length; int tag; @@ -1541,7 +1542,7 @@ static ushort ligatureHelper(ushort u1, ushort u2) return 0; } -static void composeHelper(QString *str, int from) +static void composeHelper(QString *str, QChar::UnicodeVersion version, int from) { QString &s = *str; @@ -1561,7 +1562,14 @@ static void composeHelper(QString *str, int from) ++pos; } } - int combining = QChar::combiningClass(uc); + const QUnicodeTables::Properties *p = qGetProp(uc); + if (p->unicodeVersion == QChar::Unicode_Unassigned || p->unicodeVersion > version) { + starter = -1; // to prevent starter == pos - 1 + lastCombining = 0; + ++pos; + continue; + } + int combining = p->combiningClass; if (starter == pos - 1 || combining > lastCombining) { // allowed to form ligature with S QChar ligature = ligatureHelper(s.at(starter).unicode(), uc); @@ -1608,7 +1616,7 @@ static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, in ushort c2 = 0; { const QUnicodeTables::Properties *p = qGetProp(u2); - if ((QChar::UnicodeVersion)p->unicodeVersion <= version) + if (p->unicodeVersion != QChar::Unicode_Unassigned && p->unicodeVersion <= version) c2 = p->combiningClass; } if (c2 == 0) { @@ -1619,7 +1627,7 @@ static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, in ushort c1 = 0; { const QUnicodeTables::Properties *p = qGetProp(u1); - if ((QChar::UnicodeVersion)p->unicodeVersion <= version) + if (p->unicodeVersion != QChar::Unicode_Unassigned && p->unicodeVersion <= version) c1 = p->combiningClass; } diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp index 0f67652fb5..9c7c243f49 100644 --- a/src/corelib/tools/qline.cpp +++ b/src/corelib/tools/qline.cpp @@ -302,10 +302,15 @@ QDataStream &operator>>(QDataStream &stream, QLine &line) #endif // QT_NO_DATASTREAM +inline static qreal q_deg2rad(qreal x) +{ + return x * qreal(0.01745329251994329576923690768489); /* pi/180 */ +} -#ifndef M_2PI -#define M_2PI 6.28318530717958647692528676655900576 -#endif +inline static qreal q_rad2deg(qreal x) +{ + return x * qreal(57.295779513082320876798154814105); /* 180/pi */ +} /*! \class QLineF @@ -575,7 +580,7 @@ qreal QLineF::angle() const const qreal dx = pt2.x() - pt1.x(); const qreal dy = pt2.y() - pt1.y(); - const qreal theta = qAtan2(-dy, dx) * 360.0 / M_2PI; + const qreal theta = q_rad2deg(qAtan2(-dy, dx)); const qreal theta_normalized = theta < 0 ? theta + 360 : theta; @@ -599,7 +604,7 @@ qreal QLineF::angle() const */ void QLineF::setAngle(qreal angle) { - const qreal angleR = angle * M_2PI / 360.0; + const qreal angleR = q_deg2rad(angle); const qreal l = length(); const qreal dx = qCos(angleR) * l; @@ -621,7 +626,7 @@ void QLineF::setAngle(qreal angle) */ QLineF QLineF::fromPolar(qreal length, qreal angle) { - const qreal angleR = angle * M_2PI / 360.0; + const qreal angleR = q_deg2rad(angle); return QLineF(0, 0, qCos(angleR) * length, -qSin(angleR) * length); } @@ -815,8 +820,8 @@ qreal QLineF::angle(const QLineF &l) const qreal cos_line = (dx()*l.dx() + dy()*l.dy()) / (length()*l.length()); qreal rad = 0; // only accept cos_line in the range [-1,1], if it is outside, use 0 (we return 0 rather than PI for those cases) - if (cos_line >= -1.0 && cos_line <= 1.0) rad = qAcos( cos_line ); - return rad * 360 / M_2PI; + if (cos_line >= qreal(-1.0) && cos_line <= qreal(1.0)) rad = qAcos( cos_line ); + return q_rad2deg(rad); } diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index f5efe55ec7..934b6ad429 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -6367,7 +6367,7 @@ void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar:: if (mode == QString::NormalizationForm_D || mode == QString::NormalizationForm_KD) return; - composeHelper(data, from); + composeHelper(data, version, from); } diff --git a/src/declarative/debugger/debugger.pri b/src/declarative/debugger/debugger.pri index 3134c79d98..c81968ee5d 100644 --- a/src/declarative/debugger/debugger.pri +++ b/src/declarative/debugger/debugger.pri @@ -5,13 +5,14 @@ SOURCES += \ $$PWD/qpacketprotocol.cpp \ $$PWD/qdeclarativedebugservice.cpp \ $$PWD/qdeclarativedebugclient.cpp \ - $$PWD/qdeclarativedebug.cpp \ + $$PWD/qdeclarativeenginedebug.cpp \ $$PWD/qdeclarativedebugtrace.cpp \ $$PWD/qdeclarativedebughelper.cpp \ $$PWD/qdeclarativedebugserver.cpp \ $$PWD/qdeclarativeinspectorservice.cpp \ $$PWD/qjsdebuggeragent.cpp \ - $$PWD/qjsdebugservice.cpp + $$PWD/qjsdebugservice.cpp \ + $$PWD/qdeclarativeenginedebugservice.cpp HEADERS += \ $$PWD/qdeclarativedebuggerstatus_p.h \ @@ -19,7 +20,7 @@ HEADERS += \ $$PWD/qdeclarativedebugservice_p.h \ $$PWD/qdeclarativedebugservice_p_p.h \ $$PWD/qdeclarativedebugclient_p.h \ - $$PWD/qdeclarativedebug_p.h \ + $$PWD/qdeclarativeenginedebug_p.h \ $$PWD/qdeclarativedebugtrace_p.h \ $$PWD/qdeclarativedebughelper_p.h \ $$PWD/qdeclarativedebugserver_p.h \ @@ -27,4 +28,6 @@ HEADERS += \ $$PWD/qdeclarativeinspectorservice_p.h \ $$PWD/qdeclarativeinspectorinterface_p.h \ $$PWD/qjsdebuggeragent_p.h \ - $$PWD/qjsdebugservice_p.h + $$PWD/qjsdebugservice_p.h \ + $$PWD/qdeclarativedebug.h \ + $$PWD/qdeclarativeenginedebugservice_p.h diff --git a/src/declarative/debugger/qdeclarativedebug.h b/src/declarative/debugger/qdeclarativedebug.h new file mode 100644 index 0000000000..b7930b21f0 --- /dev/null +++ b/src/declarative/debugger/qdeclarativedebug.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEDEBUG_H +#define QDECLARATIVEDEBUG_H + +#include <QtCore/qglobal.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +struct Q_DECLARATIVE_EXPORT QDeclarativeDebuggingEnabler +{ + QDeclarativeDebuggingEnabler(); +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +#if defined(QT_DECLARATIVE_DEBUG) +static QDeclarativeDebuggingEnabler qmlEnableDebuggingHelper; +#endif + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QDECLARATIVEDEBUG_H diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp index 12691b2777..3e0c3265f8 100644 --- a/src/declarative/debugger/qdeclarativedebugserver.cpp +++ b/src/declarative/debugger/qdeclarativedebugserver.cpp @@ -91,6 +91,7 @@ public: QStringList clientPlugins; bool gotHello; QString waitingForMsgFromService; + bool waitingForMsgSucceeded; private: // private slot @@ -100,7 +101,8 @@ private: QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() : connection(0), - gotHello(false) + gotHello(false), + waitingForMsgSucceeded(false) { } @@ -315,7 +317,7 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message) if (d->waitingForMsgFromService == name) { // deliver directly so that it is delivered before waitForMessage is returning. d->_q_deliverMessage(name, message); - d->waitingForMsgFromService.clear(); + d->waitingForMsgSucceeded = true; } else { // deliver message in next event loop run. // Fixes the case that the service does start it's own event loop ..., @@ -409,7 +411,9 @@ bool QDeclarativeDebugServer::waitForMessage(QDeclarativeDebugService *service) do { d->connection->waitForMessage(); - } while (!d->waitingForMsgFromService.isEmpty()); + } while (!d->waitingForMsgSucceeded); + d->waitingForMsgSucceeded = false; + d->waitingForMsgFromService.clear(); return true; } diff --git a/src/declarative/debugger/qdeclarativedebug.cpp b/src/declarative/debugger/qdeclarativeenginedebug.cpp index 620ee1d66a..85ce7108dd 100644 --- a/src/declarative/debugger/qdeclarativedebug.cpp +++ b/src/declarative/debugger/qdeclarativeenginedebug.cpp @@ -39,11 +39,11 @@ ** ****************************************************************************/ -#include "private/qdeclarativedebug_p.h" +#include "private/qdeclarativeenginedebug_p.h" #include "private/qdeclarativedebugclient_p.h" -#include <qdeclarativeenginedebug_p.h> +#include <qdeclarativeenginedebugservice_p.h> #include <private/qobject_p.h> @@ -207,7 +207,7 @@ void QDeclarativeEngineDebugPrivate::remove(QDeclarativeEngineDebug *c, QDeclara void QDeclarativeEngineDebugPrivate::decode(QDataStream &ds, QDeclarativeDebugObjectReference &o, bool simple) { - QDeclarativeEngineDebugServer::QDeclarativeObjectData data; + QDeclarativeEngineDebugService::QDeclarativeObjectData data; ds >> data; o.m_debugId = data.objectId; o.m_class = data.objectType; @@ -234,7 +234,7 @@ void QDeclarativeEngineDebugPrivate::decode(QDataStream &ds, QDeclarativeDebugOb ds >> propCount; for (int ii = 0; ii < propCount; ++ii) { - QDeclarativeEngineDebugServer::QDeclarativeObjectProperty data; + QDeclarativeEngineDebugService::QDeclarativeObjectProperty data; ds >> data; QDeclarativeDebugPropertyReference prop; prop.m_objectDebugId = o.m_debugId; @@ -243,21 +243,21 @@ void QDeclarativeEngineDebugPrivate::decode(QDataStream &ds, QDeclarativeDebugOb prop.m_hasNotifySignal = data.hasNotifySignal; prop.m_valueTypeName = data.valueTypeName; switch (data.type) { - case QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::Basic: - case QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::List: - case QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::SignalProperty: + case QDeclarativeEngineDebugService::QDeclarativeObjectProperty::Basic: + case QDeclarativeEngineDebugService::QDeclarativeObjectProperty::List: + case QDeclarativeEngineDebugService::QDeclarativeObjectProperty::SignalProperty: { prop.m_value = data.value; break; } - case QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::Object: + case QDeclarativeEngineDebugService::QDeclarativeObjectProperty::Object: { QDeclarativeDebugObjectReference obj; obj.m_debugId = prop.m_value.toInt(); prop.m_value = QVariant::fromValue(obj); break; } - case QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::Unknown: + case QDeclarativeEngineDebugService::QDeclarativeObjectProperty::Unknown: break; } o.m_properties << prop; diff --git a/src/declarative/debugger/qdeclarativedebug_p.h b/src/declarative/debugger/qdeclarativeenginedebug_p.h index f822637eb4..9b70e1c6bc 100644 --- a/src/declarative/debugger/qdeclarativedebug_p.h +++ b/src/declarative/debugger/qdeclarativeenginedebug_p.h @@ -38,8 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifndef QDECLARATIVEDEBUG_H -#define QDECLARATIVEDEBUG_H +#ifndef QDECLARATIVEENGINEDEBUG_H +#define QDECLARATIVEENGINEDEBUG_H #include <QtCore/qobject.h> #include <QtCore/qurl.h> @@ -384,4 +384,4 @@ Q_DECLARE_METATYPE(QDeclarativeDebugPropertyReference) QT_END_HEADER -#endif // QDECLARATIVEDEBUG_H +#endif // QDECLARATIVEENGINEDEBUG_H diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/debugger/qdeclarativeenginedebugservice.cpp index 8707a7f33b..768373337f 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/debugger/qdeclarativeenginedebugservice.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "private/qdeclarativeenginedebug_p.h" +#include "private/qdeclarativeenginedebugservice_p.h" #include "private/qdeclarativeboundsignal_p.h" #include "qdeclarativeengine.h" @@ -59,14 +59,14 @@ QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QDeclarativeEngineDebugServer, qmlEngineDebugServer); +Q_GLOBAL_STATIC(QDeclarativeEngineDebugService, qmlEngineDebugService); -QDeclarativeEngineDebugServer *QDeclarativeEngineDebugServer::instance() +QDeclarativeEngineDebugService *QDeclarativeEngineDebugService::instance() { - return qmlEngineDebugServer(); + return qmlEngineDebugService(); } -QDeclarativeEngineDebugServer::QDeclarativeEngineDebugServer(QObject *parent) +QDeclarativeEngineDebugService::QDeclarativeEngineDebugService(QObject *parent) : QDeclarativeDebugService(QLatin1String("QDeclarativeEngine"), parent), m_watch(new QDeclarativeWatcher(this)) { @@ -75,7 +75,7 @@ QDeclarativeEngineDebugServer::QDeclarativeEngineDebugServer(QObject *parent) } QDataStream &operator<<(QDataStream &ds, - const QDeclarativeEngineDebugServer::QDeclarativeObjectData &data) + const QDeclarativeEngineDebugService::QDeclarativeObjectData &data) { ds << data.url << data.lineNumber << data.columnNumber << data.idString << data.objectName << data.objectType << data.objectId << data.contextId; @@ -83,7 +83,7 @@ QDataStream &operator<<(QDataStream &ds, } QDataStream &operator>>(QDataStream &ds, - QDeclarativeEngineDebugServer::QDeclarativeObjectData &data) + QDeclarativeEngineDebugService::QDeclarativeObjectData &data) { ds >> data.url >> data.lineNumber >> data.columnNumber >> data.idString >> data.objectName >> data.objectType >> data.objectId >> data.contextId; @@ -91,7 +91,7 @@ QDataStream &operator>>(QDataStream &ds, } QDataStream &operator<<(QDataStream &ds, - const QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &data) + const QDeclarativeEngineDebugService::QDeclarativeObjectProperty &data) { ds << (int)data.type << data.name << data.value << data.valueTypeName << data.binding << data.hasNotifySignal; @@ -99,12 +99,12 @@ QDataStream &operator<<(QDataStream &ds, } QDataStream &operator>>(QDataStream &ds, - QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &data) + QDeclarativeEngineDebugService::QDeclarativeObjectProperty &data) { int type; ds >> type >> data.name >> data.value >> data.valueTypeName >> data.binding >> data.hasNotifySignal; - data.type = (QDeclarativeEngineDebugServer::QDeclarativeObjectProperty::Type)type; + data.type = (QDeclarativeEngineDebugService::QDeclarativeObjectProperty::Type)type; return ds; } @@ -131,8 +131,8 @@ static bool hasValidSignal(QObject *object, const QString &propertyName) return true; } -QDeclarativeEngineDebugServer::QDeclarativeObjectProperty -QDeclarativeEngineDebugServer::propertyData(QObject *obj, int propIdx) +QDeclarativeEngineDebugService::QDeclarativeObjectProperty +QDeclarativeEngineDebugService::propertyData(QObject *obj, int propIdx) { QDeclarativeObjectProperty rv; @@ -164,7 +164,7 @@ QDeclarativeEngineDebugServer::propertyData(QObject *obj, int propIdx) return rv; } -QVariant QDeclarativeEngineDebugServer::valueContents(const QVariant &value) const +QVariant QDeclarativeEngineDebugService::valueContents(const QVariant &value) const { int userType = value.userType(); @@ -193,7 +193,7 @@ QVariant QDeclarativeEngineDebugServer::valueContents(const QVariant &value) con return QLatin1String("<unknown value>"); } -void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message, +void QDeclarativeEngineDebugService::buildObjectDump(QDataStream &message, QObject *object, bool recur, bool dumpProperties) { message << objectData(object); @@ -264,7 +264,7 @@ void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message, message << fakeProperties[ii]; } -void QDeclarativeEngineDebugServer::prepareDeferredObjects(QObject *obj) +void QDeclarativeEngineDebugService::prepareDeferredObjects(QObject *obj) { qmlExecuteDeferred(obj); @@ -276,7 +276,7 @@ void QDeclarativeEngineDebugServer::prepareDeferredObjects(QObject *obj) } -void QDeclarativeEngineDebugServer::buildObjectList(QDataStream &message, QDeclarativeContext *ctxt) +void QDeclarativeEngineDebugService::buildObjectList(QDataStream &message, QDeclarativeContext *ctxt) { QDeclarativeContextData *p = QDeclarativeContextData::get(ctxt); @@ -316,7 +316,7 @@ void QDeclarativeEngineDebugServer::buildObjectList(QDataStream &message, QDecla } } -void QDeclarativeEngineDebugServer::buildStatesList(QDeclarativeContext *ctxt, bool cleanList=false) +void QDeclarativeEngineDebugService::buildStatesList(QDeclarativeContext *ctxt, bool cleanList=false) { if (cleanList) m_allStates.clear(); @@ -333,7 +333,7 @@ void QDeclarativeEngineDebugServer::buildStatesList(QDeclarativeContext *ctxt, b } } -void QDeclarativeEngineDebugServer::buildStatesList(QObject *obj) +void QDeclarativeEngineDebugService::buildStatesList(QObject *obj) { if (QDeclarativeState *state = qobject_cast<QDeclarativeState *>(obj)) { m_allStates.append(state); @@ -345,8 +345,8 @@ void QDeclarativeEngineDebugServer::buildStatesList(QObject *obj) } } -QDeclarativeEngineDebugServer::QDeclarativeObjectData -QDeclarativeEngineDebugServer::objectData(QObject *object) +QDeclarativeEngineDebugService::QDeclarativeObjectData +QDeclarativeEngineDebugService::objectData(QObject *object) { QDeclarativeData *ddata = QDeclarativeData::get(object); QDeclarativeObjectData rv; @@ -385,7 +385,7 @@ QDeclarativeEngineDebugServer::objectData(QObject *object) return rv; } -void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) +void QDeclarativeEngineDebugService::messageReceived(const QByteArray &message) { QDataStream ds(message); @@ -545,7 +545,7 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) } } -void QDeclarativeEngineDebugServer::setBinding(int objectId, +void QDeclarativeEngineDebugService::setBinding(int objectId, const QString &propertyName, const QVariant &expression, bool isLiteralValue, @@ -600,7 +600,7 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, oldBinding->destroy(); binding->update(); } else { - qWarning() << "QDeclarativeEngineDebugServer::setBinding: unable to set property" << propertyName << "on object" << object; + qWarning() << "QDeclarativeEngineDebugService::setBinding: unable to set property" << propertyName << "on object" << object; } } @@ -613,13 +613,13 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, propertyChanges->changeExpression(propertyName, expression.toString()); } } else { - qWarning() << "QDeclarativeEngineDebugServer::setBinding: unable to set property" << propertyName << "on object" << object; + qWarning() << "QDeclarativeEngineDebugService::setBinding: unable to set property" << propertyName << "on object" << object; } } } } -void QDeclarativeEngineDebugServer::resetBinding(int objectId, const QString &propertyName) +void QDeclarativeEngineDebugService::resetBinding(int objectId, const QString &propertyName) { QObject *object = objectForId(objectId); QDeclarativeContext *context = qmlContext(object); @@ -664,7 +664,7 @@ void QDeclarativeEngineDebugServer::resetBinding(int objectId, const QString &pr } } -void QDeclarativeEngineDebugServer::setMethodBody(int objectId, const QString &method, const QString &body) +void QDeclarativeEngineDebugService::setMethodBody(int objectId, const QString &method, const QString &body) { QObject *object = objectForId(objectId); QDeclarativeContext *context = qmlContext(object); @@ -703,7 +703,7 @@ void QDeclarativeEngineDebugServer::setMethodBody(int objectId, const QString &m vmeMetaObject->setVmeMethod(prop->coreIndex, QDeclarativeExpressionPrivate::evalInObjectScope(contextData, object, jsfunction, contextData->url.toString(), lineNumber, 0)); } -void QDeclarativeEngineDebugServer::propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value) +void QDeclarativeEngineDebugService::propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); @@ -713,7 +713,7 @@ void QDeclarativeEngineDebugServer::propertyChanged(int id, int objectId, const sendMessage(reply); } -void QDeclarativeEngineDebugServer::addEngine(QDeclarativeEngine *engine) +void QDeclarativeEngineDebugService::addEngine(QDeclarativeEngine *engine) { Q_ASSERT(engine); Q_ASSERT(!m_engines.contains(engine)); @@ -721,7 +721,7 @@ void QDeclarativeEngineDebugServer::addEngine(QDeclarativeEngine *engine) m_engines.append(engine); } -void QDeclarativeEngineDebugServer::remEngine(QDeclarativeEngine *engine) +void QDeclarativeEngineDebugService::remEngine(QDeclarativeEngine *engine) { Q_ASSERT(engine); Q_ASSERT(m_engines.contains(engine)); @@ -729,7 +729,7 @@ void QDeclarativeEngineDebugServer::remEngine(QDeclarativeEngine *engine) m_engines.removeAll(engine); } -void QDeclarativeEngineDebugServer::objectCreated(QDeclarativeEngine *engine, QObject *object) +void QDeclarativeEngineDebugService::objectCreated(QDeclarativeEngine *engine, QObject *object) { Q_ASSERT(engine); Q_ASSERT(m_engines.contains(engine)); diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/debugger/qdeclarativeenginedebugservice_p.h index 804a043635..3674b83fe7 100644 --- a/src/declarative/qml/qdeclarativeenginedebug_p.h +++ b/src/declarative/debugger/qdeclarativeenginedebugservice_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QDECLARATIVEENGINEDEBUG_P_H -#define QDECLARATIVEENGINEDEBUG_P_H +#ifndef QDECLARATIVEENGINEDEBUGSERVICE_P_H +#define QDECLARATIVEENGINEDEBUGSERVICE_P_H // // W A R N I N G @@ -67,11 +67,11 @@ class QDeclarativeWatcher; class QDataStream; class QDeclarativeState; -class QDeclarativeEngineDebugServer : public QDeclarativeDebugService +class QDeclarativeEngineDebugService : public QDeclarativeDebugService { Q_OBJECT public: - QDeclarativeEngineDebugServer(QObject * = 0); + QDeclarativeEngineDebugService(QObject * = 0); struct QDeclarativeObjectData { QUrl url; @@ -98,7 +98,7 @@ public: void remEngine(QDeclarativeEngine *); void objectCreated(QDeclarativeEngine *, QObject *); - static QDeclarativeEngineDebugServer *instance(); + static QDeclarativeEngineDebugService *instance(); protected: virtual void messageReceived(const QByteArray &); @@ -123,12 +123,12 @@ private: QDeclarativeWatcher *m_watch; QList<QWeakPointer<QDeclarativeState> > m_allStates; }; -Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectData &); -Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectData &); -Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &); -Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &); +Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugService::QDeclarativeObjectData &); +Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugService::QDeclarativeObjectData &); +Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugService::QDeclarativeObjectProperty &); +Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugService::QDeclarativeObjectProperty &); QT_END_NAMESPACE -#endif // QDECLARATIVEENGINEDEBUG_P_H +#endif // QDECLARATIVEENGINEDEBUGSERVICE_P_H diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp index 70fc702bee..4dcf17cfbc 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp @@ -228,9 +228,9 @@ void QDeclarativeFlipablePrivate::updateSceneTransformFromParent() if (current == QDeclarativeFlipable::Back && back) setBackTransform(); if (front) - front->setOpacity((current==QDeclarativeFlipable::Front)?1.:0.); + front->setOpacity((current==QDeclarativeFlipable::Front)?qreal(1.):qreal(0.)); if (back) - back->setOpacity((current==QDeclarativeFlipable::Back)?1.:0.); + back->setOpacity((current==QDeclarativeFlipable::Back)?qreal(1.):qreal(0.)); emit q->sideChanged(); } } diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 023737d0d0..a7d593a6b2 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1212,10 +1212,10 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m } qreal accel = deceleration; qreal v2 = v * v; - qreal overshootDist = 0.0; - if ((maxDistance > 0.0 && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarativeGridView::SnapOneRow) { + qreal overshootDist = qreal(0.0); + if ((maxDistance > qreal(0.0) && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarativeGridView::SnapOneRow) { // + rowSize()/4 to encourage moving at least one item in the flick direction - qreal dist = v2 / (accel * 2.0) + rowSize()/4; + qreal dist = v2 / (accel * qreal(2.0)) + rowSize()/4; dist = qMin(dist, maxDistance); if (v > 0) dist = -dist; diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6a91e5fe9d..44d6a1a7f4 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1457,14 +1457,14 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m // the initial flick - estimate boundary qreal accel = deceleration; qreal v2 = v * v; - overshootDist = 0.0; + overshootDist = qreal(0.0); // + averageSize/4 to encourage moving at least one item in the flick direction - qreal dist = v2 / (accel * 2.0) + averageSize/4; + qreal dist = v2 / (accel * qreal(2.0)) + averageSize/4; if (maxDistance > 0) dist = qMin(dist, maxDistance); if (v > 0) dist = -dist; - if ((maxDistance > 0.0 && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarativeListView::SnapOneItem) { + if ((maxDistance > qreal(0.0) && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarativeListView::SnapOneItem) { if (snapMode != QDeclarativeListView::SnapOneItem) { qreal distTemp = isRightToLeft() ? -dist : dist; data.flickTarget = -snapPosAt(-(dataValue - highlightStart) + distTemp) + highlightStart; diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 94f128dca8..ecd8982a96 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -246,7 +246,7 @@ void QDeclarativePathViewPrivate::updateHighlight() } else { qreal target = currentIndex; - offsetAdj = 0.0; + offsetAdj = qreal(0.0); tl.reset(moveHighlight); moveHighlight.setValue(highlightPosition); @@ -255,14 +255,14 @@ void QDeclarativePathViewPrivate::updateHighlight() if (target - highlightPosition > modelCount/2) { highlightUp = false; qreal distance = modelCount - target + highlightPosition; - tl.move(moveHighlight, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * highlightPosition / distance)); - tl.set(moveHighlight, modelCount-0.01); + tl.move(moveHighlight, qreal(0.0), QEasingCurve(QEasingCurve::InQuad), int(duration * highlightPosition / distance)); + tl.set(moveHighlight, modelCount-qreal(0.01)); tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * (modelCount-target) / distance)); } else if (target - highlightPosition <= -modelCount/2) { highlightUp = true; qreal distance = modelCount - highlightPosition + target; - tl.move(moveHighlight, modelCount-0.01, QEasingCurve(QEasingCurve::InQuad), int(duration * (modelCount-highlightPosition) / distance)); - tl.set(moveHighlight, 0.0); + tl.move(moveHighlight, modelCount-qreal(0.01), QEasingCurve(QEasingCurve::InQuad), int(duration * (modelCount-highlightPosition) / distance)); + tl.set(moveHighlight, qreal(0.0)); tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * target / distance)); } else { highlightUp = highlightPosition - target < 0; @@ -287,18 +287,18 @@ void QDeclarativePathViewPrivate::setHighlightPosition(qreal pos) qreal relativeHighlight = qmlMod(pos + offset, range) / range; if (!highlightUp && relativeHighlight > end * mappedRange) { - qreal diff = 1.0 - relativeHighlight; + qreal diff = qreal(1.0) - relativeHighlight; setOffset(offset + diff * range); } else if (highlightUp && relativeHighlight >= (end - start) * mappedRange) { qreal diff = relativeHighlight - (end - start) * mappedRange; - setOffset(offset - diff * range - 0.00001); + setOffset(offset - diff * range - qreal(0.00001)); } highlightPosition = pos; qreal pathPos = positionOfIndex(pos); updateItem(highlightItem, pathPos); if (QDeclarativePathViewAttached *att = attached(highlightItem)) - att->setOnPath(pathPos != -1.0); + att->setOnPath(pathPos != qreal(-1.0)); } } @@ -1200,7 +1200,7 @@ void QDeclarativePathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEve qreal elapsed = qreal(lastElapsed + QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.; qreal velocity = elapsed > 0. ? lastDist / elapsed : 0; - if (model && modelCount && qAbs(velocity) > 1.) { + if (model && modelCount && qAbs(velocity) > qreal(1.)) { qreal count = pathItems == -1 ? modelCount : pathItems; if (qAbs(velocity) > count * 2) // limit velocity velocity = (velocity > 0 ? count : -count) * 2; @@ -1208,7 +1208,7 @@ void QDeclarativePathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEve qreal v2 = velocity*velocity; qreal accel = deceleration/10; // + 0.25 to encourage moving at least one item in the flick direction - qreal dist = qMin(qreal(modelCount-1), qreal(v2 / (accel * 2.0) + 0.25)); + qreal dist = qMin(qreal(modelCount-1), qreal(v2 / (accel * qreal(2.0)) + qreal(0.25))); if (haveHighlightRange && highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) { // round to nearest item. if (velocity > 0.) @@ -1217,13 +1217,13 @@ void QDeclarativePathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEve dist = qRound(dist - offset) + offset; // Calculate accel required to stop on item boundary if (dist <= 0.) { - dist = 0.; - accel = 0.; + dist = qreal(0.); + accel = qreal(0.); } else { accel = v2 / (2.0f * qAbs(dist)); } } - offsetAdj = 0.0; + offsetAdj = qreal(0.0); moveOffset.setValue(offset); tl.accel(moveOffset, velocity, accel, dist); tl.callback(QDeclarativeTimeLineCallback(&moveOffset, fixOffsetCallback, this)); @@ -1588,7 +1588,7 @@ void QDeclarativePathView::createdItem(int index, QDeclarativeItem *item) att->setOnPath(false); } item->setParentItem(this); - d->updateItem(item, index < d->firstIndex ? 0.0 : 1.0); + d->updateItem(item, index < d->firstIndex ? qreal(0.0) : qreal(1.0)); } } diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index 5e8d0f45d2..399c20709b 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -405,17 +405,6 @@ QObject *qmlAttachedPropertiesObject(const QObject *obj, bool create = true) return qmlAttachedPropertiesObject(&idx, obj, &T::staticMetaObject, create); } -// Enable debugging before any QDeclarativeEngine is created -struct Q_DECLARATIVE_EXPORT QDeclarativeDebuggingEnabler -{ - QDeclarativeDebuggingEnabler(); -}; - -// Execute code in constructor before first QDeclarativeEngine is instantiated -#if defined(QT_DECLARATIVE_DEBUG) -static QDeclarativeDebuggingEnabler qmlEnableDebuggingHelper; -#endif - QT_END_NAMESPACE QML_DECLARE_TYPE(QObject) diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index d9f291ba64..f423f500de 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -53,7 +53,7 @@ #include "private/qdeclarativeglobal_p.h" #include "private/qdeclarativescriptparser_p.h" #include "private/qdeclarativedebugtrace_p.h" -#include "private/qdeclarativeenginedebug_p.h" +#include "private/qdeclarativeenginedebugservice_p.h" #include <QtScript/qscriptvalueiterator.h> #include <QStack> @@ -896,7 +896,7 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *parentCon if (enginePriv->isDebugging && rv) { if (!parentContext->isInternal) parentContext->asQDeclarativeContextPrivate()->instances.append(rv); - QDeclarativeEngineDebugServer::instance()->objectCreated(parentContext->engine, rv); + QDeclarativeEngineDebugService::instance()->objectCreated(parentContext->engine, rv); } return rv; diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 34014f7166..1417b784eb 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -51,7 +51,7 @@ #include "qdeclarativecomponent.h" #include "private/qdeclarativebinding_p_p.h" #include "private/qdeclarativevme_p.h" -#include "private/qdeclarativeenginedebug_p.h" +#include "private/qdeclarativeenginedebugservice_p.h" #include "private/qdeclarativestringconverters_p.h" #include "private/qdeclarativexmlhttprequest_p.h" #include "private/qdeclarativesqldatabase_p.h" @@ -581,9 +581,9 @@ void QDeclarativeEnginePrivate::init() scriptEngine.globalObject().property(QLatin1String("Qt")).setProperty(QLatin1String("application"), applicationObject); if (QCoreApplication::instance()->thread() == q->thread() && - QDeclarativeEngineDebugServer::isDebuggingEnabled()) { + QDeclarativeEngineDebugService::isDebuggingEnabled()) { isDebugging = true; - QDeclarativeEngineDebugServer::instance()->addEngine(q); + QDeclarativeEngineDebugService::instance()->addEngine(q); QJSDebugService::instance()->addEngine(q); } } @@ -648,7 +648,7 @@ QDeclarativeEngine::~QDeclarativeEngine() { Q_D(QDeclarativeEngine); if (d->isDebugging) { - QDeclarativeEngineDebugServer::instance()->remEngine(this); + QDeclarativeEngineDebugService::instance()->remEngine(this); QJSDebugService::instance()->removeEngine(this); } } diff --git a/src/declarative/qml/qdeclarativeengine.h b/src/declarative/qml/qdeclarativeengine.h index 61ab2b2c63..4d6887f499 100644 --- a/src/declarative/qml/qdeclarativeengine.h +++ b/src/declarative/qml/qdeclarativeengine.h @@ -47,6 +47,7 @@ #include <QtCore/qmap.h> #include <QtScript/qscriptvalue.h> #include <QtDeclarative/qdeclarativeerror.h> +#include <QtDeclarative/qdeclarativedebug.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index bf261ef242..c2f00865ef 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -46,6 +46,7 @@ #include <QtCore/qfileinfo.h> #include <QtCore/qpluginloader.h> #include <QtCore/qlibraryinfo.h> +#include <QtCore/qalgorithms.h> #include <QtDeclarative/qdeclarativeextensioninterface.h> #include <private/qdeclarativeglobal_p.h> #include <private/qdeclarativetypenamecache_p.h> @@ -734,8 +735,12 @@ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) } RFs& fs = qt_s60GetRFs(); TPtrC tempPathPtr(reinterpret_cast<const TText*> (tempPath.constData())); + // Symbian searches should start from Y:. Fix start drive otherwise TFindFile starts from the session drive + _LIT(KStartDir, "Y:"); + TFileName dirPath(KStartDir); + dirPath.Append(tempPathPtr); TFindFile finder(fs); - TInt err = finder.FindByDir(tempPathPtr, tempPathPtr); + TInt err = finder.FindByDir(tempPathPtr, dirPath); while (err == KErrNone) { QString foundDir(reinterpret_cast<const QChar *>(finder.File().Ptr()), finder.File().Length()); @@ -743,6 +748,9 @@ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) addImportPath(foundDir); err = finder.Find(); } + // TFindFile found the directories in the order we want, but addImportPath reverses it. + // Reverse the order again to get it right. + QAlgorithmsPrivate::qReverse(fileImportPath.begin(), fileImportPath.end()); } else { addImportPath(installImportsPath); } diff --git a/src/declarative/qml/qdeclarativenotifier_p.h b/src/declarative/qml/qdeclarativenotifier_p.h index 5f70f7d138..14a7f82c14 100644 --- a/src/declarative/qml/qdeclarativenotifier_p.h +++ b/src/declarative/qml/qdeclarativenotifier_p.h @@ -99,8 +99,15 @@ private: enum { InvalidType, SignalType, NotifierType } type; union { - char signalData[sizeof(Signal)]; - char notifierData[sizeof(Notifier)]; + struct { + Signal *signal; + union { + char signalData[sizeof(Signal)]; + qint64 q_for_alignment_1; + double q_for_alignment_2; + }; + } signal; + Notifier notifier; }; inline Notifier *toNotifier(); @@ -194,7 +201,7 @@ void QDeclarativeNotifierEndpoint::connect(QDeclarativeNotifier *notifier) void QDeclarativeNotifierEndpoint::disconnect() { if (type == SignalType) { - Signal *s = (Signal *)&signalData; + Signal *s = asSignal(); if (s->source) { QMetaObject::disconnectOne(s->source, s->sourceSignal, target, targetMethod); s->source = 0; @@ -223,18 +230,19 @@ QDeclarativeNotifierEndpoint::Notifier *QDeclarativeNotifierEndpoint::toNotifier s->~Signal(); } + type = NotifierType; Notifier *n = asNotifier(); n->next = 0; n->prev = 0; n->disconnected = 0; n->notifier = 0; - type = NotifierType; return n; } QDeclarativeNotifierEndpoint::Notifier *QDeclarativeNotifierEndpoint::asNotifier() { - return (Notifier *)(¬ifierData); + Q_ASSERT(type == NotifierType); + return ¬ifier; } QDeclarativeNotifierEndpoint::Signal *QDeclarativeNotifierEndpoint::toSignal() @@ -243,16 +251,15 @@ QDeclarativeNotifierEndpoint::Signal *QDeclarativeNotifierEndpoint::toSignal() return asSignal(); disconnect(); - Signal *s = asSignal(); - new (s) Signal; + signal.signal = new (&signal.signalData) Signal; type = SignalType; - - return s; + return signal.signal; } QDeclarativeNotifierEndpoint::Signal *QDeclarativeNotifierEndpoint::asSignal() { - return (Signal *)(&signalData); + Q_ASSERT(type == SignalType); + return signal.signal; } QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h index 581f5197f4..c648d25cb7 100644 --- a/src/declarative/qml/qdeclarativepropertycache_p.h +++ b/src/declarative/qml/qdeclarativepropertycache_p.h @@ -111,7 +111,7 @@ public: int relatedIndex; // When IsFunction }; uint overrideIndexIsProperty : 1; - int overrideIndex : 31; + signed int overrideIndex : 31; int revision; int metaObjectOffset; diff --git a/src/declarative/qml/qdeclarativesqldatabase.cpp b/src/declarative/qml/qdeclarativesqldatabase.cpp index 588b6bf306..513cae2da1 100644 --- a/src/declarative/qml/qdeclarativesqldatabase.cpp +++ b/src/declarative/qml/qdeclarativesqldatabase.cpp @@ -175,7 +175,7 @@ static const char* sqlerror[] = { static QString qmlsqldatabase_databasesPath(QScriptEngine *engine) { QDeclarativeScriptEngine *qmlengine = static_cast<QDeclarativeScriptEngine*>(engine); - return qmlengine->offlineStoragePath + return QDir::toNativeSeparators(qmlengine->offlineStoragePath) + QDir::separator() + QLatin1String("Databases"); } diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index bf9e54a986..5d171bfe41 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -27,7 +27,6 @@ SOURCES += \ $$PWD/qdeclarativeinfo.cpp \ $$PWD/qdeclarativeerror.cpp \ $$PWD/qdeclarativescriptparser.cpp \ - $$PWD/qdeclarativeenginedebug.cpp \ $$PWD/qdeclarativerewrite.cpp \ $$PWD/qdeclarativevaluetype.cpp \ $$PWD/qdeclarativecompiledbindings.cpp \ @@ -99,7 +98,6 @@ HEADERS += \ $$PWD/qdeclarativedata_p.h \ $$PWD/qdeclarativeerror.h \ $$PWD/qdeclarativescriptparser_p.h \ - $$PWD/qdeclarativeenginedebug_p.h \ $$PWD/qdeclarativerewrite_p.h \ $$PWD/qpodvector_p.h \ $$PWD/qbitfield_p.h \ diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index ce21bcd30e..455c4f6906 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -2719,7 +2719,7 @@ void QDeclarativeParentAnimation::transition(QDeclarativeStateActions &actions, } if (scale != 0) - rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/M_PI; + rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/qreal(M_PI); else { qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under scale of 0"); ok = false; diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index b77db89043..e905d0ad84 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -51,7 +51,7 @@ #include <QtCore/qdebug.h> -#include <math.h> +#include <QtCore/qmath.h> #define DELAY_STOP_TIMER_INTERVAL 32 @@ -98,20 +98,20 @@ bool QSmoothedAnimation::recalc() s = to - initialValue; vi = initialVelocity; - s = (invert? -1.0: 1.0) * s; + s = (invert? qreal(-1.0): qreal(1.0)) * s; if (userDuration > 0 && velocity > 0) { tf = s / velocity; - if (tf > (userDuration / 1000.)) tf = (userDuration / 1000.); + if (tf > (userDuration / qreal(1000.))) tf = (userDuration / qreal(1000.)); } else if (userDuration > 0) { - tf = userDuration / 1000.; + tf = userDuration / qreal(1000.); } else if (velocity > 0) { tf = s / velocity; } else { return false; } - finalDuration = ceil(tf * 1000.0); + finalDuration = ceil(tf * qreal(1000.0)); if (maximumEasingTime == 0) { a = 0; @@ -121,33 +121,33 @@ bool QSmoothedAnimation::recalc() vp = velocity; sp = 0; sd = s; - } else if (maximumEasingTime != -1 && tf > (maximumEasingTime / 1000.)) { - qreal met = maximumEasingTime / 1000.; + } else if (maximumEasingTime != -1 && tf > (maximumEasingTime / qreal(1000.))) { + qreal met = maximumEasingTime / qreal(1000.); td = tf - met; qreal c1 = td; qreal c2 = (tf - td) * vi - tf * velocity; - qreal c3 = -0.5 * (tf - td) * vi * vi; + qreal c3 = qreal(-0.5) * (tf - td) * vi * vi; - qreal vp1 = (-c2 + sqrt(c2 * c2 - 4 * c1 * c3)) / (2. * c1); + qreal vp1 = (-c2 + qSqrt(c2 * c2 - 4 * c1 * c3)) / (qreal(2.) * c1); vp = vp1; a = vp / met; d = a; tp = (vp - vi) / a; - sp = vi * tp + 0.5 * a * tp * tp; + sp = vi * tp + qreal(0.5) * a * tp * tp; sd = sp + (td - tp) * vp; } else { - qreal c1 = 0.25 * tf * tf; - qreal c2 = 0.5 * vi * tf - s; - qreal c3 = -0.25 * vi * vi; + qreal c1 = qreal(0.25) * tf * tf; + qreal c2 = qreal(0.5) * vi * tf - s; + qreal c3 = qreal(-0.25) * vi * vi; - qreal a1 = (-c2 + sqrt(c2 * c2 - 4 * c1 * c3)) / (2. * c1); + qreal a1 = (-c2 + qSqrt(c2 * c2 - 4 * c1 * c3)) / (qreal(2.) * c1); - qreal tp1 = 0.5 * tf - 0.5 * vi / a1; + qreal tp1 = qreal(0.5) * tf - qreal(0.5) * vi / a1; qreal vp1 = a1 * tp1 + vi; - qreal sp1 = 0.5 * a1 * tp1 * tp1 + vi * tp1; + qreal sp1 = qreal(0.5) * a1 * tp1 * tp1 + vi * tp1; a = a1; d = a1; @@ -165,7 +165,7 @@ qreal QSmoothedAnimation::easeFollow(qreal time_seconds) qreal value; if (time_seconds < tp) { trackVelocity = vi + time_seconds * a; - value = 0.5 * a * time_seconds * time_seconds + vi * time_seconds; + value = qreal(0.5) * a * time_seconds * time_seconds + vi * time_seconds; } else if (time_seconds < td) { time_seconds -= tp; trackVelocity = vp; @@ -173,7 +173,7 @@ qreal QSmoothedAnimation::easeFollow(qreal time_seconds) } else if (time_seconds < tf) { time_seconds -= td; trackVelocity = vp - time_seconds * a; - value = sd - 0.5 * d * time_seconds * time_seconds + vp * time_seconds; + value = sd - qreal(0.5) * d * time_seconds * time_seconds + vp * time_seconds; } else { trackVelocity = 0; value = s; @@ -186,10 +186,10 @@ qreal QSmoothedAnimation::easeFollow(qreal time_seconds) void QSmoothedAnimation::updateCurrentTime(int t) { - qreal time_seconds = qreal(t - lastTime) / 1000.; + qreal time_seconds = qreal(t - lastTime) / qreal(1000.); qreal value = easeFollow(time_seconds); - value *= (invert? -1.0: 1.0); + value *= (invert? qreal(-1.0): qreal(1.0)); QDeclarativePropertyPrivate::write(target, initialValue + value, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); @@ -213,7 +213,7 @@ void QSmoothedAnimation::init() return; } - bool hasReversed = trackVelocity != 0. && + bool hasReversed = trackVelocity != qreal(0.) && ((!invert) == ((initialValue - to) > 0)); if (hasReversed) { diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 2c6058caf6..0b453eed3f 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -161,17 +161,17 @@ bool QDeclarativeSpringAnimationPrivate::animate(const QDeclarativeProperty &pro animation.velocity = animation.velocity + (spring * diff - damping * animation.velocity) / mass; else animation.velocity = animation.velocity + spring * diff - damping * animation.velocity; - if (maxVelocity > 0.) { + if (maxVelocity > qreal(0.)) { // limit velocity if (animation.velocity > maxVelocity) animation.velocity = maxVelocity; else if (animation.velocity < -maxVelocity) animation.velocity = -maxVelocity; } - animation.currentValue += animation.velocity * 16.0 / 1000.0; + animation.currentValue += animation.velocity * qreal(16.0) / qreal(1000.0); if (haveModulus) { animation.currentValue = fmod(animation.currentValue, modulus); - if (animation.currentValue < 0.0) + if (animation.currentValue < qreal(0.0)) animation.currentValue += modulus; } } @@ -195,7 +195,7 @@ bool QDeclarativeSpringAnimationPrivate::animate(const QDeclarativeProperty &pro animation.currentValue = fmod(animation.currentValue, modulus); } else { animation.currentValue -= moveBy; - if (haveModulus && animation.currentValue < 0.0) + if (haveModulus && animation.currentValue < qreal(0.0)) animation.currentValue = fmod(animation.currentValue, modulus) + modulus; } if (lastTime - animation.start >= animation.duration) { diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index c260684eef..8f613b0212 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -123,7 +123,7 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q } if (scale != 0) - rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/M_PI; + rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/qreal(M_PI); else { qmlInfo(q) << QDeclarativeParentChange::tr("Unable to preserve appearance under scale of 0"); ok = false; diff --git a/src/declarative/util/qdeclarativeview.h b/src/declarative/util/qdeclarativeview.h index b3854fc94c..ef51934eec 100644 --- a/src/declarative/util/qdeclarativeview.h +++ b/src/declarative/util/qdeclarativeview.h @@ -47,6 +47,7 @@ #include <QtGui/qgraphicssceneevent.h> #include <QtGui/qgraphicsview.h> #include <QtGui/qwidget.h> +#include <QtDeclarative/qdeclarativedebug.h> QT_BEGIN_HEADER diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 658dcad0f0..980568e683 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -530,7 +530,7 @@ public: void notifyQueryStarted(bool remoteSource) { Q_Q(QDeclarativeXmlListModel); - progress = remoteSource ? 0.0 : 1.0; + progress = remoteSource ? qreal(0.0) : qreal(1.0); status = QDeclarativeXmlListModel::Loading; errorString.clear(); emit q->progressChanged(progress); diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index 2fb6c67e50..d2211af777 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -909,6 +909,10 @@ bool QDialog::symbianAdjustedPosition() AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect); } else { AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, statusPaneRect); + // In some native layouts, StaCon is not used. Try to fetch the status pane + // height from StatusPane component. + if (statusPaneRect.IsEmpty()) + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect); } p.setX(0); diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index de8e33d897..6691ff1472 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -670,7 +670,7 @@ QStringList qt_win_get_open_file_names(const QFileDialogArgs &args, // GetOpenFileName() will return only one folder name for all the files. To retrieve // the correct path for all selected files, we have to use Common Item Dialog interfaces. #ifndef Q_WS_WINCE - if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) return qt_win_CID_get_open_file_names(args, initialDirectory, filterLst, selectedFilter, idx); #endif @@ -757,7 +757,7 @@ static int __stdcall winGetExistDirCallbackProc(HWND hwnd, QString qt_win_get_existing_directory(const QFileDialogArgs &args) { #ifndef Q_WS_WINCE - if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) return qt_win_CID_get_existing_directory(args); #endif diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index 66e7216b38..149e267999 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -548,8 +548,8 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 6 This is the approach recommended in the - \l{http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGWindows/chapter_18_section_7.html} - {Mac OS X Guidlines}. Similar guidlines apply for the other + \l{http://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AppleHIGuidelines/Windows/Windows.html#//apple_ref/doc/uid/20000961-BABCAJID} + {Mac OS X Guidelines}. Similar guidelines apply for the other platforms, but note the different ways the \l{QMessageBox::informativeText} {informative text} is handled for different platforms. diff --git a/src/gui/dialogs/qwizard.cpp b/src/gui/dialogs/qwizard.cpp index 83bdaa0e55..9f8d5266c9 100644 --- a/src/gui/dialogs/qwizard.cpp +++ b/src/gui/dialogs/qwizard.cpp @@ -572,8 +572,7 @@ public: #endif } #if !defined(QT_NO_STYLE_WINDOWSVISTA) - if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) vistaInitPending = true; #endif } diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp index 2a37d45089..6fe1c8c446 100644 --- a/src/gui/egl/qegl.cpp +++ b/src/gui/egl/qegl.cpp @@ -684,6 +684,37 @@ EGLSurface QEgl::createSurface(QPaintDevice *device, EGLConfig cfg, const QEglPr else props = 0; EGLSurface surf; +#ifdef Q_OS_SYMBIAN + // On Symbian there might be situations (especially on 32MB GPU devices) + // where Qt is trying to create EGL surface while some other application + // is still holding all available GPU memory but is about to release it + // soon. For an example when exiting native video recorder and going back to + // Qt application behind it. Video stack tear down takes some time and Qt + // app might be too quick in reserving its EGL surface and thus running out + // of GPU memory right away. So if EGL surface creation fails due to bad + // alloc, let's try recreating it four times within ~1 second if needed. + // This strategy gives some time for video recorder to tear down its stack + // and a chance to Qt for creating a valid surface. + int tries = 4; + while(tries--) { + if (devType == QInternal::Widget) + surf = eglCreateWindowSurface(QEgl::display(), cfg, windowDrawable, props); + else + surf = eglCreatePixmapSurface(QEgl::display(), cfg, pixmapDrawable, props); + if (surf == EGL_NO_SURFACE) { + EGLint error = eglGetError(); + if (error == EGL_BAD_ALLOC) { + if (tries) { + User::After(1000 * 250); // 250ms + continue; + } + } + qWarning("QEglContext::createSurface(): Unable to create EGL surface, error = 0x%x", error); + } else { + break; + } + } +#else if (devType == QInternal::Widget) surf = eglCreateWindowSurface(QEgl::display(), cfg, windowDrawable, props); else @@ -691,6 +722,7 @@ EGLSurface QEgl::createSurface(QPaintDevice *device, EGLConfig cfg, const QEglPr if (surf == EGL_NO_SURFACE) { qWarning("QEglContext::createSurface(): Unable to create EGL surface, error = 0x%x", eglGetError()); } +#endif return surf; } #endif diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9092593918..cb7349ca97 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -8868,7 +8868,7 @@ QPainterPath QGraphicsEllipseItem::shape() const return path; if (d->spanAngle != 360 * 16) { path.moveTo(d->rect.center()); - path.arcTo(d->rect, d->startAngle / 16.0, d->spanAngle / 16.0); + path.arcTo(d->rect, d->startAngle / qreal(16.0), d->spanAngle / qreal(16.0)); } else { path.addEllipse(d->rect); } diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 867880c621..d652f25e49 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4304,7 +4304,7 @@ static void _q_paintItem(QGraphicsItem *item, QPainter *painter, QGraphicsWidget *widgetItem = static_cast<QGraphicsWidget *>(item); QGraphicsProxyWidget *proxy = qobject_cast<QGraphicsProxyWidget *>(widgetItem); const qreal windowOpacity = (proxy && proxy->widget() && useWindowOpacity) - ? proxy->widget()->windowOpacity() : 1.0; + ? proxy->widget()->windowOpacity() : qreal(1.0); const qreal oldPainterOpacity = painter->opacity(); if (qFuzzyIsNull(windowOpacity)) diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 548f79fa17..d2e21fba89 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -298,7 +298,7 @@ inline int q_round_bound(qreal d) //### (int)(qreal) INT_MAX != INT_MAX for sing return INT_MIN; else if (d >= (qreal) INT_MAX) return INT_MAX; - return d >= 0.0 ? int(d + 0.5) : int(d - int(d-1) + 0.5) + int(d-1); + return d >= 0.0 ? int(d + qreal(0.5)) : int(d - int(d-1) + qreal(0.5)) + int(d-1); } void QGraphicsViewPrivate::translateTouchEvent(QGraphicsViewPrivate *d, QTouchEvent *touchEvent) @@ -1830,14 +1830,14 @@ void QGraphicsView::centerOn(const QPointF &pos) qint64 horizontal = 0; horizontal += horizontalScrollBar()->minimum(); horizontal += horizontalScrollBar()->maximum(); - horizontal -= int(viewPoint.x() - width / 2.0); + horizontal -= int(viewPoint.x() - width / qreal(2.0)); horizontalScrollBar()->setValue(horizontal); } else { - horizontalScrollBar()->setValue(int(viewPoint.x() - width / 2.0)); + horizontalScrollBar()->setValue(int(viewPoint.x() - width / qreal(2.0))); } } if (!d->topIndent) - verticalScrollBar()->setValue(int(viewPoint.y() - height / 2.0)); + verticalScrollBar()->setValue(int(viewPoint.y() - height / qreal(2.0))); d->lastCenterPoint = oldCenterPoint; } @@ -1886,22 +1886,22 @@ void QGraphicsView::ensureVisible(const QRectF &rect, int xmargin, int ymargin) if (viewRect.left() <= left + xmargin) { // need to scroll from the left if (!d->leftIndent) - horizontalScrollBar()->setValue(int(viewRect.left() - xmargin - 0.5)); + horizontalScrollBar()->setValue(int(viewRect.left() - xmargin - qreal(0.5))); } if (viewRect.right() >= right - xmargin) { // need to scroll from the right if (!d->leftIndent) - horizontalScrollBar()->setValue(int(viewRect.right() - width + xmargin + 0.5)); + horizontalScrollBar()->setValue(int(viewRect.right() - width + xmargin + qreal(0.5))); } if (viewRect.top() <= top + ymargin) { // need to scroll from the top if (!d->topIndent) - verticalScrollBar()->setValue(int(viewRect.top() - ymargin - 0.5)); + verticalScrollBar()->setValue(int(viewRect.top() - ymargin - qreal(0.5))); } if (viewRect.bottom() >= bottom - ymargin) { // need to scroll from the bottom if (!d->topIndent) - verticalScrollBar()->setValue(int(viewRect.bottom() - height + ymargin + 0.5)); + verticalScrollBar()->setValue(int(viewRect.bottom() - height + ymargin + qreal(0.5))); } } diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index ca6713bf24..ec79a2fd30 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -482,8 +482,8 @@ static QSizeF closestAcceptableSize(const QSizeF &proposed, minw = maxw; minh = maxh; } - middlew = minw + (maxw - minw)/2.0; - middleh = minh + (maxh - minh)/2.0; + middlew = minw + (maxw - minw)/qreal(2.0); + middleh = minh + (maxh - minh)/qreal(2.0); min_hfw = minimumHeightForWidth(middlew, minh, maxh, widget); diff --git a/src/gui/graphicsview/qgridlayoutengine.cpp b/src/gui/graphicsview/qgridlayoutengine.cpp index 66b4a5b6b4..5c614357d8 100644 --- a/src/gui/graphicsview/qgridlayoutengine.cpp +++ b/src/gui/graphicsview/qgridlayoutengine.cpp @@ -84,7 +84,7 @@ static qreal fixedDescent(qreal descent, qreal ascent, qreal targetSize) Q_ASSERT(targetSize >= ascent + descent); qreal extra = targetSize - (ascent + descent); - return descent + (extra / 2.0); + return descent + (extra / qreal(2.0)); } static qreal compare(const QGridLayoutBox &box1, const QGridLayoutBox &box2, int which) @@ -292,9 +292,9 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz int stretch = stretches[start + i]; if (sumStretches == 0) { if (hasIgnoreFlag) { - factors[i] = (stretch < 0) ? 1.0 : 0.0; + factors[i] = (stretch < 0) ? qreal(1.0) : qreal(0.0); } else { - factors[i] = (stretch < 0) ? sizes[i] : 0.0; + factors[i] = (stretch < 0) ? sizes[i] : qreal(0.0); } } else if (stretch == sumStretches) { factors[i] = 1.0; @@ -373,7 +373,7 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz for (int i = 0; i < n; ++i) { if (newSizes[i] < 0.0) { - qreal delta = (sumFactors == 0.0) ? 0.0 + qreal delta = (sumFactors == 0.0) ? qreal(0.0) : sumCurrentAvailable * factors[i] / sumFactors; newSizes[i] = sizes[i] + delta; } diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp index eb8bcb8c1f..1b45d9d9f5 100644 --- a/src/gui/graphicsview/qsimplex_p.cpp +++ b/src/gui/graphicsview/qsimplex_p.cpp @@ -486,7 +486,7 @@ bool QSimplex::iterate() // Normalize Pivot Row qreal pivot = valueAt(pivotRow, pivotColumn); if (pivot != 1.0) - combineRows(pivotRow, pivotRow, (1.0 - pivot) / pivot); + combineRows(pivotRow, pivotRow, (qreal(1.0) - pivot) / pivot); // Update other rows for (int row=0; row < rows; ++row) { diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index a3378de443..f527bcf5cb 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -5908,12 +5908,12 @@ bool qt_xForm_helper(const QTransform &trueMat, int xoffset, int type, int depth uchar *dptr, int dbpl, int p_inc, int dHeight, const uchar *sptr, int sbpl, int sWidth, int sHeight) { - int m11 = int(trueMat.m11()*4096.0); - int m12 = int(trueMat.m12()*4096.0); - int m21 = int(trueMat.m21()*4096.0); - int m22 = int(trueMat.m22()*4096.0); - int dx = qRound(trueMat.dx()*4096.0); - int dy = qRound(trueMat.dy()*4096.0); + int m11 = int(trueMat.m11()*qreal(4096.0)); + int m12 = int(trueMat.m12()*qreal(4096.0)); + int m21 = int(trueMat.m21()*qreal(4096.0)); + int m22 = int(trueMat.m22()*qreal(4096.0)); + int dx = qRound(trueMat.dx()*qreal(4096.0)); + int dy = qRound(trueMat.dy()*qreal(4096.0)); int m21ydx = dx + (xoffset<<16) + (m11 + m21) / 2; int m22ydy = dy + (m12 + m22) / 2; diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp index aebcbafd29..e1382dd747 100644 --- a/src/gui/image/qnativeimage.cpp +++ b/src/gui/image/qnativeimage.cpp @@ -153,7 +153,12 @@ QImage::Format QNativeImage::systemFormat() QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* isTextBuffer */, QWidget *widget) : xshmimg(0), xshmpm(0) { - if (!X11->use_mitshm) { + QX11Info info = widget->x11Info(); + + int dd = info.depth(); + Visual *vis = (Visual*) info.visual(); + + if (!X11->use_mitshm || format != QImage::Format_RGB16 && X11->bppForDepth.value(dd) != 32) { image = QImage(width, height, format); // follow good coding practice and set xshminfo attributes, though values not used in this case xshminfo.readOnly = true; @@ -163,11 +168,6 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* return; } - QX11Info info = widget->x11Info(); - - int dd = info.depth(); - Visual *vis = (Visual*) info.visual(); - xshmimg = XShmCreateImage(X11->display, vis, dd, ZPixmap, 0, &xshminfo, width, height); if (!xshmimg) { qWarning("QNativeImage: Unable to create shared XImage."); diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 77c2a2a9d9..0e1401cb16 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -897,12 +897,20 @@ void QX11PixmapData::fromImage(const QImage &img, } ) break; - case BPP24_888: // 24 bit MSB + case BPP24_888: CYCLE( - for (int x=0; x<w; x++) { - *dst++ = qRed (*p); - *dst++ = qGreen(*p); - *dst++ = qBlue (*p++); + if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { + for (int x=0; x<w; x++) { + *dst++ = qRed (*p); + *dst++ = qGreen(*p); + *dst++ = qBlue (*p++); + } + } else { + for (int x=0; x<w; x++) { + *dst++ = qBlue (*p); + *dst++ = qGreen(*p); + *dst++ = qRed (*p++); + } } ) break; diff --git a/src/gui/image/qvolatileimage.cpp b/src/gui/image/qvolatileimage.cpp index 9734c82494..350d70ff42 100644 --- a/src/gui/image/qvolatileimage.cpp +++ b/src/gui/image/qvolatileimage.cpp @@ -248,12 +248,14 @@ void QVolatileImage::copyFrom(QVolatileImage *source, const QRect &rect) const uchar *sptr = srcImgRef.constBits() + r.y() * srcbpl; beginDataAccess(); QImage &dstImgRef(imageRef()); - int dstbpl = dstImgRef.bytesPerLine(); - uchar *dptr = dstImgRef.bits(); - for (int y = 0; y < r.height(); ++y) { - qMemCopy(dptr, sptr + r.x() * srcbpp, r.width() * srcbpp); - sptr += srcbpl; - dptr += dstbpl; + if (!dstImgRef.isNull()) { + int dstbpl = dstImgRef.bytesPerLine(); + uchar *dptr = dstImgRef.bits(); + for (int y = 0; y < r.height(); ++y) { + qMemCopy(dptr, sptr + r.x() * srcbpp, r.width() * srcbpp); + sptr += srcbpl; + dptr += dstbpl; + } } endDataAccess(); source->endDataAccess(true); diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index 8ef9726632..ad51b4b265 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -136,6 +136,7 @@ private: private Q_SLOTS: void ensureInputCapabilitiesChanged(); void translateInputWidget(); + void ensureWidgetVisibility(); // From MCoeFepAwareTextEditor public: @@ -208,6 +209,7 @@ private: int m_splitViewResizeBy; Qt::WindowStates m_splitViewPreviousWindowStates; QRectF m_transformation; + QGraphicsItem *m_splitViewPreviousFocusItem; //can't use QPointer<> since QGraphicsItem is not a QObject. CAknCcpuSupport *m_ccpu; QAction *m_copyAction; diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 90252216d8..8f13c53898 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -94,6 +94,11 @@ #define QT_EPSUidAknFep 0x100056de #define QT_EAknFepTouchInputActive 0x00000004 +// For compatibility with older Symbian^3 environments, which do not have this define yet. +#ifndef R_AVKON_DISCREET_POPUP_TEXT_COPIED +#define R_AVKON_DISCREET_POPUP_TEXT_COPIED 0x8cc0227 +#endif + _LIT(KAvkonResourceFile, "z:\\resource\\avkon.rsc" ); QT_BEGIN_NAMESPACE @@ -377,6 +382,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_hasTempPreeditString(false), m_splitViewResizeBy(0), m_splitViewPreviousWindowStates(Qt::WindowNoState), + m_splitViewPreviousFocusItem(0), m_ccpu(0) { m_fepState->SetObjectProvider(this); @@ -446,6 +452,11 @@ void QCoeFepInputContext::reset() if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText)) m_cachedPreeditString = m_preeditString; commitCurrentString(true); + + // QGraphicsScene calls reset() when changing focus item. Unfortunately, the new focus item is + // set right after resetting the input context. Therefore, asynchronously call ensureWidgetVisibility(). + if (S60->splitViewLastWidget) + QMetaObject::invokeMethod(this,"ensureWidgetVisibility", Qt::QueuedConnection); } void QCoeFepInputContext::ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType) @@ -788,9 +799,8 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) { QGraphicsView *gv = qobject_cast<QGraphicsView*>(S60->splitViewLastWidget); - if (!gv) { + if (!gv) return; - } QSymbianControl *symControl = static_cast<QSymbianControl*>(gv->effectiveWinId()); symControl->CancelLongTapTimer(); @@ -805,11 +815,13 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) if (!alwaysResize) { if (gv->scene() && S60->partial_keyboardAutoTranslation) { if (gv->scene()->focusItem()) { + QGraphicsItem *focusItem = + m_splitViewPreviousFocusItem ? m_splitViewPreviousFocusItem : gv->scene()->focusItem(); // Check if the widget contains cursorPositionChanged signal and disconnect from it. QByteArray signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())); - int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1)); + int index = focusItem->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1)); if (index != -1) - disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + disconnect(focusItem->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); } QGraphicsItem *rootItem = 0; @@ -877,10 +889,18 @@ bool QCoeFepInputContext::isPartialKeyboardSupported() return (S60->partial_keyboard || !QApplication::testAttribute(Qt::AA_S60DisablePartialScreenInputMode)); } +void QCoeFepInputContext::ensureWidgetVisibility() +{ + ensureFocusWidgetVisible(S60->splitViewLastWidget); +} + // Ensure that the input widget is visible in the splitview rect. void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) { + if (!widget) + return; + // Native side opening and closing its virtual keyboard when it changes the keyboard layout, // has an adverse impact on long tap timer. Cancel the timer when splitview opens to avoid this. QSymbianControl *symControl = static_cast<QSymbianControl*>(widget->effectiveWinId()); @@ -908,17 +928,22 @@ void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) // states getting changed. if (!moveWithinVisibleArea) { - // Check if the widget contains cursorPositionChanged signal and connect to it. - QByteArray signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())); - if (gv->scene() && gv->scene()->focusItem() && S60->partial_keyboardAutoTranslation) { - int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1)); - if (index != -1) - connect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); - } S60->splitViewLastWidget = widget; m_splitViewPreviousWindowStates = windowToMove->windowState(); } + // Check if the widget contains cursorPositionChanged signal and connect to it. + if (gv->scene() && gv->scene()->focusItem() && S60->partial_keyboardAutoTranslation) { + QByteArray signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())); + if (m_splitViewPreviousFocusItem && m_splitViewPreviousFocusItem != gv->scene()->focusItem()) + disconnect(m_splitViewPreviousFocusItem->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1)); + if (index != -1) { + connect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + m_splitViewPreviousFocusItem = gv->scene()->focusItem(); + } + } + int windowTop = widget->window()->pos().y(); const bool userResize = widget->testAttribute(Qt::WA_Resized); @@ -1083,6 +1108,9 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) } else if (hints & ImhNoAutoUppercase) { m_fepState->SetDefaultCase(EAknEditorLowerCase); m_fepState->SetCurrentCase(EAknEditorLowerCase); + } else if (hints & ImhHiddenText) { + m_fepState->SetDefaultCase(EAknEditorLowerCase); + m_fepState->SetCurrentCase(EAknEditorLowerCase); } else { m_fepState->SetDefaultCase(EAknEditorTextCase); m_fepState->SetCurrentCase(EAknEditorTextCase); @@ -1094,6 +1122,10 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) if (hints & ImhLowercaseOnly) { flags |= EAknEditorLowerCase; } + if (hints & ImhHiddenText) { + flags = EAknEditorAllCaseModes; + flags &= ~EAknEditorTextCase; + } if (flags == 0) { flags = EAknEditorAllCaseModes; if (hints & ImhNoAutoUppercase) { @@ -1254,10 +1286,15 @@ void QCoeFepInputContext::translateInputWidget() m_transformation = (rootItem->transform().isTranslating()) ? QRectF(0,0, gv->width(), rootItem->transform().dy()) : QRectF(); - // Adjust cursor bounding rect to be lower, so that view translates if the cursor gets near - // the splitview border. - QRect cursorRect = cursorP.boundingRect().adjusted(0, cursor.height(), 0, cursor.height()); - if (splitViewRect.contains(cursorRect)) + // Adjust cursor bounding rect towards navigation direction, + // so that view translates if the cursor gets near the splitview border. + QRect cursorRect = (cursorP.boundingRect().top() < 0) ? + cursorP.boundingRect().adjusted(0, -cursor.height(), 0, -cursor.height()) : + cursorP.boundingRect().adjusted(0, cursor.height(), 0, cursor.height()); + + // If the current cursor position and upcoming cursor positions are visible in the splitview + // area, do not move the view. + if (splitViewRect.contains(cursorRect) && splitViewRect.contains(cursorP.boundingRect())) return; // New Y position should be ideally just above the keyboard. @@ -1269,18 +1306,29 @@ void QCoeFepInputContext::translateInputWidget() const qreal itemHeight = path.boundingRect().height(); // Limit the maximum translation so that underlaying window content is not exposed. - qreal maxY = gv->sceneRect().bottom() - splitViewRect.bottom(); - maxY = m_transformation.height() ? (qMin(itemHeight, maxY) + m_transformation.height()) : maxY; - if (maxY < 0) - maxY = 0; + qreal availableSpace = gv->sceneRect().bottom() - splitViewRect.bottom(); + availableSpace = m_transformation.height() ? + (qMin(itemHeight, availableSpace) + m_transformation.height()) : + availableSpace; // Translation should happen row-by-row, but initially it needs to ensure that cursor is visible. const qreal translation = m_transformation.height() ? cursor.height() : (cursorRect.bottom() - vkbRect.top()); - const qreal dy = -(qMin(maxY, translation)); + qreal dy = 0.0; + if (availableSpace > 0) + dy = -(qMin(availableSpace, translation)); + else + dy = -(translation); + + // Correct the translation direction, if the cursor rect would be moved above application area. + if ((cursorP.boundingRect().bottom() + dy) < 0) + dy *= -1; - // Do not allow transform above screen top, nor beyond scenerect - if (m_transformation.height() + dy > 0 || gv->sceneRect().bottom() + m_transformation.height() < 0) { + // Do not allow transform above screen top, nor beyond scenerect. Also, if there is no available + // space anymore, skip translation. + if ((m_transformation.height() + dy) > 0 + || (gv->sceneRect().bottom() + m_transformation.height()) < 0 + || !availableSpace) { // If we already have some transformation, remove it. if (m_transformation.height() < 0 || gv->sceneRect().bottom() + m_transformation.height() < 0) { rootItem->resetTransform(); @@ -1596,8 +1644,6 @@ void QCoeFepInputContext::changeCBA(bool showCopyAndOrPaste) void QCoeFepInputContext::copyOrCutTextToClipboard(const char *operation) { - bool hasText = false; - QWidget *w = focusWidget(); QObject *focusObject = 0; if (!w) { @@ -1613,11 +1659,13 @@ void QCoeFepInputContext::copyOrCutTextToClipboard(const char *operation) if (cursor != anchor) { if (ccpuInvokeSlot(w, focusObject, operation)) { - TRAP_IGNORE( - CAknDiscreetPopup::ShowGlobalPopupL( - R_AVKON_DISCREET_POPUP_TEXT_COPIED, - KAvkonResourceFile); - ) + if (QSysInfo::symbianVersion() > QSysInfo::SV_SF_3) { + TRAP_IGNORE( + CAknDiscreetPopup::ShowGlobalPopupL( + R_AVKON_DISCREET_POPUP_TEXT_COPIED, + KAvkonResourceFile); + ) + } } } } @@ -1696,15 +1744,33 @@ TBool QCoeFepInputContext::CcpuIsFocused() const TBool QCoeFepInputContext::CcpuCanCut() const { bool retval = false; + if (m_inDestruction) + return retval; QWidget *w = focusWidget(); - if (!w) + QObject *focusObject = 0; + if (!w) { w = m_lastFocusedEditor; - else - w = getQWidgetFromQGraphicsView(w); + focusObject = m_lastFocusedObject; + } else { + w = getQWidgetFromQGraphicsView(w, &focusObject); + } if (w) { - int cursor = w->inputMethodQuery(Qt::ImCursorPosition).toInt(); - int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt(); - retval = cursor != anchor; + QRect microFocus = w->inputMethodQuery(Qt::ImMicroFocus).toRect(); + if (microFocus.isNull()) { + // For some reason, the editor does not have microfocus. Most probably, + // it is due to using native fullscreen editing mode with QML apps. + // Try accessing "selectedText" directly. + QObject *invokeTarget = w; + if (focusObject) + invokeTarget = focusObject; + + QString selectedText = invokeTarget->property("selectedText").toString(); + retval = !selectedText.isNull(); + } else { + int cursor = w->inputMethodQuery(Qt::ImCursorPosition).toInt(); + int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt(); + retval = cursor != anchor; + } } return retval; } @@ -1727,6 +1793,9 @@ void QCoeFepInputContext::CcpuCopyL() TBool QCoeFepInputContext::CcpuCanPaste() const { bool canPaste = false; + if (m_inDestruction) + return canPaste; + QString textToPaste = QApplication::clipboard()->text(); if (!textToPaste.isEmpty()) { QWidget *w = focusWidget(); diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 15d37c3c08..35a9559254 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -874,6 +874,10 @@ void QApplicationPrivate::construct( if (qt_is_gui_used) qt_guiPlatformPlugin(); #endif + +#ifdef Q_OS_SYMBIAN + symbianHandleLiteModeStartup(); +#endif } #if defined(Q_WS_X11) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index e1252a9589..0756d6ca6a 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -561,6 +561,7 @@ public: int symbianProcessWsEvent(const QSymbianEvent *symbianEvent); int symbianHandleCommand(const QSymbianEvent *symbianEvent); int symbianResourceChange(const QSymbianEvent *symbianEvent); + void symbianHandleLiteModeStartup(); void _q_aboutToQuit(); #endif diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 80bcdf0ea5..7d198ce14b 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -201,6 +201,32 @@ bool QS60Data::setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStat } #endif +void QS60Data::createStatusPaneAndCBA() +{ + CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi()); + MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory(); + QT_TRAP_THROWING( + factory->CreateResourceIndependentFurnitureL(ui); + CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, + CEikButtonGroupContainer::EHorizontal, ui, R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); + CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba); + Q_ASSERT(!oldCba); + S60->setButtonGroupContainer(cba); + CEikMenuBar *menuBar = new(ELeave) CEikMenuBar; + menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY); + menuBar->SetMenuType(CEikMenuBar::EMenuOptions); + S60->appUi()->AddToStackL(menuBar, ECoeStackPriorityMenu, ECoeStackFlagRefusesFocus); + CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar); + Q_ASSERT(!oldMenu); + ) + if (S60->statusPane()) { + // Use QDesktopWidget as the status pane observer to proxy for the AppUi. + // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver. + QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId()); + S60->statusPane()->SetObserver(desktopControl); + } +} + void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible) { if (QWidgetPrivate::mapper && QWidgetPrivate::mapper->contains(control)) { @@ -1493,12 +1519,15 @@ void QSymbianControl::handleClientAreaChange() } } -bool QSymbianControl::isSplitViewWidget(QWidget *widget) { +bool QSymbianControl::isSplitViewWidget(QWidget *widget) +{ bool returnValue = true; - //Ignore events sent to non-active windows, not visible widgets and not parents of input widget. + // Ignore events sent to non-active windows, not visible widgets and not parents of input widget + // and non-Qt dialogs. if (!qwidget->isActiveWindow() || !qwidget->isVisible() - || !qwidget->isAncestorOf(widget)) { + || !qwidget->isAncestorOf(widget) + || CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) { returnValue = false; } @@ -2577,6 +2606,24 @@ int QApplicationPrivate::symbianResourceChange(const QSymbianEvent *symbianEvent return ret; } +void QApplicationPrivate::symbianHandleLiteModeStartup() +{ + if (QCoreApplication::arguments().contains(QLatin1String("--startup-lite"))) { + if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) + && !S60->buttonGroupContainer() && !S60->statusPane()) { + // hide and force this app to the background before creating screen furniture to avoid flickers + CAknAppUi *appui = static_cast<CAknAppUi*>(CCoeEnv::Static()->AppUi()); + if (appui) + appui->HideApplicationFromFSW(ETrue); + CCoeEnv::Static()->RootWin().SetOrdinalPosition(-1); + S60->createStatusPaneAndCBA(); + if (S60->statusPane()) { + S60->setStatusPaneAndButtonGroupVisibility(false, false); + } + } + } +} + #ifndef QT_NO_WHEELEVENT int QApplication::wheelScrollLines() { diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 756cb56b58..c472738254 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -682,7 +682,7 @@ void QApplicationPrivate::initializeWidgetPaletteHash() QColor menuText(qt_colorref2qrgb(GetSysColor(COLOR_MENUTEXT))); BOOL isFlat = false; if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) SystemParametersInfo(SPI_GETFLATMENU, 0, &isFlat, 0); QPalette menu(pal); // we might need a special color group for the menu. @@ -697,7 +697,7 @@ void QApplicationPrivate::initializeWidgetPaletteHash() menu.setColor(QPalette::Disabled, QPalette::Highlight, QColor(qt_colorref2qrgb(GetSysColor( (QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) && isFlat ? COLOR_MENUHILIGHT : COLOR_HIGHLIGHT)))); menu.setColor(QPalette::Disabled, QPalette::HighlightedText, disabled); menu.setColor(QPalette::Disabled, QPalette::Button, @@ -719,7 +719,7 @@ void QApplicationPrivate::initializeWidgetPaletteHash() QApplication::setPalette(menu, "QMenu"); if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) && isFlat) { + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) && isFlat) { QColor menubar(qt_colorref2qrgb(GetSysColor(COLOR_MENUBAR))); menu.setColor(QPalette::Active, QPalette::Button, menubar); menu.setColor(QPalette::Disabled, QPalette::Button, menubar); @@ -999,7 +999,7 @@ const QString qt_reg_winclass(QWidget *w) // register window class style = CS_DBLCLKS; if (w->inherits("QTipLabel") || w->inherits("QAlphaWidget")) { if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) { + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { style |= CS_DROPSHADOW; } cname = QLatin1String("QToolTip"); @@ -1017,7 +1017,7 @@ const QString qt_reg_winclass(QWidget *w) // register window class style |= CS_SAVEBITS; #endif if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) style |= CS_DROPSHADOW; icon = false; } else { @@ -4161,7 +4161,8 @@ PtrCloseTouchInputHandle QApplicationPrivate::CloseTouchInputHandle = 0; void QApplicationPrivate::initializeMultitouch_sys() { - if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) { + if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7 + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) { static const int QT_SM_DIGITIZER = 94; int value = GetSystemMetrics(QT_SM_DIGITIZER); static const int QT_NID_INTEGRATED_TOUCH = 0x01; diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index ef8e2b86ea..408e9acf3b 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -1896,6 +1896,12 @@ void qt_init(QApplicationPrivate *priv, int, X11->defaultScreen = DefaultScreen(X11->display); X11->screenCount = ScreenCount(X11->display); + int formatCount = 0; + XPixmapFormatValues *values = XListPixmapFormats(X11->display, &formatCount); + for (int i = 0; i < formatCount; ++i) + X11->bppForDepth[values[i].depth] = values[i].bits_per_pixel; + XFree(values); + X11->screens = new QX11InfoData[X11->screenCount]; X11->argbVisuals = new Visual *[X11->screenCount]; X11->argbColormaps = new Colormap[X11->screenCount]; diff --git a/src/gui/kernel/qcursor_win.cpp b/src/gui/kernel/qcursor_win.cpp index cef83f5a1b..a68472c584 100644 --- a/src/gui/kernel/qcursor_win.cpp +++ b/src/gui/kernel/qcursor_win.cpp @@ -477,7 +477,7 @@ void QCursorData::update() QPixmap pixmap = QApplicationPrivate::instance()->getPixmapCursor(cshape); hcurs = create32BitCursor(pixmap, hx, hy); } - break; + return; default: qWarning("QCursor::update: Invalid cursor shape %d", cshape); return; diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp index 708859d811..04fd111891 100644 --- a/src/gui/kernel/qguiplatformplugin.cpp +++ b/src/gui/kernel/qguiplatformplugin.cpp @@ -137,10 +137,10 @@ QString QGuiPlatformPlugin::styleName() return QLatin1String("WindowsCE"); #elif defined(Q_WS_WIN) if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) return QLatin1String("WindowsVista"); else if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) return QLatin1String("WindowsXP"); else return QLatin1String("Windows"); // default styles for Windows diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 96b8141d61..5ad5b00772 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -163,6 +163,7 @@ public: int partial_keyboardAutoTranslation : 1; int partialKeyboardOpen : 1; int handleStatusPaneResizeNotifications : 1; + int screenFurnitureFullyCreated : 1; QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type QPointer<QWidget> splitViewLastWidget; @@ -198,6 +199,7 @@ public: static inline void setButtonGroupContainer(CEikButtonGroupContainer* newCba); static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible); static bool setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStates newState); + static void createStatusPaneAndCBA(); #endif static void controlVisibilityChanged(CCoeControl *control, bool visible); static TRect clientRect(); @@ -365,6 +367,7 @@ inline QS60Data::QS60Data() partial_keyboardAutoTranslation(1), partialKeyboardOpen(0), handleStatusPaneResizeNotifications(1), + screenFurnitureFullyCreated(0), s60ApplicationFactory(0) #ifdef Q_OS_SYMBIAN ,s60InstalledTrapHandler(0) diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index 72acaf3538..fe4a631c5e 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -54,6 +54,7 @@ // #include "QtGui/qwindowdefs.h" +#include "QtCore/qhash.h" #include "QtCore/qlist.h" #include "QtCore/qvariant.h" @@ -467,6 +468,7 @@ struct QX11Data Colormap *argbColormaps; int screenCount; int defaultScreen; + QHash<int, int> bppForDepth; Time time; Time userTime; diff --git a/src/gui/kernel/qtooltip.cpp b/src/gui/kernel/qtooltip.cpp index f880243a7e..178e7b1a46 100644 --- a/src/gui/kernel/qtooltip.cpp +++ b/src/gui/kernel/qtooltip.cpp @@ -184,7 +184,7 @@ QTipLabel::QTipLabel(const QString &text, QWidget *w) setAlignment(Qt::AlignLeft); setIndent(1); qApp->installEventFilter(this); - setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / 255.0); + setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / qreal(255.0)); setMouseTracking(true); fadingOut = false; reuseTip(text); diff --git a/src/gui/kernel/qwhatsthis.cpp b/src/gui/kernel/qwhatsthis.cpp index 5328cb1fd1..da792500d0 100644 --- a/src/gui/kernel/qwhatsthis.cpp +++ b/src/gui/kernel/qwhatsthis.cpp @@ -227,7 +227,7 @@ QWhatsThat::QWhatsThat(const QString& txt, QWidget* parent, QWidget *showTextFor } #if defined(Q_WS_WIN) if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { BOOL shadow; SystemParametersInfo(SPI_GETDROPSHADOW, 0, &shadow, 0); @@ -305,7 +305,7 @@ void QWhatsThat::paintEvent(QPaintEvent*) bool drawShadow = true; #if defined(Q_WS_WIN) if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { BOOL shadow; SystemParametersInfo(SPI_GETDROPSHADOW, 0, &shadow, 0); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 0aa1dfa283..7055c6b4b7 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -2260,10 +2260,16 @@ void QWidgetPrivate::updateIsOpaque() #endif #ifdef Q_WS_S60 - if (q->windowType() == Qt::Dialog && q->testAttribute(Qt::WA_TranslucentBackground) - && S60->avkonComponentsSupportTransparency) { - setOpaque(false); - return; + if (q->testAttribute(Qt::WA_TranslucentBackground)) { + if (q->windowType() & Qt::Dialog || q->windowType() & Qt::Popup) { + if (S60->avkonComponentsSupportTransparency) { + setOpaque(false); + return; + } + } else { + setOpaque(false); + return; + } } #endif @@ -2283,11 +2289,16 @@ void QWidgetPrivate::updateIsOpaque() } if (q->isWindow() && !q->testAttribute(Qt::WA_NoSystemBackground)) { +#ifdef Q_WS_S60 + setOpaque(true); + return; +#else const QBrush &windowBrush = q->palette().brush(QPalette::Window); if (windowBrush.style() != Qt::NoBrush && windowBrush.isOpaque()) { setOpaque(true); return; } +#endif } setOpaque(false); } @@ -10948,11 +10959,14 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) } break; case Qt::WA_TranslucentBackground: +#if defined(Q_OS_SYMBIAN) + setAttribute(Qt::WA_NoSystemBackground, on); +#else if (on) { setAttribute(Qt::WA_NoSystemBackground); d->updateIsTranslucent(); } - +#endif break; case Qt::WA_AcceptTouchEvents: #if defined(Q_WS_WIN) || defined(Q_WS_MAC) || defined(Q_OS_SYMBIAN) @@ -11049,7 +11063,7 @@ bool QWidget::testAttribute_helper(Qt::WidgetAttribute attribute) const qreal QWidget::windowOpacity() const { Q_D(const QWidget); - return (isWindow() && d->maybeTopData()) ? d->maybeTopData()->opacity / 255. : 1.0; + return (isWindow() && d->maybeTopData()) ? d->maybeTopData()->opacity / qreal(255.) : qreal(1.0); } void QWidget::setWindowOpacity(qreal opacity) diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index aefffb6ceb..9ac94795d5 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -233,6 +233,7 @@ struct QTLWExtra { uint inExpose : 1; // Prevents drawing recursion uint nativeWindowTransparencyEnabled : 1; // Tracks native window transparency uint forcedToRaster : 1; + uint noSystemRotationDisabled : 1; #elif defined(Q_WS_QPA) QPlatformWindow *platformWindow; QPlatformWindowFormat platformWindowFormat; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index e06b625812..396c3064f6 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -505,63 +505,41 @@ void QWidgetPrivate::show_sys() #ifdef Q_WS_S60 // Lazily initialize the S60 screen furniture when the first window is shown. if (q->isWindow() && !QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) - && !S60->buttonGroupContainer() && !S60->statusPane()) { - - if (!q->testAttribute(Qt::WA_DontShowOnScreen)) { - - // Create the status pane and CBA here - CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi()); - MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory(); - - QT_TRAP_THROWING( - factory->CreateResourceIndependentFurnitureL(ui); - - CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, - CEikButtonGroupContainer::EHorizontal,ui,R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); - if (isFullscreen && !cbaRequested) - cba->MakeVisible(false); - - CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba); - Q_ASSERT(!oldCba); - S60->setButtonGroupContainer(cba); - - // If the creation of the first widget is delayed, for example by doing it - // inside the event loop, S60 somehow "forgets" to set the visibility of the - // toolbar (the three middle softkeys) when you flip the phone over, so we - // need to do it ourselves to avoid a "hole" in the application, even though - // Qt itself does not use the toolbar directly.. - CAknAppUi *appui = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); - if (appui) { - CAknToolbar *toolbar = appui->PopupToolbar(); - if (toolbar && !toolbar->IsVisible()) - toolbar->SetToolbarVisibility(ETrue); - } + && !q->testAttribute(Qt::WA_DontShowOnScreen) && !S60->screenFurnitureFullyCreated) { + // Create the status pane and CBA here if not yet done. These could be created earlier + // if application was launched in "App-Lite" version + if (!S60->buttonGroupContainer() && !S60->statusPane()) + S60->createStatusPaneAndCBA(); + + if (S60->buttonGroupContainer()) { + if (isFullscreen && !cbaRequested) + S60->buttonGroupContainer()->MakeVisible(false); + } + + // If the creation of the first widget is delayed, for example by doing it + // inside the event loop, S60 somehow "forgets" to set the visibility of the + // toolbar (the three middle softkeys) when you flip the phone over, so we + // need to do it ourselves to avoid a "hole" in the application, even though + // Qt itself does not use the toolbar directly.. + CAknAppUi *appui = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); + if (appui) { + CAknToolbar *toolbar = appui->PopupToolbar(); + if (toolbar && !toolbar->IsVisible()) + toolbar->SetToolbarVisibility(ETrue); + } - CEikMenuBar *menuBar = new(ELeave) CEikMenuBar; - menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY); - menuBar->SetMenuType(CEikMenuBar::EMenuOptions); - S60->appUi()->AddToStackL(menuBar,ECoeStackPriorityMenu,ECoeStackFlagRefusesFocus); - - CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar); - Q_ASSERT(!oldMenu); - ) - - if (S60->statusPane()) { - // Use QDesktopWidget as the status pane observer to proxy for the AppUi. - // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver. - QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId()); - S60->statusPane()->SetObserver(desktopControl); - if (isFullscreen) { - const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible(); - S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible); - if (cbaVisible) { - // Fix window dimensions as without screen furniture they will have - // defaulted to full screen dimensions initially. - id->handleClientAreaChange(); - } + if (S60->statusPane()) { + if (isFullscreen) { + const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible(); + S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible); + if (cbaVisible) { + // Fix window dimensions as without screen furniture they will have + // defaulted to full screen dimensions initially. + id->handleClientAreaChange(); } } } + S60->screenFurnitureFullyCreated = true; } #endif @@ -804,19 +782,12 @@ void QWidgetPrivate::setConstraints_sys() void QWidgetPrivate::s60UpdateIsOpaque() { Q_Q(QWidget); - if (!q->testAttribute(Qt::WA_WState_Created)) return; - const bool writeAlpha = extraData()->nativePaintMode == QWExtra::BlitWriteAlpha; - if (!q->testAttribute(Qt::WA_TranslucentBackground) && !writeAlpha) - return; const bool requireAlphaChannel = !isOpaque || writeAlpha; - createTLExtra(); - RWindow *const window = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow()); - #ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces && !extra->topextra->forcedToRaster) { @@ -825,25 +796,47 @@ void QWidgetPrivate::s60UpdateIsOpaque() return; } #endif + const bool recreateBackingStore = extra->topextra->backingStore.data() && ( + QApplicationPrivate::graphics_system_name == QLatin1String("openvg") || + QApplicationPrivate::graphics_system_name == QLatin1String("opengl") + ); if (requireAlphaChannel) { - const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); - if (window->SetTransparencyAlphaChannel() == KErrNone) { + window->SetRequiredDisplayMode(EColor16MA); + if (window->SetTransparencyAlphaChannel() == KErrNone) window->SetBackgroundColor(TRgb(255, 255, 255, 0)); - extra->topextra->nativeWindowTransparencyEnabled = 1; - if (extra->topextra->backingStore.data() && ( - QApplicationPrivate::graphics_system_name == QLatin1String("openvg") - || QApplicationPrivate::graphics_system_name == QLatin1String("opengl"))) { - // Semi-transparent EGL surfaces aren't supported. We need to - // recreate backing store to get translucent surface (raster surface). - extra->topextra->backingStore.create(q); - extra->topextra->backingStore.registerWidget(q); - // FixNativeOrientation() will not work without an EGL surface. + } else { + if (recreateBackingStore) { + // Clear the UI surface to ensure that the EGL surface content is visible + CWsScreenDevice *screenDevice = S60->screenDevice(q); + QScopedPointer<CWindowGc> gc(new CWindowGc(screenDevice)); + const int err = gc->Construct(); + if (!err) { + gc->Activate(*window); + window->BeginRedraw(); + gc->SetDrawMode(CWindowGc::EDrawModeWriteAlpha); + gc->SetBrushColor(TRgb(0, 0, 0, 0)); + gc->Clear(TRect(0, 0, q->width(), q->height())); + window->EndRedraw(); + } + } + if (extra->topextra->nativeWindowTransparencyEnabled) + window->SetTransparentRegion(TRegionFix<1>()); + } + extra->topextra->nativeWindowTransparencyEnabled = requireAlphaChannel; + if (recreateBackingStore) { + extra->topextra->backingStore.create(q); + extra->topextra->backingStore.registerWidget(q); + bool noSystemRotationDisabled = false; + if (requireAlphaChannel) { + if (q->testAttribute(Qt::WA_SymbianNoSystemRotation)) { + // FixNativeOrientation() will not work without an EGL surface q->setAttribute(Qt::WA_SymbianNoSystemRotation, false); + noSystemRotationDisabled = true; } + } else { + q->setAttribute(Qt::WA_SymbianNoSystemRotation, extra->topextra->noSystemRotationDisabled); } - } else if (extra->topextra->nativeWindowTransparencyEnabled) { - window->SetTransparentRegion(TRegionFix<1>()); - extra->topextra->nativeWindowTransparencyEnabled = 0; + extra->topextra->noSystemRotationDisabled = noSystemRotationDisabled; } } @@ -1004,6 +997,7 @@ void QWidgetPrivate::createTLSysExtra() extra->topextra->inExpose = 0; extra->topextra->nativeWindowTransparencyEnabled = 0; extra->topextra->forcedToRaster = 0; + extra->topextra->noSystemRotationDisabled = 0; } void QWidgetPrivate::deleteTLSysExtra() diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index 3d895b7753..2fe68a8e58 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -1578,7 +1578,7 @@ QColor QColor::toRgb() const } // chromatic case - const qreal h = ct.ahsv.hue == 36000 ? 0 : ct.ahsv.hue / 6000.; + const qreal h = ct.ahsv.hue == 36000 ? 0 : ct.ahsv.hue / qreal(6000.); const qreal s = ct.ahsv.saturation / qreal(USHRT_MAX); const qreal v = ct.ahsv.value / qreal(USHRT_MAX); const int i = int(h); @@ -1638,7 +1638,7 @@ QColor QColor::toRgb() const color.ct.argb.red = color.ct.argb.green = color.ct.argb.blue = 0; } else { // chromatic case - const qreal h = ct.ahsl.hue == 36000 ? 0 : ct.ahsl.hue / 36000.; + const qreal h = ct.ahsl.hue == 36000 ? 0 : ct.ahsl.hue / qreal(36000.); const qreal s = ct.ahsl.saturation / qreal(USHRT_MAX); const qreal l = ct.ahsl.lightness / qreal(USHRT_MAX); diff --git a/src/gui/painting/qgraphicssystemex_symbian.cpp b/src/gui/painting/qgraphicssystemex_symbian.cpp index 4469704668..32e040fdc8 100644 --- a/src/gui/painting/qgraphicssystemex_symbian.cpp +++ b/src/gui/painting/qgraphicssystemex_symbian.cpp @@ -46,31 +46,108 @@ #include <e32property.h> +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES +#include "private/qegl_p.h" +#endif + QT_BEGIN_NAMESPACE static bool bcm2727Initialized = false; static bool bcm2727 = false; +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES +typedef EGLBoolean (*NOK_resource_profiling)(EGLDisplay, EGLint, EGLint*, EGLint, EGLint*); +#define EGL_PROF_TOTAL_MEMORY_NOK 0x3070 +#endif + +// Detect if Qt is running on BCM2727 chip. +// BCM2727 is a special case on Symbian because +// it has only 32MB GPU memory which exposes +// significant limitations to hw accelerated UI. bool QSymbianGraphicsSystemEx::hasBCM2727() { if (bcm2727Initialized) return bcm2727; - const TUid KIvePropertyCat = {0x2726beef}; - enum TIvePropertyChipType { - EVCBCM2727B1 = 0x00000000, - EVCBCM2763A0 = 0x04000100, - EVCBCM2763B0 = 0x04000102, - EVCBCM2763C0 = 0x04000103, - EVCBCM2763C1 = 0x04000104, - EVCBCMUnknown = 0x7fffffff - }; - - TInt chipType = EVCBCMUnknown; - if (RProperty::Get(KIvePropertyCat, 0, chipType) == KErrNone) { - if (chipType == EVCBCM2727B1) +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES + EGLDisplay display = QEgl::display(); +#if 1 + // Hacky but fast ~0ms. + const char* vendor = eglQueryString(display, EGL_VENDOR); + if (strstr(vendor, "Broadcom")) { + const TUid KIvePropertyCat = {0x2726beef}; + enum TIvePropertyChipType { + EVCBCM2727B1 = 0x00000000, + EVCBCM2763A0 = 0x04000100, + EVCBCM2763B0 = 0x04000102, + EVCBCM2763C0 = 0x04000103, + EVCBCM2763C1 = 0x04000104, + EVCBCMUnknown = 0x7fffffff + }; + + // Broadcom driver publishes KIvePropertyCat PS key on + // devices which are running on BCM2727 chip and post Anna Symbian. + TInt chipType = EVCBCMUnknown; + if (RProperty::Get(KIvePropertyCat, 0, chipType) == KErrNone) { + if (chipType == EVCBCM2727B1) + bcm2727 = true; + } else if (QSysInfo::symbianVersion() <= QSysInfo::SV_SF_3) { + // Device is running on Symbian Anna or older Symbian^3 in which + // KIvePropertyCat is not published. These ones are always 32MB devices. + bcm2727 = true; + } else { + // We have some other Broadcom chip on post Anna Symbian. + // Should have > 32MB GPU memory. + } + } +#else + // Fool proof but takes 15-20ms and we don't want this delay on app startup... + + // All devices with <= 32MB GPU memory should be + // dealed in similar manner to BCM2727 + // So let's query max GPU memory amount. + NOK_resource_profiling eglQueryProfilingData = (NOK_resource_profiling)eglGetProcAddress("eglQueryProfilingDataNOK"); + if (eglQueryProfilingData) { + EGLint dataCount; + eglQueryProfilingData(display, + EGL_PROF_QUERY_GLOBAL_BIT_NOK | + EGL_PROF_QUERY_MEMORY_USAGE_BIT_NOK, + NULL, + 0, + (EGLint*)&dataCount); + + // Allocate room for the profiling data + EGLint* profData = (EGLint*)malloc(dataCount * sizeof(EGLint)); + memset(profData,0,dataCount * sizeof(EGLint)); + + // Retrieve the profiling data + eglQueryProfilingData(display, + EGL_PROF_QUERY_GLOBAL_BIT_NOK | + EGL_PROF_QUERY_MEMORY_USAGE_BIT_NOK, + profData, + dataCount, + (EGLint*)&dataCount); + + int totalMemory; + EGLint i = 0; + while (profData && i < dataCount) { + switch (profData[i++]) { + case EGL_PROF_TOTAL_MEMORY_NOK: + totalMemory = profData[i++]; + break; + default: + i++; + } + } + + // ok, hasBCM2727() naming is a bit misleading but Qt must + // behave the same on all chips like BCM2727 (<= 32MB GPU memory) + // and our code (and others) are already using this function. + if (totalMemory <= 33554432) bcm2727 = true; } +#endif +#endif // Q_SYMBIAN_SUPPORTS_SURFACES bcm2727Initialized = true; @@ -80,7 +157,9 @@ bool QSymbianGraphicsSystemEx::hasBCM2727() void QSymbianGraphicsSystemEx::releaseCachedGpuResources() { // Do nothing here - // This is implemented in graphics system specific plugin + + // This virtual function should be implemented in graphics system specific + // plugin } void QSymbianGraphicsSystemEx::releaseAllGpuResources() diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index bcc5f9d9b7..0fea2daf08 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -1649,8 +1649,8 @@ void QRasterPaintEngine::stroke(const QVectorPath &path, const QPen &pen) if (lines[i].p1() == lines[i].p2()) { if (s->lastPen.capStyle() != Qt::FlatCap) { QPointF p = lines[i].p1(); - QLineF line = s->matrix.map(QLineF(QPointF(p.x() - width*0.5, p.y()), - QPointF(p.x() + width*0.5, p.y()))); + QLineF line = s->matrix.map(QLineF(QPointF(p.x() - width*qreal(0.5), p.y()), + QPointF(p.x() + width*qreal(0.5), p.y()))); d->rasterizer->rasterizeLine(line.p1(), line.p2(), 1); } continue; @@ -5117,7 +5117,7 @@ static void drawEllipse_midpoint_i(const QRect &rect, const QRect &clip, { const qreal a = qreal(rect.width()) / 2; const qreal b = qreal(rect.height()) / 2; - qreal d = b*b - (a*a*b) + 0.25*a*a; + qreal d = b*b - (a*a*b) + qreal(0.25)*a*a; int x = 0; int y = (rect.height() + 1) / 2; @@ -5140,7 +5140,7 @@ static void drawEllipse_midpoint_i(const QRect &rect, const QRect &clip, pen_func, brush_func, pen_data, brush_data); // region 2 - d = b*b*(x + 0.5)*(x + 0.5) + a*a*((y - 1)*(y - 1) - b*b); + d = b*b*(x + qreal(0.5))*(x + qreal(0.5)) + a*a*((y - 1)*(y - 1) - b*b); const int miny = rect.height() & 0x1; while (y > miny) { if (d < 0) { // select SE diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp index 6df410b27d..eaedc4c8b4 100644 --- a/src/gui/painting/qpaintengineex.cpp +++ b/src/gui/painting/qpaintengineex.cpp @@ -748,8 +748,8 @@ void QPaintEngineEx::drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yR qreal y2 = rect.bottom(); if (mode == Qt::RelativeSize) { - xRadius = xRadius * rect.width() / 200.; - yRadius = yRadius * rect.height() / 200.; + xRadius = xRadius * rect.width() / qreal(200.); + yRadius = yRadius * rect.height() / qreal(200.); } xRadius = qMin(xRadius, rect.width() / 2); @@ -863,7 +863,7 @@ void QPaintEngineEx::drawPoints(const QPointF *points, int pointCount) for (int i=0; i<count; ++i) { pts[++oset] = points[i].x(); pts[++oset] = points[i].y(); - pts[++oset] = points[i].x() + 1/63.; + pts[++oset] = points[i].x() + 1/qreal(63.); pts[++oset] = points[i].y(); } QVectorPath path(pts, count * 2, qpaintengineex_line_types_16, QVectorPath::LinesHint); @@ -873,7 +873,7 @@ void QPaintEngineEx::drawPoints(const QPointF *points, int pointCount) } } else { for (int i=0; i<pointCount; ++i) { - qreal pts[] = { points[i].x(), points[i].y(), points[i].x() + 1/63., points[i].y() }; + qreal pts[] = { points[i].x(), points[i].y(), points[i].x() + 1/qreal(63.), points[i].y() }; QVectorPath path(pts, 2, 0); stroke(path, pen); } @@ -894,7 +894,7 @@ void QPaintEngineEx::drawPoints(const QPoint *points, int pointCount) for (int i=0; i<count; ++i) { pts[++oset] = points[i].x(); pts[++oset] = points[i].y(); - pts[++oset] = points[i].x() + 1/63.; + pts[++oset] = points[i].x() + 1/qreal(63.); pts[++oset] = points[i].y(); } QVectorPath path(pts, count * 2, qpaintengineex_line_types_16, QVectorPath::LinesHint); @@ -905,7 +905,7 @@ void QPaintEngineEx::drawPoints(const QPoint *points, int pointCount) } else { for (int i=0; i<pointCount; ++i) { qreal pts[] = { qreal(points[i].x()), qreal(points[i].y()), - qreal(points[i].x() +1/63.), qreal(points[i].y()) }; + qreal(points[i].x() +1/qreal(63.)), qreal(points[i].y()) }; QVectorPath path(pts, 2, 0); stroke(path, pen); } diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index efb016e9e2..fb5ce96ec7 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -403,8 +403,8 @@ void QPainterPrivate::draw_helper(const QPainterPath &originalPath, DrawOperatio QPainterPath stroke = stroker.createStroke(originalPath); strokeBounds = (stroke * state->matrix).boundingRect(); } else { - strokeOffsetX = qAbs(penWidth * state->matrix.m11() / 2.0); - strokeOffsetY = qAbs(penWidth * state->matrix.m22() / 2.0); + strokeOffsetX = qAbs(penWidth * state->matrix.m11() / qreal(2.0)); + strokeOffsetY = qAbs(penWidth * state->matrix.m22() / qreal(2.0)); } } } @@ -4460,8 +4460,8 @@ void QPainter::drawArc(const QRectF &r, int a, int alen) QRectF rect = r.normalized(); QPainterPath path; - path.arcMoveTo(rect, a/16.0); - path.arcTo(rect, a/16.0, alen/16.0); + path.arcMoveTo(rect, a/qreal(16.0)); + path.arcTo(rect, a/qreal(16.0), alen/qreal(16.0)); strokePath(path, d->state->pen); } @@ -4531,7 +4531,7 @@ void QPainter::drawPie(const QRectF &r, int a, int alen) QPainterPath path; path.moveTo(rect.center()); - path.arcTo(rect.x(), rect.y(), rect.width(), rect.height(), a/16.0, alen/16.0); + path.arcTo(rect.x(), rect.y(), rect.width(), rect.height(), a/qreal(16.0), alen/qreal(16.0)); path.closeSubpath(); drawPath(path); @@ -4592,8 +4592,8 @@ void QPainter::drawChord(const QRectF &r, int a, int alen) QRectF rect = r.normalized(); QPainterPath path; - path.arcMoveTo(rect, a/16.0); - path.arcTo(rect, a/16.0, alen/16.0); + path.arcMoveTo(rect, a/qreal(16.0)); + path.arcTo(rect, a/qreal(16.0), alen/qreal(16.0)); path.closeSubpath(); drawPath(path); } @@ -9242,7 +9242,7 @@ void QPainter::drawPixmapFragments(const PixmapFragment *fragments, int fragment qreal h = fragments[i].scaleY * fragments[i].height; QRectF sourceRect(fragments[i].sourceLeft, fragments[i].sourceTop, fragments[i].width, fragments[i].height); - drawPixmap(QRectF(-0.5 * w + xOffset, -0.5 * h + yOffset, w, h), pixmap, sourceRect); + drawPixmap(QRectF(qreal(-0.5) * w + xOffset, qreal(-0.5) * h + yOffset, w, h), pixmap, sourceRect); } setOpacity(oldOpacity); diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp index 1d3f581b88..ca10e6aa68 100644 --- a/src/gui/painting/qrasterizer.cpp +++ b/src/gui/painting/qrasterizer.cpp @@ -51,8 +51,8 @@ QT_BEGIN_NAMESPACE typedef int Q16Dot16; -#define Q16Dot16ToFloat(i) ((i)/65536.) -#define FloatToQ16Dot16(i) (int)((i) * 65536.) +#define Q16Dot16ToFloat(i) ((i)/qreal(65536.)) +#define FloatToQ16Dot16(i) (int)((i) * qreal(65536.)) #define IntToQ16Dot16(i) ((i) << 16) #define Q16Dot16ToInt(i) ((i) >> 16) #define Q16Dot16Factor 65536 @@ -701,7 +701,7 @@ static Q16Dot16 intersectPixelFP(int x, Q16Dot16 top, Q16Dot16 bottom, Q16Dot16 static inline bool q26Dot6Compare(qreal p1, qreal p2) { - return int((p2 - p1) * 64.) == 0; + return int((p2 - p1) * qreal(64.)) == 0; } static inline qreal qFloorF(qreal v) @@ -1210,8 +1210,8 @@ void QRasterizer::rasterize(const QPainterPath &path, Qt::FillRule fillRule) QRectF bounds = path.controlPointRect(); - int iTopBound = qMax(d->clipRect.top(), int(bounds.top() + 0.5 + (COORD_OFFSET - COORD_ROUNDING)/64.)); - int iBottomBound = qMin(d->clipRect.bottom(), int(bounds.bottom() - 0.5 + (COORD_OFFSET - COORD_ROUNDING)/64.)); + int iTopBound = qMax(d->clipRect.top(), int(bounds.top() + qreal(0.5) + (COORD_OFFSET - COORD_ROUNDING)/qreal(64.))); + int iBottomBound = qMin(d->clipRect.bottom(), int(bounds.bottom() - qreal(0.5) + (COORD_OFFSET - COORD_ROUNDING)/qreal(64.))); if (iTopBound > iBottomBound) return; diff --git a/src/gui/painting/qtessellator.cpp b/src/gui/painting/qtessellator.cpp index 94a5128d90..15e4f65469 100644 --- a/src/gui/painting/qtessellator.cpp +++ b/src/gui/painting/qtessellator.cpp @@ -1400,7 +1400,7 @@ void QTessellator::tessellateRect(const QPointF &a_, const QPointF &b_, qreal wi if (delta.x == 0 && delta.y == 0) return; - qreal hw = 0.5 * width; + qreal hw = qreal(0.5) * width; if (delta.x == 0) { Q27Dot5 halfWidth = FloatToQ27Dot5(hw); diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 15ff044977..2a25bff712 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -254,8 +254,9 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi } else #endif { + int depth = widget->x11Info().depth(); const QImage &src = d->image->image; - if (src.format() != QImage::Format_RGB32 || widget->x11Info().depth() < 24) { + if (src.format() != QImage::Format_RGB32 || depth < 24 || X11->bppForDepth.value(depth) != 32) { Q_ASSERT(src.depth() >= 16); const QImage sub_src(src.scanLine(br.y()) + br.x() * (uint(src.depth()) / 8), br.width(), br.height(), src.bytesPerLine(), src.format()); @@ -267,7 +268,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi } else { // qpaintengine_x11.cpp extern void qt_x11_drawImage(const QRect &rect, const QPoint &pos, const QImage &image, Drawable hd, GC gc, Display *dpy, Visual *visual, int depth); - qt_x11_drawImage(br, wpos, src, widget->handle(), d_ptr->gc, X11->display, (Visual *)widget->x11Info().visual(), widget->x11Info().depth()); + qt_x11_drawImage(br, wpos, src, widget->handle(), d_ptr->gc, X11->display, (Visual *)widget->x11Info().visual(), depth); } } diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index eec2d15ca7..59bd0dd657 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1679,7 +1679,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, QS60StylePrivate::drawSkinPart(QS60StyleEnums::SP_QgnGrafBarWaitAnim, painter, progressRect, flags | orientationFlag | QS60StylePrivate::SF_Animation ); } else { - const qreal progressFactor = (optionProgressBar->minimum == optionProgressBar->maximum) ? 1.0 + const qreal progressFactor = (optionProgressBar->minimum == optionProgressBar->maximum) ? qreal(1.0) : (qreal)optionProgressBar->progress / optionProgressBar->maximum; const int frameWidth = pixelMetric(PM_DefaultFrameWidth, option, widget); if (optionProgressBar->orientation == Qt::Horizontal) { @@ -2010,7 +2010,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, if (focusFrame->widget() && focusFrame->widget()->hasEditFocus()) editFocus = true; } - const qreal opacity = editFocus ? 1 : 0.75; // Trial and error factors. Feel free to improve. + const qreal opacity = editFocus ? 1 : qreal(0.75); // Trial and error factors. Feel free to improve. #else const qreal opacity = 0.85; #endif @@ -2148,8 +2148,8 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti case PE_IndicatorRadioButton: { QRect buttonRect = option->rect; //there is empty (a. 33%) space in svg graphics for radiobutton - const qreal reduceWidth = (qreal)buttonRect.width() / 3.0; - const qreal rectWidth = (qreal)option->rect.width() != 0 ? option->rect.width() : 1.0; + const qreal reduceWidth = (qreal)buttonRect.width() / qreal(3.0); + const qreal rectWidth = (qreal)option->rect.width() != 0 ? option->rect.width() : qreal(1.0); // Try to occupy the full area const qreal scaler = 1 + (reduceWidth/rectWidth); buttonRect.setWidth((int)((buttonRect.width()-reduceWidth) * scaler)); diff --git a/src/gui/styles/qstylefactory.cpp b/src/gui/styles/qstylefactory.cpp index 83b67484b8..de693db35b 100644 --- a/src/gui/styles/qstylefactory.cpp +++ b/src/gui/styles/qstylefactory.cpp @@ -225,12 +225,12 @@ QStringList QStyleFactory::keys() #endif #ifndef QT_NO_STYLE_WINDOWSXP if (!list.contains(QLatin1String("WindowsXP")) && - (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) list << QLatin1String("WindowsXP"); #endif #ifndef QT_NO_STYLE_WINDOWSVISTA if (!list.contains(QLatin1String("WindowsVista")) && - (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) list << QLatin1String("WindowsVista"); #endif #ifndef QT_NO_STYLE_MOTIF diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 7d2ed2af8c..c066631c3d 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -1247,20 +1247,20 @@ QPainterPath QRenderRule::borderClip(QRect r) const QRectF rect(r); const int *borders = border()->borders; QPainterPath path; - qreal curY = rect.y() + borders[TopEdge]/2.0; + qreal curY = rect.y() + borders[TopEdge]/qreal(2.0); path.moveTo(rect.x() + tlr.width(), curY); path.lineTo(rect.right() - trr.width(), curY); - qreal curX = rect.right() - borders[RightEdge]/2.0; + qreal curX = rect.right() - borders[RightEdge]/qreal(2.0); path.arcTo(curX - 2*trr.width() + borders[RightEdge], curY, trr.width()*2 - borders[RightEdge], trr.height()*2 - borders[TopEdge], 90, -90); path.lineTo(curX, rect.bottom() - brr.height()); - curY = rect.bottom() - borders[BottomEdge]/2.0; + curY = rect.bottom() - borders[BottomEdge]/qreal(2.0); path.arcTo(curX - 2*brr.width() + borders[RightEdge], curY - 2*brr.height() + borders[BottomEdge], brr.width()*2 - borders[RightEdge], brr.height()*2 - borders[BottomEdge], 0, -90); path.lineTo(rect.x() + blr.width(), curY); - curX = rect.left() + borders[LeftEdge]/2.0; + curX = rect.left() + borders[LeftEdge]/qreal(2.0); path.arcTo(curX, rect.bottom() - 2*blr.height() + borders[BottomEdge]/2, blr.width()*2 - borders[LeftEdge], blr.height()*2 - borders[BottomEdge], 270, -90); @@ -3810,7 +3810,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q if (inverted) reverse = !reverse; const bool indeterminate = pb->minimum == pb->maximum; - qreal fillRatio = indeterminate ? 0.50 : qreal(progress - minimum)/(maximum - minimum); + qreal fillRatio = indeterminate ? qreal(0.50) : qreal(progress - minimum)/(maximum - minimum); int fillWidth = int(rect.width() * fillRatio); int chunkWidth = fillWidth; if (subRule.hasContentsSize()) { diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 9732c7eba9..342c4c6184 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -125,7 +125,7 @@ QWindowsStylePrivate::QWindowsStylePrivate() { #if defined(Q_WS_WIN) && !defined(Q_OS_WINCE) if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) { + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { QSystemLibrary shellLib(QLatin1String("shell32")); pSHGetStockIconInfo = (PtrSHGetStockIconInfo)shellLib.resolve("SHGetStockIconInfo"); } @@ -1058,7 +1058,7 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl case SP_VistaShield: { if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based) && pSHGetStockIconInfo) { QPixmap pixmap; @@ -1200,7 +1200,7 @@ int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWid case SH_LineEdit_PasswordCharacter: { #ifdef Q_WS_WIN - if (widget && (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) { + if (widget && (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { const QFontMetrics &fm = widget->fontMetrics(); if (fm.inFont(QChar(0x25CF))) ret = 0x25CF; @@ -3362,7 +3362,7 @@ QIcon QWindowsStyle::standardIconImplementation(StandardPixmap standardIcon, con case SP_VistaShield: { if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based + && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based) && pSHGetStockIconInfo) { icon.addPixmap(proxy()->standardPixmap(SP_VistaShield, option, widget)); //fetches small icon diff --git a/src/gui/styles/qwindowsvistastyle.cpp b/src/gui/styles/qwindowsvistastyle.cpp index b894eb43a0..997d429add 100644 --- a/src/gui/styles/qwindowsvistastyle.cpp +++ b/src/gui/styles/qwindowsvistastyle.cpp @@ -140,7 +140,7 @@ bool QWindowsVistaStylePrivate::useVista() { return (QWindowsVistaStylePrivate::useXP() && (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && - QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)); + (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))); } /*! diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp index 3c33df3d11..343f262483 100644 --- a/src/gui/styles/qwindowsxpstyle.cpp +++ b/src/gui/styles/qwindowsxpstyle.cpp @@ -791,7 +791,7 @@ void QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa inspectData = (tmt_transparentcolor != 0 || tmt_borderonly || proporigin == PO_PART || proporigin == PO_STATE); // ### This is a vista-specific workaround for broken alpha in titlebar pixmaps - if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) { + if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) { if (themeData.partId == WP_CAPTION || themeData.partId == WP_SMALLCAPTION) inspectData = false; } diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 1d463c47b2..796c455d37 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1994,7 +1994,7 @@ QList<int> QFontDatabase::pointSizes(const QString &family, const QtFontSize *size = style->pixelSizes + l; if (size->pixelSize != 0 && size->pixelSize != USHRT_MAX) { - const uint pointSize = qRound(size->pixelSize * 72.0 / dpi); + const uint pointSize = qRound(size->pixelSize * qreal(72.0) / dpi); if (! sizes.contains(pointSize)) sizes.append(pointSize); } @@ -2105,7 +2105,7 @@ QList<int> QFontDatabase::smoothSizes(const QString &family, const QtFontSize *size = style->pixelSizes + l; if (size->pixelSize != 0 && size->pixelSize != USHRT_MAX) { - const uint pointSize = qRound(size->pixelSize * 72.0 / dpi); + const uint pointSize = qRound(size->pixelSize * qreal(72.0) / dpi); if (! sizes.contains(pointSize)) sizes.append(pointSize); } diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index c9b672bb89..8f46a805cc 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -381,9 +381,9 @@ void QFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rig glyph_metrics_t gi = boundingBox(glyph); bool isValid = gi.isValid(); if (leftBearing != 0) - *leftBearing = isValid ? gi.x.toReal() : 0.0; + *leftBearing = isValid ? gi.x.toReal() : qreal(0.0); if (rightBearing != 0) - *rightBearing = isValid ? (gi.xoff - gi.x - gi.width).toReal() : 0.0; + *rightBearing = isValid ? (gi.xoff - gi.x - gi.width).toReal() : qreal(0.0); } glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index e20aa2556b..d00a04814c 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -801,7 +801,7 @@ int QFontEngineFT::loadFlags(QGlyphSet *set, GlyphFormat format, int flags, if (set && set->outline_drawing) load_flags = FT_LOAD_NO_BITMAP; - if (default_hint_style == HintNone || (flags & HB_ShaperFlag_UseDesignMetrics) || set->outline_drawing) + if (default_hint_style == HintNone || (flags & HB_ShaperFlag_UseDesignMetrics) || (set && set->outline_drawing)) load_flags |= FT_LOAD_NO_HINTING; else load_flags |= load_target; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 143dc1ab8c..de2e27ad2e 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -159,7 +159,7 @@ bool Qt::mightBeRichText(const QString& text) QString Qt::escape(const QString& plain) { QString rich; - rich.reserve(int(plain.length() * 1.1)); + rich.reserve(int(plain.length() * qreal(1.1))); for (int i = 0; i < plain.length(); ++i) { if (plain.at(i) == QLatin1Char('<')) rich += QLatin1String("<"); diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index d58da37974..0af2e59c54 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -445,6 +445,8 @@ void QLineControl::moveCursor(int pos, bool mark) void QLineControl::processInputMethodEvent(QInputMethodEvent *event) { int priorState = 0; + int originalSelectionStart = m_selstart; + int originalSelectionEnd = m_selend; bool isGettingInput = !event->commitString().isEmpty() || event->preeditString() != preeditAreaText() || event->replacementLength() > 0; @@ -523,6 +525,8 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) } m_textLayout.setAdditionalFormats(formats); updateDisplayText(/*force*/ true); + if (originalSelectionStart != m_selstart || originalSelectionEnd != m_selend) + emit selectionChanged(); if (cursorPositionChanged) emitCursorPositionChanged(); else if (m_preeditCursor != oldPreeditCursor) diff --git a/src/gui/widgets/qprogressbar.cpp b/src/gui/widgets/qprogressbar.cpp index dd92bda993..1b0a1a118c 100644 --- a/src/gui/widgets/qprogressbar.cpp +++ b/src/gui/widgets/qprogressbar.cpp @@ -462,7 +462,7 @@ QString QProgressBar::text() const return result; } - int progress = (qreal(d->value) - d->minimum) * 100.0 / totalSteps; + int progress = (qreal(d->value) - d->minimum) * qreal(100.0) / totalSteps; result.replace(QLatin1String("%p"), QString::number(progress)); return result; } diff --git a/src/gui/widgets/qtextbrowser.cpp b/src/gui/widgets/qtextbrowser.cpp index cd8fa117b7..e786c5cef9 100644 --- a/src/gui/widgets/qtextbrowser.cpp +++ b/src/gui/widgets/qtextbrowser.cpp @@ -619,7 +619,8 @@ void QTextBrowserPrivate::restoreHistoryEntry(const HistoryEntry entry) If you want to load documents stored in the Qt resource system use \c{qrc} as the scheme in the URL to load. For example, for the document resource path \c{:/docs/index.html} use \c{qrc:/docs/index.html} as - the URL with setSource(). + the URL with setSource(). To access local files, use \c{file} as the + scheme in the URL. \sa QTextEdit, QTextDocument */ diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp index e0e8ce603a..c7ae73fe79 100644 --- a/src/gui/widgets/qtoolbar.cpp +++ b/src/gui/widgets/qtoolbar.cpp @@ -440,7 +440,7 @@ void QToolBarPrivate::plug(const QRect &r) pop up a menu containing the items that does not currently fit in the toolbar. - When a QToolBar is not a child of a QMainWindow, it looses the ability + When a QToolBar is not a child of a QMainWindow, it loses the ability to populate the extension pop up with widgets added to the toolbar using addWidget(). Please use widget actions created by inheriting QWidgetAction and implementing QWidgetAction::createWidget() instead. diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 1a02200572..6173b39ff9 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -891,7 +891,7 @@ bool QHttpNetworkReplyPrivate::expectContent() || statusCode == 204 || statusCode == 304) return false; if (request.operation() == QHttpNetworkRequest::Head) - return !shouldEmitSignals(); + return false; // no body expected for HEAD request qint64 expectedContentLength = contentLength(); if (expectedContentLength == 0) return false; diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 2fae7d6624..88c45d197b 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -57,20 +57,25 @@ QT_BEGIN_NAMESPACE -static bool factoryDataShutdown = false; class QNetworkAccessBackendFactoryData: public QList<QNetworkAccessBackendFactory *> { public: - QNetworkAccessBackendFactoryData() : mutex(QMutex::Recursive) { } + QNetworkAccessBackendFactoryData() : mutex(QMutex::Recursive) + { + valid.ref(); + } ~QNetworkAccessBackendFactoryData() { QMutexLocker locker(&mutex); // why do we need to lock? - factoryDataShutdown = true; + valid.deref(); } QMutex mutex; + //this is used to avoid (re)constructing factory data from destructors of other global classes + static QAtomicInt valid; }; Q_GLOBAL_STATIC(QNetworkAccessBackendFactoryData, factoryData) +QAtomicInt QNetworkAccessBackendFactoryData::valid; QNetworkAccessBackendFactory::QNetworkAccessBackendFactory() { @@ -80,7 +85,7 @@ QNetworkAccessBackendFactory::QNetworkAccessBackendFactory() QNetworkAccessBackendFactory::~QNetworkAccessBackendFactory() { - if (!factoryDataShutdown) { + if (QNetworkAccessBackendFactoryData::valid) { QMutexLocker locker(&factoryData()->mutex); factoryData()->removeAll(this); } @@ -89,7 +94,7 @@ QNetworkAccessBackendFactory::~QNetworkAccessBackendFactory() QNetworkAccessBackend *QNetworkAccessManagerPrivate::findBackend(QNetworkAccessManager::Operation op, const QNetworkRequest &request) { - if (!factoryDataShutdown) { + if (QNetworkAccessBackendFactoryData::valid) { QMutexLocker locker(&factoryData()->mutex); QNetworkAccessBackendFactoryData::ConstIterator it = factoryData()->constBegin(), end = factoryData()->constEnd(); diff --git a/src/network/access/qnetworkaccessbackend_p.h b/src/network/access/qnetworkaccessbackend_p.h index ff0530633f..7f6aff9b79 100644 --- a/src/network/access/qnetworkaccessbackend_p.h +++ b/src/network/access/qnetworkaccessbackend_p.h @@ -110,9 +110,7 @@ public: // socket). virtual void open() = 0; -#ifndef QT_NO_BEARERMANAGEMENT virtual bool start(); -#endif virtual void closeDownstreamChannel() = 0; // slot-like: diff --git a/src/network/access/qnetworkcookie.cpp b/src/network/access/qnetworkcookie.cpp index 06707385fb..a9bb318295 100644 --- a/src/network/access/qnetworkcookie.cpp +++ b/src/network/access/qnetworkcookie.cpp @@ -372,7 +372,7 @@ static QPair<QByteArray, QByteArray> nextField(const QByteArray &text, int &posi // parse the first part, before the equal sign for (i = position; i < length; ++i) { register char c = text.at(i); - if (c == ';' || c == ',' || c == '=') + if (c == ';' || c == '=') break; } @@ -423,7 +423,7 @@ static QPair<QByteArray, QByteArray> nextField(const QByteArray &text, int &posi for ( ; i < length; ++i) { register char c = text.at(i); - if (c == ',' || c == ';') + if (c == ';') break; } position = i; @@ -434,7 +434,7 @@ static QPair<QByteArray, QByteArray> nextField(const QByteArray &text, int &posi register char c = text.at(i); // for name value pairs, we want to parse until reaching the next ';' // and not break when reaching a space char - if (c == ',' || c == ';' || ((isNameValue && (c == '\n' || c == '\r')) || (!isNameValue && isLWS(c)))) + if (c == ';' || ((isNameValue && (c == '\n' || c == '\r')) || (!isNameValue && isLWS(c)))) break; } @@ -461,8 +461,7 @@ static QPair<QByteArray, QByteArray> nextField(const QByteArray &text, int &posi \value Full makes toRawForm() return the full cookie contents, as suitable for sending to a client in a - server's "Set-Cookie:" header. Multiple cookies are separated - by commas in a "Set-Cookie:" header. + server's "Set-Cookie:" header. Note that only the Full form of the cookie can be parsed back into its original contents. @@ -488,7 +487,6 @@ QByteArray QNetworkCookie::toRawForm(RawForm form) const result = d->name; result += '='; if ((d->value.contains(';') || - d->value.contains(',') || d->value.contains('"')) && (!d->value.startsWith('"') && !d->value.endsWith('"'))) { @@ -967,14 +965,8 @@ QList<QNetworkCookie> QNetworkCookiePrivate::parseSetCookieHeaderLine(const QByt cookie.setValue(field.second); position = nextNonWhitespace(cookieString, position); - bool endOfCookie = false; - while (!endOfCookie && position < length) { + while (position < length) { switch (cookieString.at(position++)) { - case ',': - // end of the cookie - endOfCookie = true; - break; - case ';': // new field in the cookie field = nextField(cookieString, position, false); diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 0b568d4d24..6f2daecdf0 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -471,6 +471,7 @@ bool QNetworkReplyImplPrivate::isCachingEnabled() const void QNetworkReplyImplPrivate::setCachingEnabled(bool enable) { + Q_Q(QNetworkReplyImpl); if (!enable && !cacheEnabled) return; // nothing to do if (enable && cacheEnabled) @@ -493,15 +494,27 @@ void QNetworkReplyImplPrivate::setCachingEnabled(bool enable) networkCache()->remove(url); cacheSaveDevice = 0; cacheEnabled = false; + QObject::disconnect(networkCache(), SIGNAL(destroyed()), q, SLOT(_q_cacheDestroyed())); } } +void QNetworkReplyImplPrivate::_q_cacheDestroyed() +{ + //destruction of cache invalidates cacheSaveDevice + cacheSaveDevice = 0; + cacheEnabled = false; +} + void QNetworkReplyImplPrivate::completeCacheSave() { - if (cacheEnabled && errorCode != QNetworkReplyImpl::NoError) { - networkCache()->remove(url); - } else if (cacheEnabled && cacheSaveDevice) { - networkCache()->insert(cacheSaveDevice); + Q_Q(QNetworkReplyImpl); + if (cacheEnabled) { + if (errorCode != QNetworkReplyImpl::NoError) { + networkCache()->remove(url); + } else if (cacheSaveDevice) { + networkCache()->insert(cacheSaveDevice); + } + QObject::disconnect(networkCache(), SIGNAL(destroyed()), q, SLOT(_q_cacheDestroyed())); } cacheSaveDevice = 0; cacheEnabled = false; @@ -561,6 +574,8 @@ void QNetworkReplyImplPrivate::initCacheSaveDevice() networkCache()->remove(url); cacheSaveDevice = 0; cacheEnabled = false; + } else { + q->connect(networkCache(), SIGNAL(destroyed()), SLOT(_q_cacheDestroyed())); } } diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index 089c87e693..286d8eaf5e 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -104,6 +104,7 @@ public: Q_PRIVATE_SLOT(d_func(), void _q_networkSessionConnected()) Q_PRIVATE_SLOT(d_func(), void _q_networkSessionFailed()) #endif + Q_PRIVATE_SLOT(d_func(), void _q_cacheDestroyed()) }; class QNetworkReplyImplPrivate: public QNetworkReplyPrivate @@ -140,6 +141,7 @@ public: void _q_networkSessionConnected(); void _q_networkSessionFailed(); #endif + void _q_cacheDestroyed(); void setup(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData); diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index 18e29afd7a..96a534d60d 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -60,7 +60,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, #endif QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() - : QObject(), pollTimer(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) + : QObject(), pollTimer(0), bearerThread(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) { qRegisterMetaType<QNetworkConfiguration>("QNetworkConfiguration"); qRegisterMetaType<QNetworkConfigurationPrivatePointer>("QNetworkConfigurationPrivatePointer"); diff --git a/src/network/kernel/qhostinfo_win.cpp b/src/network/kernel/qhostinfo_win.cpp index 6fc5b7bd24..10528634db 100644 --- a/src/network/kernel/qhostinfo_win.cpp +++ b/src/network/kernel/qhostinfo_win.cpp @@ -97,14 +97,15 @@ static void resolveLibrary() #if defined(Q_OS_WINCE) #include <qmutex.h> -QMutex qPrivCEMutex; +Q_GLOBAL_STATIC(QMutex, qPrivCEMutex) #endif QHostInfo QHostInfoAgent::fromName(const QString &hostName) { #if defined(Q_OS_WINCE) - QMutexLocker locker(&qPrivCEMutex); + QMutexLocker locker(qPrivCEMutex()); #endif + QWindowsSockInit winSock; // Load res_init on demand. diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index cedccaa69b..423fa08a1f 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -103,6 +103,7 @@ #ifdef Q_OS_SYMBIAN #include <private/qgltexturepool_p.h> +#include <private/qeglcontext_p.h> #endif // #define QT_GL_CONTEXT_RESOURCE_DEBUG @@ -3432,8 +3433,25 @@ const QGLContext* QGLContext::currentContext() return 0; #else QGLThreadContext *threadContext = qgl_context_storage.localData(); - if (threadContext) + if (threadContext) { +#ifdef Q_OS_SYMBIAN + // Query the current context and return null if it is different. + // This is needed to support mixed VG-GL rendering. + // QtOpenVG is free to make a QEglContext current at any time and + // QGLContext gets no notification that its underlying QEglContext is + // not current anymore. We query directly from EGL to be thread-safe. + // QEglContext does not store all the contexts per-thread. + if (threadContext->context) { + QEglContext *eglcontext = threadContext->context->d_func()->eglContext; + if (eglcontext) { + EGLContext ctx = eglcontext->context(); + if (ctx != eglGetCurrentContext()) + return 0; + } + } +#endif return threadContext->context; + } return 0; #endif //Q_WS_QPA } diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index be0929543b..34375020ff 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -4879,4 +4879,9 @@ EXPORTS ?languageId@QLocalePrivate@@QBEGXZ @ 4878 NONAME ; unsigned short QLocalePrivate::languageId(void) const ?started@QFutureWatcherBase@@IAEXXZ @ 4879 NONAME ; void QFutureWatcherBase::started(void) ?staticMetaObjectExtraData@QAbstractState@@0UQMetaObjectExtraData@@B @ 4880 NONAME ; struct QMetaObjectExtraData const QAbstractState::staticMetaObjectExtraData + ?rebuildInstallLibraryPaths@QCoreApplicationPrivate@@SAXXZ @ 4881 NONAME ; void QCoreApplicationPrivate::rebuildInstallLibraryPaths(void) + ?connectNotify@QFutureWatcherBase@@MAEXPBD@Z @ 4882 NONAME ; void QFutureWatcherBase::connectNotify(char const *) + ?event@QFutureWatcherBase@@UAE_NPAVQEvent@@@Z @ 4883 NONAME ; bool QFutureWatcherBase::event(class QEvent *) + ?updateDir@QFactoryLoader@@QAEXABVQString@@AAVQSettings@@@Z @ 4884 NONAME ; void QFactoryLoader::updateDir(class QString const &, class QSettings &) + ?disconnectNotify@QFutureWatcherBase@@MAEXPBD@Z @ 4885 NONAME ; void QFutureWatcherBase::disconnectNotify(char const *) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 16de776c58..335b94f3f1 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -13983,4 +13983,7 @@ EXPORTS ?qt_static_metacall@QShortcut@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13982 NONAME ; void QShortcut::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?endOfLine@QTextEngine@@AAEHH@Z @ 13983 NONAME ; int QTextEngine::endOfLine(int) ?queryKeyboardModifiers@QApplication@@SA?AV?$QFlags@W4KeyboardModifier@Qt@@@@XZ @ 13984 NONAME ; class QFlags<enum Qt::KeyboardModifier> QApplication::queryKeyboardModifiers(void) + ?resetFontEngineCache@QTextEngine@@QAEXXZ @ 13985 NONAME ; void QTextEngine::resetFontEngineCache(void) + ?symbianHandleLiteModeStartup@QApplicationPrivate@@QAEXXZ @ 13986 NONAME ; void QApplicationPrivate::symbianHandleLiteModeStartup(void) + ?_q_cleanupWinIds@QWidgetPrivate@@QAEXXZ @ 13987 NONAME ; void QWidgetPrivate::_q_cleanupWinIds(void) diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index cf42b679d3..1fabdb295e 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -4162,4 +4162,6 @@ EXPORTS inflateReset2 @ 4161 NONAME inflateUndermine @ 4162 NONAME zlibCompileFlags @ 4163 NONAME + _ZN14QFactoryLoader9updateDirERK7QStringR9QSettings @ 4164 NONAME + _ZN23QCoreApplicationPrivate26rebuildInstallLibraryPathsEv @ 4165 NONAME diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 4133773ccf..3606f9cb98 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12796,4 +12796,7 @@ EXPORTS _ZTV20QBlittablePixmapData @ 12795 NONAME _Zls6QDebugPK13QSymbianEvent @ 12796 NONAME _ZN12QApplication22queryKeyboardModifiersEv @ 12797 NONAME + _ZN11QTextEngine20resetFontEngineCacheEv @ 12798 NONAME + _ZN14QWidgetPrivate16_q_cleanupWinIdsEv @ 12799 NONAME + _ZN19QApplicationPrivate28symbianHandleLiteModeStartupEv @ 12800 NONAME diff --git a/src/s60installs/qt_resources.iby b/src/s60installs/qt_resources.iby new file mode 100644 index 0000000000..f5fe1c4c20 --- /dev/null +++ b/src/s60installs/qt_resources.iby @@ -0,0 +1,11 @@ +#ifndef QT_RESOURCES_IBY +#define QT_RESOURCES_IBY + +#include <data_caging_paths_for_iby.hrh> + +// Localisation files + +data=DATAZ_\QT_TRANSLATIONS_DIR\qt.qm QT_TRANSLATIONS_DIR\qt.qm + +#endif // __QT_RESOURCES_IBY__ + diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index c2b462c313..08c4829462 100755 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -175,4 +175,5 @@ symbian: { } BLD_INF_RULES.prj_exports += "$$S60_INSTALLS_SOURCE_DIR/qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)" + BLD_INF_RULES.prj_exports += "$$S60_INSTALLS_SOURCE_DIR/qt_resources.iby $$LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(qt_resources.iby)" } diff --git a/src/sql/drivers/symsql/qsql_symsql.cpp b/src/sql/drivers/symsql/qsql_symsql.cpp index 4ceac9b67b..f34212c2da 100644 --- a/src/sql/drivers/symsql/qsql_symsql.cpp +++ b/src/sql/drivers/symsql/qsql_symsql.cpp @@ -217,7 +217,7 @@ void QSymSQLResultPrivate::initColumns(QSqlRecord& rec) int nCols = stmt.ColumnCount(); if (nCols <= 0) { q->setLastError(qMakeError(access, QCoreApplication::translate("QSymSQLResult", - "Error retreving column count"), QSqlError::UnknownError, nCols)); + "Error retrieving column count"), QSqlError::UnknownError, nCols)); return; } @@ -227,7 +227,7 @@ void QSymSQLResultPrivate::initColumns(QSqlRecord& rec) if (err != KErrNone) { q->setLastError(qMakeError(access, QCoreApplication::translate("QSymSQLResult", - "Error retreving column name"), QSqlError::UnknownError, err)); + "Error retrieving column name"), QSqlError::UnknownError, err)); return; } @@ -240,7 +240,7 @@ void QSymSQLResultPrivate::initColumns(QSqlRecord& rec) if (err != KErrNone) { q->setLastError(qMakeError(access, QCoreApplication::translate("QSymSQLResult", - "Error retreving column type"), QSqlError::UnknownError, err)); + "Error retrieving column type"), QSqlError::UnknownError, err)); return; } diff --git a/src/xmlpatterns/api/qxmlquery.cpp b/src/xmlpatterns/api/qxmlquery.cpp index e69fe508d8..e5e901d315 100644 --- a/src/xmlpatterns/api/qxmlquery.cpp +++ b/src/xmlpatterns/api/qxmlquery.cpp @@ -988,7 +988,12 @@ bool setFocusHelper(QXmlQuery *const queryInstance, const QXmlItem focusItem(focusResult.next()); if(focusItem.isNull() || focusResult.hasError()) + { + /* The previous focus must be cleared in error situations. + * Otherwise the query may be left in an inconsistent state. */ + queryInstance->setFocus(QXmlItem()); return false; + } else { queryInstance->setFocus(focusItem); diff --git a/src/xmlpatterns/functions/qsequencegeneratingfns.cpp b/src/xmlpatterns/functions/qsequencegeneratingfns.cpp index 6215f3d449..3f3dbbb96a 100644 --- a/src/xmlpatterns/functions/qsequencegeneratingfns.cpp +++ b/src/xmlpatterns/functions/qsequencegeneratingfns.cpp @@ -41,6 +41,7 @@ #include <QStack> #include <QStringList> +#include <QFileInfo> #include "qanyuri_p.h" #include "qboolean_p.h" @@ -207,6 +208,21 @@ Item::Iterator::Ptr IdrefFN::evaluateSequence(const DynamicContext::Ptr &context return CommonValues::emptyIterator; /* TODO Haven't implemented further. */ } +/*! + * Attemps to resolve scheme if URL does not have scheme defined. + */ +static QUrl resolveScheme(const QUrl &url) +{ + // On Windows and Symbian the drive letter is detected as the scheme. + if (url.scheme().isEmpty() || (url.scheme().length() == 1)) { + QString filename = url.toString(); + QFileInfo file(filename); + if (file.exists()) + return QUrl::fromLocalFile(filename); + } + return url; +} + Item DocFN::evaluateSingleton(const DynamicContext::Ptr &context) const { const Item itemURI(m_operands.first()->evaluateSingleton(context)); @@ -219,7 +235,7 @@ Item DocFN::evaluateSingleton(const DynamicContext::Ptr &context) const * as part of a workaround for solaris-cc-64. DocFN::typeCheck() is in qsequencefns.cpp * as part of that workaround. */ const QUrl mayRela(AnyURI::toQUrl<ReportContext::FODC0005>(itemURI.stringValue(), context, this)); - const QUrl uri(context->resolveURI(mayRela, staticBaseURI())); + const QUrl uri(resolveScheme(context->resolveURI(mayRela, staticBaseURI()))); Q_ASSERT(uri.isValid()); Q_ASSERT(!uri.isRelative()); @@ -251,7 +267,7 @@ bool DocAvailableFN::evaluateEBV(const DynamicContext::Ptr &context) const /* These two lines are duplicated in DocFN::evaluateSingleton(), as part * of a workaround for solaris-cc-64. */ const QUrl mayRela(AnyURI::toQUrl<ReportContext::FODC0005>(itemURI.stringValue(), context, this)); - const QUrl uri(context->resolveURI(mayRela, staticBaseURI())); + const QUrl uri(resolveScheme(context->resolveURI(mayRela, staticBaseURI()))); Q_ASSERT(!uri.isRelative()); return context->resourceLoader()->isDocumentAvailable(uri); diff --git a/src/xmlpatterns/schema/qxsdtypechecker.cpp b/src/xmlpatterns/schema/qxsdtypechecker.cpp index fb47448691..e5709ae4b2 100644 --- a/src/xmlpatterns/schema/qxsdtypechecker.cpp +++ b/src/xmlpatterns/schema/qxsdtypechecker.cpp @@ -57,6 +57,7 @@ #include "qxsdschemahelper_p.h" #include "qxsdschemamerger_p.h" #include "qxsdstatemachine_p.h" +#include "qabstractfloat_p.h" #include "qxsdschemadebugger_p.h" @@ -697,7 +698,8 @@ bool XsdTypeChecker::checkConstrainingFacetsDouble(double value, const QString & } if (facets.contains(XsdFacet::Enumeration)) { const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); - const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, QString::number(value)); + const Numeric::Ptr valuePtr = Double::fromValue(value); + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, valuePtr->stringValue()); const AtomicValue::List multiValue = facet->multiValue(); bool found = false; @@ -706,6 +708,13 @@ bool XsdTypeChecker::checkConstrainingFacetsDouble(double value, const QString & found = true; break; } + + // Handle case when both facet and value are NaN separately as equals for NaN returns always false. + const Numeric::Ptr facetValue = ValueFactory::fromLexical(multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsDouble, m_context, m_reflection); + if (facetValue->isNaN() && valuePtr->isNaN()) { + found = true; + break; + } } if (!found) { diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 72c32cb858..08d59d344d 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -39,6 +39,7 @@ contains(QT_CONFIG, private_tests) { qdeclarativedebug \ qdeclarativedebugclient \ qdeclarativedebugservice \ + qdeclarativedebugjs \ qdeclarativedom \ qdeclarativeecmascript \ qdeclarativeflickable \ diff --git a/tests/auto/declarative/qdeclarativedebug/qdeclarativedebug.pro b/tests/auto/declarative/qdeclarativedebug/qdeclarativedebug.pro index 1214fcf8fb..d488b53c57 100644 --- a/tests/auto/declarative/qdeclarativedebug/qdeclarativedebug.pro +++ b/tests/auto/declarative/qdeclarativedebug/qdeclarativedebug.pro @@ -6,5 +6,5 @@ HEADERS += ../shared/debugutil_p.h SOURCES += tst_qdeclarativedebug.cpp \ ../shared/debugutil.cpp -CONFIG += parallel_test +CONFIG += parallel_test declarative_debug diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp index 9c20bd69b7..be9b4020dd 100644 --- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp +++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp @@ -52,14 +52,12 @@ #include <QtDeclarative/qdeclarativeproperty.h> #include <private/qdeclarativebinding_p.h> -#include <private/qdeclarativedebug_p.h> #include <private/qdeclarativeenginedebug_p.h> #include <private/qdeclarativedebugclient_p.h> #include <private/qdeclarativedebugservice_p.h> #include <private/qdeclarativerectangle_p.h> #include <private/qdeclarativemetatype_p.h> #include <private/qdeclarativeproperty_p.h> -#include <private/qdeclarativedebughelper_p.h> #include "../../../shared/util.h" #include "../shared/debugutil_p.h" @@ -296,9 +294,6 @@ void tst_QDeclarativeDebug::initTestCase() qRegisterMetaType<QDeclarativeDebugWatch::State>(); qmlRegisterType<NonScriptProperty>("Test", 1, 0, "NonScriptPropertyElement"); - QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!"); - QDeclarativeDebugHelper::enableDebugging(); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768..."); m_engine = new QDeclarativeEngine(this); diff --git a/tests/auto/declarative/qdeclarativedebugclient/qdeclarativedebugclient.pro b/tests/auto/declarative/qdeclarativedebugclient/qdeclarativedebugclient.pro index a3afd990a7..8fa87d2926 100644 --- a/tests/auto/declarative/qdeclarativedebugclient/qdeclarativedebugclient.pro +++ b/tests/auto/declarative/qdeclarativedebugclient/qdeclarativedebugclient.pro @@ -5,3 +5,5 @@ macx:CONFIG -= app_bundle HEADERS += ../shared/debugutil_p.h SOURCES += tst_qdeclarativedebugclient.cpp \ ../shared/debugutil.cpp + +CONFIG += declarative_debug diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp index d41cfa3d4d..4846d67800 100644 --- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp +++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp @@ -47,11 +47,7 @@ #include <QtDeclarative/qdeclarativeengine.h> -#include <private/qdeclarativedebug_p.h> -#include <private/qdeclarativeenginedebug_p.h> #include <private/qdeclarativedebugclient_p.h> -#include <private/qdeclarativedebugservice_p.h> -#include <private/qdeclarativedebughelper_p.h> #include "../../../shared/util.h" #include "../shared/debugutil_p.h" @@ -73,9 +69,6 @@ private slots: void tst_QDeclarativeDebugClient::initTestCase() { - QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!"); - QDeclarativeDebugHelper::enableDebugging(); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 13770..."); new QDeclarativeEngine(this); diff --git a/tests/auto/declarative/qdeclarativedebugjs/app/app.pro b/tests/auto/declarative/qdeclarativedebugjs/app/app.pro index 800c033f37..d1c0cddf51 100644 --- a/tests/auto/declarative/qdeclarativedebugjs/app/app.pro +++ b/tests/auto/declarative/qdeclarativedebugjs/app/app.pro @@ -1,6 +1,7 @@ TEMPLATE = app QT += declarative +CONFIG += declarative_debug CONFIG += console CONFIG -= app_bundle diff --git a/tests/auto/declarative/qdeclarativedebugjs/app/main.cpp b/tests/auto/declarative/qdeclarativedebugjs/app/main.cpp index f5b830efef..fe58502f66 100644 --- a/tests/auto/declarative/qdeclarativedebugjs/app/main.cpp +++ b/tests/auto/declarative/qdeclarativedebugjs/app/main.cpp @@ -44,13 +44,10 @@ #include <QDeclarativeComponent> #include <QDeclarativeEngine> #include <QStringList> -#include <QtDeclarative/private/qdeclarativedebughelper_p.h> #include <QtDeclarative/private/qdeclarativedebugservice_p.h> int main(int argc, char *argv[]) { - QDeclarativeDebugHelper::enableDebugging(); - QApplication app(argc, argv); const QUrl path = QUrl::fromLocalFile(app.arguments().last()); diff --git a/tests/auto/declarative/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp b/tests/auto/declarative/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp index 1990c0d67f..bad7b8f42f 100644 --- a/tests/auto/declarative/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp +++ b/tests/auto/declarative/qdeclarativedebugjs/tst_qdeclarativedebugjs.cpp @@ -43,7 +43,6 @@ #include <QtDeclarative/QDeclarativeEngine> #include <QtDeclarative/private/qdeclarativedebugclient_p.h> #include <QtDeclarative/private/qdeclarativedebugservice_p.h> -#include <QtDeclarative/private/qdeclarativedebug_p.h> #include <QtDeclarative/private/qjsdebuggeragent_p.h> #include <QtCore/QFileInfo> #include <QtCore/QDir> @@ -1431,8 +1430,10 @@ void tst_QDeclarativeDebugJS::testCoverageRun() client.startCoverageRun(); client.startCoverageCompleted(); - QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coverageScriptLoaded()))); - QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coveragePosChanged()))); + + // The app might get "COVERAGE false" before anything is actually executed + //QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coverageScriptLoaded()))); + //QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coveragePosChanged()))); //QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coverageFuncEntered()))); //QVERIFY(QDeclarativeDebugTest::waitForSignal(&client, SIGNAL(coverageFuncExited()))); } diff --git a/tests/auto/declarative/qdeclarativedebugservice/qdeclarativedebugservice.pro b/tests/auto/declarative/qdeclarativedebugservice/qdeclarativedebugservice.pro index a62e148def..ca5a39886d 100644 --- a/tests/auto/declarative/qdeclarativedebugservice/qdeclarativedebugservice.pro +++ b/tests/auto/declarative/qdeclarativedebugservice/qdeclarativedebugservice.pro @@ -6,5 +6,5 @@ HEADERS += ../shared/debugutil_p.h SOURCES += tst_qdeclarativedebugservice.cpp \ ../shared/debugutil.cpp -CONFIG += parallel_test +CONFIG += parallel_test declarative_debug diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp index 3fa8bba682..85d459b92a 100644 --- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp +++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp @@ -46,10 +46,7 @@ #include <QThread> #include <QtDeclarative/qdeclarativeengine.h> -#include <private/qdeclarativedebughelper_p.h> -#include <private/qdeclarativedebug_p.h> -#include <private/qdeclarativeenginedebug_p.h> #include <private/qdeclarativedebugclient_p.h> #include <private/qdeclarativedebugservice_p.h> @@ -76,9 +73,6 @@ private slots: void tst_QDeclarativeDebugService::initTestCase() { - QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!"); - QDeclarativeDebugHelper::enableDebugging(); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 13769..."); new QDeclarativeEngine(this); diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp index 2cc297171c..96bea68fca 100644 --- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp +++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp @@ -43,6 +43,7 @@ #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecomponent.h> #include <QDebug> +#include <QtCore/qlibraryinfo.h> #include "../shared/testhttpserver.h" #include "../../../shared/util.h" @@ -70,6 +71,7 @@ private slots: void remoteImportWithUnquotedUri(); void versionNotInstalled(); void versionNotInstalled_data(); + void importPath(); }; #ifdef Q_OS_SYMBIAN @@ -308,6 +310,29 @@ void tst_qdeclarativemoduleplugin::versionNotInstalled() VERIFY_ERRORS(errorFile.toLatin1().constData()); } +void tst_qdeclarativemoduleplugin::importPath() +{ +#ifndef Q_OS_SYMBIAN + QSKIP("Import path order testing for Symbian only", SkipAll); +#else + QDeclarativeEngine engine; + QStringList imports = engine.importPathList(); + QString installImportsPath = QDir::cleanPath(QLibraryInfo::location(QLibraryInfo::ImportsPath)); + QString driveOrder(QLatin1String("ZABCDEFGHIJKLMNOPQRSTUVWXY")); + int lastOrder = 30; + foreach(QString import, imports) + { + if (import.endsWith(installImportsPath)) + { + int order = driveOrder.indexOf(import[0]); + QVERIFY(order < lastOrder); + lastOrder = order; + } + } + QVERIFY(lastOrder != 30); +#endif +} + QTEST_MAIN(tst_qdeclarativemoduleplugin) #include "tst_qdeclarativemoduleplugin.moc" diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 33f74a9adf..4d8bd0b6e4 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -156,6 +156,7 @@ private slots: void inputContextMouseHandler(); void inputMethodComposing(); void cursorRectangleSize(); + void deselect(); private: void simulateKey(QDeclarativeView *, int key, Qt::KeyboardModifiers modifiers = 0); @@ -2699,6 +2700,120 @@ void tst_qdeclarativetextedit::cursorRectangleSize() QCOMPARE(microFocusFromScene.size(), cursorRect.size()); QCOMPARE(microFocusFromApp.size(), cursorRect.size()); } + +void tst_qdeclarativetextedit::deselect() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/CursorRect.qml"); + QVERIFY(canvas->rootObject() != 0); + canvas->show(); + canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + + QDeclarativeTextEdit *textEdit = qobject_cast<QDeclarativeTextEdit *>(canvas->rootObject()); + QVERIFY(textEdit != 0); + + textEdit->setText("Select"); + + QSignalSpy selectionStartSpy(textEdit, SIGNAL(selectionStartChanged())); + QSignalSpy selectionEndSpy(textEdit, SIGNAL(selectionEndChanged())); + QSignalSpy selectionSpy(textEdit, SIGNAL(selectionChanged())); + + textEdit->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 1); + QCOMPARE(selectionEndSpy.count(), 1); + QCOMPARE(selectionSpy.count(), 1); + QCOMPARE(textEdit->selectionStart(), 5); + QCOMPARE(textEdit->selectionEnd(), 6); + QCOMPARE(textEdit->selectedText(), QLatin1String("t")); + QCOMPARE(textEdit->cursorPosition(), 6); + + textEdit->deselect(); + + QCOMPARE(selectionStartSpy.count(), 2); + QCOMPARE(selectionEndSpy.count(), 1); + QCOMPARE(selectionSpy.count(), 2); + QCOMPARE(textEdit->selectionStart(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectionEnd(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectedText(), QLatin1String("")); + QCOMPARE(textEdit->cursorPosition(), 6); + + textEdit->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 3); + QCOMPARE(selectionEndSpy.count(), 1); + QCOMPARE(selectionSpy.count(), 3); + QCOMPARE(textEdit->selectionStart(), 5); + QCOMPARE(textEdit->selectionEnd(), 6); + QCOMPARE(textEdit->selectedText(), QLatin1String("t")); + QCOMPARE(textEdit->cursorPosition(), 6); + + QKeyEvent leftArrowPress(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); + QKeyEvent leftArrowRelese(QEvent::KeyRelease, Qt::Key_Left, Qt::NoModifier); + QApplication::sendEvent(canvas, &leftArrowPress); + QApplication::sendEvent(canvas, &leftArrowRelese); + + QCOMPARE(selectionStartSpy.count(), 3); + QCOMPARE(selectionEndSpy.count(), 2); + QCOMPARE(selectionSpy.count(), 4); + QCOMPARE(textEdit->selectionStart(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectionEnd(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectedText(), QLatin1String("")); + QCOMPARE(textEdit->cursorPosition(), 5); + + textEdit->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 3); + QCOMPARE(selectionEndSpy.count(), 3); + QCOMPARE(selectionSpy.count(), 5); + QCOMPARE(textEdit->selectionStart(), 5); + QCOMPARE(textEdit->selectionEnd(), 6); + QCOMPARE(textEdit->selectedText(), QLatin1String("t")); + QCOMPARE(textEdit->cursorPosition(), 6); + + QList<QInputMethodEvent::Attribute> attributes; + attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 0, 0, QVariant()); + QInputMethodEvent event(QLatin1String(""), attributes); + QApplication::sendEvent(canvas, &event); + + QCOMPARE(selectionStartSpy.count(), 4); + QCOMPARE(selectionEndSpy.count(), 4); + QCOMPARE(selectionSpy.count(), 6); + QCOMPARE(textEdit->selectionStart(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectionEnd(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectedText(), QLatin1String("")); + QCOMPARE(textEdit->cursorPosition(), 0); + + textEdit->setCursorPosition(1); + + QCOMPARE(selectionStartSpy.count(), 5); + QCOMPARE(selectionEndSpy.count(), 5); + QCOMPARE(selectionSpy.count(), 6); + + QKeyEvent leftArrowShiftPress(QEvent::KeyPress, Qt::Key_Left, Qt::ShiftModifier); + QKeyEvent leftArrowShiftRelese(QEvent::KeyRelease, Qt::Key_Left, Qt::ShiftModifier); + QApplication::sendEvent(canvas, &leftArrowShiftPress); + QApplication::sendEvent(canvas, &leftArrowShiftRelese); + + QCOMPARE(selectionStartSpy.count(), 6); + QCOMPARE(selectionEndSpy.count(), 5); + QCOMPARE(selectionSpy.count(), 7); + QCOMPARE(textEdit->selectionStart(), 0); + QCOMPARE(textEdit->selectionEnd(), 1); + QCOMPARE(textEdit->selectedText(), QLatin1String("S")); + QCOMPARE(textEdit->cursorPosition(), 0); + + QApplication::sendEvent(canvas, &event); + + QCOMPARE(selectionStartSpy.count(), 6); + QCOMPARE(selectionEndSpy.count(), 6); + QCOMPARE(selectionSpy.count(), 8); + QCOMPARE(textEdit->selectionStart(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectionEnd(), textEdit->cursorPosition()); + QCOMPARE(textEdit->selectedText(), QLatin1String("")); + QCOMPARE(textEdit->cursorPosition(), 0); +} QTEST_MAIN(tst_qdeclarativetextedit) #include "tst_qdeclarativetextedit.moc" diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index bb895bfbbf..b077670fcd 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -147,6 +147,7 @@ private slots: void inputContextMouseHandler(); void inputMethodComposing(); void cursorRectangleSize(); + void deselect(); private: void simulateKey(QDeclarativeView *, int key); @@ -2367,7 +2368,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() QVERIFY(!view.testAttribute(Qt::WA_InputMethodEnabled)); // input method should not be enabled - // if TextEdit is read only. + // if TextInput is read only. input.setReadOnly(true); ic.openInputPanelReceived = false; input.setFocus(true); @@ -2815,6 +2816,120 @@ void tst_qdeclarativetextinput::cursorRectangleSize() QCOMPARE(microFocusFromApp.size(), cursorRect.size()); } +void tst_qdeclarativetextinput::deselect() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); + QVERIFY(canvas->rootObject() != 0); + canvas->show(); + canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + + QDeclarativeTextInput *textInput = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); + QVERIFY(textInput != 0); + + textInput->setText("Select"); + + QSignalSpy selectionStartSpy(textInput, SIGNAL(selectionStartChanged())); + QSignalSpy selectionEndSpy(textInput, SIGNAL(selectionEndChanged())); + QSignalSpy selectedTextSpy(textInput, SIGNAL(selectedTextChanged())); + + textInput->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 1); + QCOMPARE(selectionEndSpy.count(), 0); + QCOMPARE(selectedTextSpy.count(), 1); + QCOMPARE(textInput->selectionStart(), 5); + QCOMPARE(textInput->selectionEnd(), 6); + QCOMPARE(textInput->selectedText(), QLatin1String("t")); + QCOMPARE(textInput->cursorPosition(), 6); + + textInput->deselect(); + + QCOMPARE(selectionStartSpy.count(), 2); + QCOMPARE(selectionEndSpy.count(), 1); + QCOMPARE(selectedTextSpy.count(), 2); + QCOMPARE(textInput->selectionStart(), textInput->cursorPosition()); + QCOMPARE(textInput->selectionEnd(), textInput->cursorPosition()); + QCOMPARE(textInput->selectedText(), QLatin1String("")); + QCOMPARE(textInput->cursorPosition(), 6); + + textInput->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 3); + QCOMPARE(selectionEndSpy.count(), 1); + QCOMPARE(selectedTextSpy.count(), 3); + QCOMPARE(textInput->selectionStart(), 5); + QCOMPARE(textInput->selectionEnd(), 6); + QCOMPARE(textInput->selectedText(), QLatin1String("t")); + QCOMPARE(textInput->cursorPosition(), 6); + + QKeyEvent leftArrowPress(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); + QKeyEvent leftArrowRelese(QEvent::KeyRelease, Qt::Key_Left, Qt::NoModifier); + QApplication::sendEvent(canvas, &leftArrowPress); + QApplication::sendEvent(canvas, &leftArrowRelese); + + QCOMPARE(selectionStartSpy.count(), 4); + QCOMPARE(selectionEndSpy.count(), 2); + QCOMPARE(selectedTextSpy.count(), 4); + QCOMPARE(textInput->selectionStart(), textInput->cursorPosition()); + QCOMPARE(textInput->selectionEnd(), textInput->cursorPosition()); + QCOMPARE(textInput->selectedText(), QLatin1String("")); + QCOMPARE(textInput->cursorPosition(), 5); + + textInput->select(5, 6); + + QCOMPARE(selectionStartSpy.count(), 4); + QCOMPARE(selectionEndSpy.count(), 3); + QCOMPARE(selectedTextSpy.count(), 5); + QCOMPARE(textInput->selectionStart(), 5); + QCOMPARE(textInput->selectionEnd(), 6); + QCOMPARE(textInput->selectedText(), QLatin1String("t")); + QCOMPARE(textInput->cursorPosition(), 6); + + QList<QInputMethodEvent::Attribute> attributes; + attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 0, 0, QVariant()); + QInputMethodEvent event(QLatin1String(""), attributes); + QApplication::sendEvent(canvas, &event); + + QCOMPARE(selectionStartSpy.count(), 5); + QCOMPARE(selectionEndSpy.count(), 4); + QCOMPARE(selectedTextSpy.count(), 6); + QCOMPARE(textInput->selectionStart(), textInput->cursorPosition()); + QCOMPARE(textInput->selectionEnd(), textInput->cursorPosition()); + QCOMPARE(textInput->selectedText(), QLatin1String("")); + QCOMPARE(textInput->cursorPosition(), 0); + + textInput->setCursorPosition(1); + + QCOMPARE(selectionStartSpy.count(), 6); + QCOMPARE(selectionEndSpy.count(), 5); + QCOMPARE(selectedTextSpy.count(), 6); + + QKeyEvent leftArrowShiftPress(QEvent::KeyPress, Qt::Key_Left, Qt::ShiftModifier); + QKeyEvent leftArrowShiftRelese(QEvent::KeyRelease, Qt::Key_Left, Qt::ShiftModifier); + QApplication::sendEvent(canvas, &leftArrowShiftPress); + QApplication::sendEvent(canvas, &leftArrowShiftRelese); + + QCOMPARE(selectionStartSpy.count(), 7); + QCOMPARE(selectionEndSpy.count(), 5); + QCOMPARE(selectedTextSpy.count(), 7); + QCOMPARE(textInput->selectionStart(), 0); + QCOMPARE(textInput->selectionEnd(), 1); + QCOMPARE(textInput->selectedText(), QLatin1String("S")); + QCOMPARE(textInput->cursorPosition(), 0); + + QApplication::sendEvent(canvas, &event); + + QCOMPARE(selectionStartSpy.count(), 8); + QCOMPARE(selectionEndSpy.count(), 6); + QCOMPARE(selectedTextSpy.count(), 8); + QCOMPARE(textInput->selectionStart(), textInput->cursorPosition()); + QCOMPARE(textInput->selectionEnd(), textInput->cursorPosition()); + QCOMPARE(textInput->selectedText(), QLatin1String("")); + QCOMPARE(textInput->cursorPosition(), 0); +} + QTEST_MAIN(tst_qdeclarativetextinput) #include "tst_qdeclarativetextinput.moc" diff --git a/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro b/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro index b8f509dc41..90a99c0f5d 100644 --- a/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro +++ b/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro @@ -6,7 +6,7 @@ HEADERS += TestNodeModel.h LoadingModel.h include (../xmlpatterns.pri) -wince*: { +wince*|symbian: { addFiles.files = tree.xml addFiles.path = . diff --git a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp index a83f6dda91..e4c88cdc98 100644 --- a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp +++ b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp @@ -181,6 +181,14 @@ void tst_QNetworkCookie::parseSingleCookie_data() QTest::newRow("with-value-with-special4") << "a = \"\\\"\" " << cookie; cookie.setValue("\"\\\"a, b; c\\\"\""); QTest::newRow("with-value-with-special5") << "a = \"\\\"a, b; c\\\"\"" << cookie; + // RFC6265 states that cookie values shouldn't contain commas, but we still allow them + // since they are only reserved for future compatibility and other browsers do the same. + cookie.setValue(","); + QTest::newRow("with-value-with-special6") << "a = ," << cookie; + cookie.setValue(",b"); + QTest::newRow("with-value-with-special7") << "a = ,b" << cookie; + cookie.setValue("b,"); + QTest::newRow("with-value-with-special8") << "a = b," << cookie; cookie.setValue("b c"); QTest::newRow("with-value-with-whitespace") << "a = b c" << cookie; @@ -599,7 +607,6 @@ void tst_QNetworkCookie::parseSingleCookie() //QEXPECT_FAIL("network2", "QDateTime parsing problem: the date is beyond year 8000", Abort); QCOMPARE(result.count(), 1); - QEXPECT_FAIL("network3", "Cookie value contains commas, violating the HTTP spec", Abort); QCOMPARE(result.at(0), expectedCookie); result = QNetworkCookie::parseCookies(result.at(0).toRawForm()); @@ -634,48 +641,17 @@ void tst_QNetworkCookie::parseMultipleCookies_data() // reason: malformed NAME=VALUE pair QTest::newRow("invalid-05") << "foo" << list; QTest::newRow("invalid-06") << "=b" << list; - QTest::newRow("invalid-09") << "foo,a=b" << list; - QTest::newRow("invalid-11") << ";path=/" << list; + QTest::newRow("invalid-07") << ";path=/" << list; // reason: malformed expiration date string - QTest::newRow("invalid-12") << "a=b;expires=" << list; - QTest::newRow("invalid-13") << "a=b;expires=foobar" << list; - QTest::newRow("invalid-14") << "a=b;expires=foobar, abc" << list; - QTest::newRow("invalid-15") << "a=b;expires=foobar, dd-mmm-yyyy hh:mm:ss GMT; path=/" << list; - QTest::newRow("invalid-16") << "a=b;expires=foobar, 32-Caz-1999 24:01:60 GMT; path=/" << list; - - QNetworkCookie cookie; - cookie.setName("a"); - list += cookie; - cookie.setName("c"); - cookie.setValue("d"); - list += cookie; - QTest::newRow("two-1") << "a=,c=d" << list; - QTest::newRow("two-2") << "a=, c=d" << list; - QTest::newRow("two-3") << "a= ,c=d" << list; - QTest::newRow("two-4") << "a= , c=d" << list; - - list.clear(); - list += cookie; - cookie.setName("a"); - cookie.setValue(QByteArray()); - list += cookie; - QTest::newRow("two-5") << "c=d,a=" << list; - QTest::newRow("two-6") << "c=d, a=" << list; - QTest::newRow("two-7") << "c=d , a=" << list; - - cookie.setName("foo"); - cookie.setValue("bar"); - cookie.setPath("/"); - list += cookie; - QTest::newRow("complex-1") << "c=d, a=, foo=bar; path=/" << list; - - cookie.setName("baz"); - cookie.setDomain(".qt.nokia.com"); - list.prepend(cookie); - QTest::newRow("complex-2") << "baz=bar; path=/; domain=.qt.nokia.com, c=d,a=,foo=bar; path=/" << list; + QTest::newRow("invalid-08") << "a=b;expires=" << list; + QTest::newRow("invalid-09") << "a=b;expires=foobar" << list; + QTest::newRow("invalid-10") << "a=b;expires=foobar, abc" << list; + QTest::newRow("invalid-11") << "a=b;expires=foobar, dd-mmm-yyyy hh:mm:ss GMT; path=/" << list; + QTest::newRow("invalid-12") << "a=b;expires=foobar, 32-Caz-1999 24:01:60 GMT; path=/" << list; // cookies obtained from the network: + QNetworkCookie cookie; cookie = QNetworkCookie("id", "51706646077999719"); cookie.setDomain(".bluestreak.com"); cookie.setPath("/"); diff --git a/tests/auto/qnetworkreply/.gitattributes b/tests/auto/qnetworkreply/.gitattributes index 80252cfd34..7fa30e3f99 100644 --- a/tests/auto/qnetworkreply/.gitattributes +++ b/tests/auto/qnetworkreply/.gitattributes @@ -1,3 +1,4 @@ rfc3252.txt -crlf bigfile -crlf resource -crlf +index.html -crlf diff --git a/tests/auto/qnetworkreply/index.html b/tests/auto/qnetworkreply/index.html new file mode 100644 index 0000000000..135db790a9 --- /dev/null +++ b/tests/auto/qnetworkreply/index.html @@ -0,0 +1,3 @@ +<h1>Welcome to qt-test-server</h1> +<img src="gif/fluke.gif" alt="fluke"> +<p>This is a network test server. It serves as a cacheing ftp and http proxy, transparent http/socks5 proxy, imap, ftp and http server, plus more.</p> diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 70287a9108..3d1e35ed25 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -197,6 +197,8 @@ private Q_SLOTS: void getFromHttp(); void getErrors_data(); void getErrors(); + void headFromHttp_data(); + void headFromHttp(); void putToFile_data(); void putToFile(); void putToFtp_data(); @@ -1610,6 +1612,65 @@ void tst_QNetworkReply::getFromHttp() QCOMPARE(reply->readAll(), reference.readAll()); } +void tst_QNetworkReply::headFromHttp_data() +{ + QTest::addColumn<qint64>("referenceSize"); + QTest::addColumn<QUrl>("url"); + QTest::addColumn<QString>("contentType"); + QTest::addColumn<QNetworkProxy>("proxy"); + + qint64 rfcsize = QFileInfo(SRCDIR "/rfc3252.txt").size(); + qint64 bigfilesize = QFileInfo(SRCDIR "/bigfile").size(); + qint64 indexsize = QFileInfo(SRCDIR "/index.html").size(); + + //testing proxies, mainly for the 407 response from http proxy + for (int i = 0; i < proxies.count(); ++i) { + QTest::newRow("rfc" + proxies.at(i).tag) << rfcsize << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt") << "text/plain" << proxies.at(i).proxy; + QTest::newRow("bigfile" + proxies.at(i).tag) << bigfilesize << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/bigfile") << "text/plain" << proxies.at(i).proxy; + QTest::newRow("index" + proxies.at(i).tag) << indexsize << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/") << "text/html" << proxies.at(i).proxy; + QTest::newRow("with-authentication" + proxies.at(i).tag) << rfcsize << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfcs-auth/rfc3252.txt") << "text/plain" << proxies.at(i).proxy; + QTest::newRow("cgi" + proxies.at(i).tag) << (qint64)-1 << QUrl("http://qt-test-server/qtest/cgi-bin/httpcachetest_expires500.cgi") << "text/html" << proxies.at(i).proxy; + } +} + +void tst_QNetworkReply::headFromHttp() +{ + QFETCH(qint64, referenceSize); + QFETCH(QUrl, url); + QFETCH(QString, contentType); + QFETCH(QNetworkProxy, proxy); + + QNetworkRequest request(url); + QNetworkReplyPtr reply; + + QElapsedTimer time; + time.start(); + + manager.setProxy(proxy); + connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), + SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); + connect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), + SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::HeadOperation, request, reply)); + + manager.disconnect(SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), + this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*))); + manager.disconnect(SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), + this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + + QVERIFY(time.elapsed() < 8000); //check authentication didn't wait for the server to timeout the http connection (15s on qt test server) + + QCOMPARE(reply->url(), request.url()); + QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + // only compare when the header is set. + if (reply->header(QNetworkRequest::ContentLengthHeader).isValid() && referenceSize >= 0) + QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), referenceSize); + if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) + QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), contentType); +} + void tst_QNetworkReply::getErrors_data() { QTest::addColumn<QString>("url"); diff --git a/tests/auto/qnetworkrequest/tst_qnetworkrequest.cpp b/tests/auto/qnetworkrequest/tst_qnetworkrequest.cpp index 90527163e2..02d1e5a87f 100644 --- a/tests/auto/qnetworkrequest/tst_qnetworkrequest.cpp +++ b/tests/auto/qnetworkrequest/tst_qnetworkrequest.cpp @@ -414,7 +414,7 @@ void tst_QNetworkRequest::rawHeaderParsing_data() QTest::newRow("SetCookie-3") << QNetworkRequest::SetCookieHeader << qVariantFromValue(QList<QNetworkCookie>() << cookie << cookie2) << true << "Set-Cookie" - << "a=b; path=/, c=d"; + << "a=b; path=/\nc=d"; } void tst_QNetworkRequest::rawHeaderParsing() diff --git a/tests/auto/qobjectrace/tst_qobjectrace.cpp b/tests/auto/qobjectrace/tst_qobjectrace.cpp index 1f52aecf8c..f9ec6ce2e5 100644 --- a/tests/auto/qobjectrace/tst_qobjectrace.cpp +++ b/tests/auto/qobjectrace/tst_qobjectrace.cpp @@ -139,11 +139,6 @@ private slots: void tst_QObjectRace::moveToThreadRace() { -#if defined(Q_OS_SYMBIAN) - // ### FIXME: task 257411 - remove xfail once this is fixed - QEXPECT_FAIL("", "Symbian event dispatcher can't handle this kind of race, see task: 257411", Abort); - QVERIFY(false); -#endif RaceObject *object = new RaceObject; enum { ThreadCount = 6 }; @@ -229,13 +224,6 @@ public: void tst_QObjectRace::destroyRace() { -#if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86) - // ### FIXME: task 257411 - remove xfail once this is fixed. - // Oddly enough, this seems to work properly in HW, if given enough time and memory. - QEXPECT_FAIL("", "Symbian event dispatcher can't handle this kind of race on emulator, see task: 257411", Abort); - QVERIFY(false); -#endif - enum { ThreadCount = 10, ObjectCountPerThread = 733, ObjectCount = ThreadCount * ObjectCountPerThread }; diff --git a/tests/auto/qpluginloader/tst_qpluginloader.cpp b/tests/auto/qpluginloader/tst_qpluginloader.cpp index d2d92a5013..152d1f4f6a 100644 --- a/tests/auto/qpluginloader/tst_qpluginloader.cpp +++ b/tests/auto/qpluginloader/tst_qpluginloader.cpp @@ -272,10 +272,10 @@ void tst_QPluginLoader::loadHints() void tst_QPluginLoader::deleteinstanceOnUnload() { - for (int pass = 0; pass < 2; ++pass) { + for (int pass = 0; pass < 4; ++pass) { QPluginLoader loader1; loader1.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin - if (pass == 0) + if (pass < 2) loader1.load(); // not recommended, instance() should do the job. PluginInterface *instance1 = qobject_cast<PluginInterface*>(loader1.instance()); QVERIFY(instance1); @@ -283,21 +283,32 @@ void tst_QPluginLoader::deleteinstanceOnUnload() QPluginLoader loader2; loader2.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin - if (pass == 0) + if (pass < 2) loader2.load(); // not recommended, instance() should do the job. PluginInterface *instance2 = qobject_cast<PluginInterface*>(loader2.instance()); QCOMPARE(instance2->pluginName(), QLatin1String("Plugin ok")); QSignalSpy spy1(loader1.instance(), SIGNAL(destroyed())); QSignalSpy spy2(loader2.instance(), SIGNAL(destroyed())); - if (pass == 0) { - QCOMPARE(loader2.unload(), false); // refcount not reached 0, not really unloaded - QCOMPARE(spy1.count(), 0); - QCOMPARE(spy2.count(), 0); - } + + // refcount not reached 0, not really unloaded + if (pass % 2) + QCOMPARE(loader1.unload(), false); + else + QCOMPARE(loader2.unload(), false); + + QCOMPARE(spy1.count(), 0); + QCOMPARE(spy2.count(), 0); + QCOMPARE(instance1->pluginName(), QLatin1String("Plugin ok")); QCOMPARE(instance2->pluginName(), QLatin1String("Plugin ok")); - QVERIFY(loader1.unload()); // refcount reached 0, did really unload + + // refcount reached 0, did really unload + if (pass % 2) + QVERIFY(loader2.unload()); + else + QVERIFY(loader1.unload()); + QCOMPARE(spy1.count(), 1); QCOMPARE(spy2.count(), 1); } diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp index 79c3ba8330..a6c7a8612a 100644 --- a/tests/auto/qstyle/tst_qstyle.cpp +++ b/tests/auto/qstyle/tst_qstyle.cpp @@ -213,10 +213,10 @@ void tst_QStyle::testStyleFactory() #endif #ifdef Q_WS_WIN if (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && - QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) QVERIFY(keys.contains("WindowsXP")); if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && - QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) QVERIFY(keys.contains("WindowsVista")); #endif diff --git a/tests/auto/qtextbrowser/tst_qtextbrowser.cpp b/tests/auto/qtextbrowser/tst_qtextbrowser.cpp index f36b3359f2..4489daa255 100644 --- a/tests/auto/qtextbrowser/tst_qtextbrowser.cpp +++ b/tests/auto/qtextbrowser/tst_qtextbrowser.cpp @@ -146,7 +146,7 @@ void tst_QTextBrowser::cleanup() void tst_QTextBrowser::noReloadOnAnchorJump() { - QUrl url("anchor.html"); + QUrl url("file:anchor.html"); browser->htmlLoadAttempts = 0; browser->setSource(url); @@ -162,7 +162,7 @@ void tst_QTextBrowser::noReloadOnAnchorJump() void tst_QTextBrowser::bgColorOnSourceChange() { - browser->setSource(QUrl("pagewithbg.html")); + browser->setSource(QUrl("file:pagewithbg.html")); QVERIFY(browser->document()->rootFrame()->frameFormat().hasProperty(QTextFormat::BackgroundBrush)); QVERIFY(browser->document()->rootFrame()->frameFormat().background().color() == Qt::blue); @@ -179,7 +179,7 @@ void tst_QTextBrowser::forwardButton() QVERIFY(browser->historyTitle(0).isEmpty()); QVERIFY(browser->historyTitle(1).isEmpty()); - browser->setSource(QUrl("pagewithbg.html")); + browser->setSource(QUrl("file:pagewithbg.html")); QVERIFY(!forwardEmissions.isEmpty()); QVariant val = forwardEmissions.takeLast()[0]; @@ -192,7 +192,7 @@ void tst_QTextBrowser::forwardButton() QVERIFY(val.toBool() == false); QVERIFY(browser->historyTitle(-1).isEmpty()); - QCOMPARE(browser->historyUrl(0), QUrl("pagewithbg.html")); + QCOMPARE(browser->historyUrl(0), QUrl("file:pagewithbg.html")); QCOMPARE(browser->documentTitle(), QString("Page With BG")); QCOMPARE(browser->historyTitle(0), QString("Page With BG")); QVERIFY(browser->historyTitle(1).isEmpty()); @@ -244,7 +244,7 @@ void tst_QTextBrowser::forwardButton() void tst_QTextBrowser::viewportPositionInHistory() { - browser->setSource(QUrl("bigpage.html")); + browser->setSource(QUrl("file:bigpage.html")); browser->scrollToAnchor("bottom"); QVERIFY(browser->verticalScrollBar()->value() > 0); @@ -283,7 +283,7 @@ void tst_QTextBrowser::relativeLinks() void tst_QTextBrowser::anchors() { - browser->setSource(QUrl("bigpage.html")); + browser->setSource(QUrl("file:bigpage.html")); browser->setSource(QUrl("#bottom")); QVERIFY(browser->verticalScrollBar()->value() > 0); @@ -306,7 +306,7 @@ void tst_QTextBrowser::forwardBackwardAvailable() QVERIFY(!browser->isBackwardAvailable()); QVERIFY(!browser->isForwardAvailable()); - browser->setSource(QUrl("anchor.html")); + browser->setSource(QUrl("file:anchor.html")); QVERIFY(!browser->isBackwardAvailable()); QVERIFY(!browser->isForwardAvailable()); QCOMPARE(backwardSpy.count(), 1); @@ -406,7 +406,7 @@ void tst_QTextBrowser::clearHistory() backwardSpy.clear(); forwardSpy.clear(); - browser->setSource(QUrl("anchor.html")); + browser->setSource(QUrl("file:anchor.html")); QVERIFY(!browser->isBackwardAvailable()); QVERIFY(!browser->isForwardAvailable()); QCOMPARE(backwardSpy.count(), 1); @@ -447,7 +447,7 @@ void tst_QTextBrowser::clearHistory() void tst_QTextBrowser::sourceInsideLoadResource() { - QUrl url("pagewithimage.html"); + QUrl url("file:pagewithimage.html"); browser->setSource(url); QCOMPARE(browser->lastResource.toString(), QUrl::fromLocalFile(QDir::current().filePath("foobar.png")).toString()); QEXPECT_FAIL("", "This is currently not supported", Continue); @@ -532,7 +532,7 @@ void tst_QTextBrowser::adjacentAnchors() void tst_QTextBrowser::loadResourceOnRelativeLocalFiles() { - browser->setSource(QUrl("subdir/index.html")); + browser->setSource(QUrl("file:subdir/index.html")); QVERIFY(!browser->toPlainText().isEmpty()); QVariant v = browser->loadResource(QTextDocument::HtmlResource, QUrl("../anchor.html")); QVERIFY(v.isValid()); @@ -543,7 +543,7 @@ void tst_QTextBrowser::loadResourceOnRelativeLocalFiles() void tst_QTextBrowser::focusIndicator() { HackBrowser *browser = new HackBrowser; - browser->setSource(QUrl("firstpage.html")); + browser->setSource(QUrl("file:firstpage.html")); QVERIFY(!browser->textCursor().hasSelection()); browser->focusTheNextChild(); @@ -595,7 +595,7 @@ void tst_QTextBrowser::focusIndicator() void tst_QTextBrowser::focusHistory() { HackBrowser *browser = new HackBrowser; - browser->setSource(QUrl("firstpage.html")); + browser->setSource(QUrl("file:firstpage.html")); QVERIFY(!browser->textCursor().hasSelection()); browser->focusTheNextChild(); diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index ee06b53892..a881583668 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -397,6 +397,9 @@ private slots: void minimizedWindowModeTransitions(); void normalWindowModeTransitions(); void focusSwitchClosesPopupMenu(); +#if !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) + void opacityChangeCausesBackingStoreRecreation(); +#endif #endif void focusProxyAndInputMethods(); @@ -10334,7 +10337,47 @@ void tst_QWidget::focusSwitchClosesPopupMenu() mainWindow.activateWindow(); QVERIFY(!CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed()); } -#endif + +#if !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) +class OpacityChangeWidget : public QWidget +{ +public: + OpacityChangeWidget() : m_paintEngineType(QPaintEngine::MaxUser) { } + void paintEvent(QPaintEvent *) + { + QPainter painter(this); + m_paintEngineType = painter.paintEngine()->type(); + } + QPaintEngine::Type paintEngineType() const { return m_paintEngineType; } +private: + QPaintEngine::Type m_paintEngineType; +}; + +void tst_QWidget::opacityChangeCausesBackingStoreRecreation() +{ + OpacityChangeWidget w; + w.show(); + QTest::qWaitForWindowShown(&w); + const QPaintEngine::Type type = w.paintEngineType(); + if (QPaintEngine::OpenGL != type && QPaintEngine::OpenVG != type) { + QSKIP("Test case is only valid when using opengl or openvg graphics system", SkipAll); + } else { + if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces) { + QSKIP("Test case is only valid when EGL surface transparency is not supported", SkipAll); + } else { + // Making window transparent should force switch to raster graphics system + w.setAttribute(Qt::WA_TranslucentBackground, true); + w.repaint(); + QCOMPARE(w.paintEngineType(), QPaintEngine::Raster); + // Making window opaque should cause switch back to previous graphics system + w.setAttribute(Qt::WA_TranslucentBackground, false); + w.repaint(); + QCOMPARE(w.paintEngineType(), type); + } + } +} +#endif // !Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE +#endif // Q_OS_SYMBIAN class InputContextTester : public QInputContext { diff --git a/tests/auto/qxmlquery/tst_qxmlquery.cpp b/tests/auto/qxmlquery/tst_qxmlquery.cpp index e443720ff9..51bb88e6c7 100644 --- a/tests/auto/qxmlquery/tst_qxmlquery.cpp +++ b/tests/auto/qxmlquery/tst_qxmlquery.cpp @@ -167,6 +167,7 @@ private Q_SLOTS: void setFocusQString() const; void setFocusQStringFailure() const; void setFocusQStringSignature() const; + void setFocusQStringFailureAfterSucces() const; void recompilationWithEvaluateToResultFailing() const; void secondEvaluationWithEvaluateToResultFailing() const; void recompilationWithEvaluateToReceiver() const; @@ -1976,6 +1977,25 @@ void tst_QXmlQuery::setFocusQStringSignature() const static_cast<bool>(query.setFocus(QString())); } +void tst_QXmlQuery::setFocusQStringFailureAfterSucces() const +{ + /* Test for QTBUG-18050. First call setFocus with a valid string, + * and then with an invalid string. evaluateTo should not crash. */ + QXmlQuery query; + MessageSilencer silencer; + query.setMessageHandler(&silencer); + + QVERIFY(query.setFocus(QLatin1String("<test>valid-input</test>"))); + QVERIFY(!query.setFocus(QLatin1String("invalid-input"))); + + query.setQuery("/query"); + + QString output; + /* Last setFocus was with an invalid string, so evaluateTo should return + * false */ + QVERIFY(!query.evaluateTo(&output)); +} + void tst_QXmlQuery::setFocusQIODeviceTriggerWarnings() const { /* A null pointer. */ diff --git a/tests/auto/xmlpatternsvalidator/files/schema-with-restrictions.xsd b/tests/auto/xmlpatternsvalidator/files/schema-with-restrictions.xsd new file mode 100644 index 0000000000..532efcbcb4 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/schema-with-restrictions.xsd @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <xsd:annotation> + <xsd:documentation xml:lang="en"> + Test for QTBUG-21375: xmlpatternsvalidator does not allow for non-numeric literals in xsd:double attributes + </xsd:documentation> + </xsd:annotation> + + <xsd:element name="test1" type="TestType1" /> + <xsd:element name="test2" type="TestType2" /> + <xsd:element name="test3" type="TestType3" /> + + <xsd:complexType name="TestType1"> + <xsd:attribute name="attribute1" type="DoubleWithRestrictions" default="INF" /> + </xsd:complexType> + + <xsd:complexType name="TestType2"> + <xsd:attribute name="attribute2" type="DoubleWithRestrictions" default="-INF" /> + </xsd:complexType> + + <xsd:complexType name="TestType3"> + <xsd:attribute name="attribute3" type="DoubleWithRestrictions" default="NaN" /> + </xsd:complexType> + + <xsd:simpleType name="DoubleWithRestrictions"> + <xsd:union> + <xsd:simpleType> + <xsd:restriction base="xsd:double"> + <xsd:enumeration value="-INF" /> + <xsd:enumeration value="INF" /> + <xsd:enumeration value="NaN" /> + </xsd:restriction> + </xsd:simpleType> + </xsd:union> + </xsd:simpleType> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp index 817ea1a3d3..60c1fe8984 100644 --- a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp +++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp @@ -222,6 +222,11 @@ void tst_XmlPatternsValidator::xsdSupport_data() const << (QStringList() << QLatin1String("files/dateTime-with-microseconds.xml") << QLatin1String("files/dateTime-with-microseconds.xsd")) << QString(); + + QTest::newRow("QTBUG-21375 A schema with a xs:double based simple type with non-numeric restrictions") + << 0 + << (QStringList() << QLatin1String("files/schema-with-restrictions.xsd")) + << QString(); } QTEST_MAIN(tst_XmlPatternsValidator) diff --git a/tests/benchmarks/corelib/tools/qline/main.cpp b/tests/benchmarks/corelib/tools/qline/main.cpp new file mode 100644 index 0000000000..d7f93ba618 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qline/main.cpp @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +// This file contains benchmarks for QLineF functions. + +#include <QDebug> +#include <qtest.h> +#include <QLine> + +class tst_qline : public QObject +{ + Q_OBJECT +private slots: + void fromPolar(); + void intersect_data(); + void intersect(); + void length(); + void setLength(); + void angle(); + void setAngle(); + void angleTo(); + void unitVector(); + void normalVector(); + void angle2(); +}; + +void tst_qline::fromPolar() +{ + QBENCHMARK { + QLineF::fromPolar(10, 2); + } +} + +void tst_qline::intersect_data() +{ + QTest::addColumn<QLineF>("l1"); + QTest::addColumn<QLineF>("l2"); + QTest::newRow("cross") << QLineF(-1,-1,1,1) << QLineF(-1,1,1,-1); + QTest::newRow("miss") << QLineF(1,1,2,2) << QLineF(1,11,2,12); +} + +void tst_qline::intersect() +{ + QFETCH(QLineF, l1); + QFETCH(QLineF, l2); + QPointF intersection; + QBENCHMARK { + l1.intersect(l2, &intersection); + } +} + +void tst_qline::length() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.length(); + } +} + +void tst_qline::setLength() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.setLength(5); + } +} + +void tst_qline::angle() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.angle(); + } +} + +void tst_qline::setAngle() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.setAngle(1); + } +} + +void tst_qline::angleTo() +{ + QLineF line1(1,2,3,4); + QLineF line2(8,7,6,5); + QBENCHMARK { + line1.angleTo(line2); + } +} + +void tst_qline::unitVector() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.unitVector(); + } +} + +void tst_qline::normalVector() +{ + QLineF line(1,2,3,4); + QBENCHMARK { + line.normalVector(); + } +} + +void tst_qline::angle2() +{ + QLineF line1(1,2,3,4); + QLineF line2(8,7,6,5); + QBENCHMARK { + line1.angle(line2); + } +} + +QTEST_MAIN(tst_qline) + +#include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qline/qline.pro b/tests/benchmarks/corelib/tools/qline/qline.pro new file mode 100644 index 0000000000..ae6bf5e80d --- /dev/null +++ b/tests/benchmarks/corelib/tools/qline/qline.pro @@ -0,0 +1,12 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = tst_bench_qline +DEPENDPATH += . +INCLUDEPATH += . + +QT -= gui + +CONFIG += release + +# Input +SOURCES += main.cpp diff --git a/tests/benchmarks/corelib/tools/tools.pro b/tests/benchmarks/corelib/tools/tools.pro index 44e8973522..83a94119d0 100644 --- a/tests/benchmarks/corelib/tools/tools.pro +++ b/tests/benchmarks/corelib/tools/tools.pro @@ -3,6 +3,7 @@ SUBDIRS = \ containers-associative \ containers-sequential \ qbytearray \ + qline \ qlist \ qrect \ qregexp \ diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index ab88083a66..73377320f1 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -508,6 +508,9 @@ int main(int argc, char **argv) || arg == QLatin1String("-h")) { printUsage(); return 0; + } else if (arg == QLatin1String("-list-languages")) { + printOut(getNumerusInfoString()); + return 0; } else if (arg == QLatin1String("-pluralonly")) { options |= PluralOnly; continue; diff --git a/tools/linguist/shared/numerus.cpp b/tools/linguist/shared/numerus.cpp index ac519b5983..1ab300c2bb 100644 --- a/tools/linguist/shared/numerus.cpp +++ b/tools/linguist/shared/numerus.cpp @@ -361,13 +361,6 @@ static const NumerusTableEntry numerusTable[] = { static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]); -// magic number for the file -static const int MagicLength = 16; -static const uchar magic[MagicLength] = { - 0x3c, 0xb8, 0x64, 0x18, 0xca, 0xef, 0x9c, 0x95, - 0xcd, 0x21, 0x1c, 0xbf, 0x60, 0xa1, 0xbd, 0xdd -}; - bool getNumerusInfo(QLocale::Language language, QLocale::Country country, QByteArray *rules, QStringList *forms, const char **gettextRules) { @@ -401,4 +394,27 @@ bool getNumerusInfo(QLocale::Language language, QLocale::Country country, return false; } +QString getNumerusInfoString() +{ + QStringList langs; + + for (int i = 0; i < NumerusTableSize; ++i) { + const NumerusTableEntry &entry = numerusTable[i]; + for (int j = 0; entry.languages[j] != EOL; ++j) { + QLocale loc(entry.languages[j], entry.countries ? entry.countries[j] : QLocale::AnyCountry); + QString lang = QLocale::languageToString(entry.languages[j]); + if (loc.language() == QLocale::C) + lang += QLatin1String(" (!!!)"); + else if (entry.countries && entry.countries[j] != QLocale::AnyCountry) + lang += QLatin1String(" (") + QLocale::countryToString(loc.country()) + QLatin1Char(')'); + else + lang += QLatin1String(" [") + QLocale::countryToString(loc.country()) + QLatin1Char(']'); + langs << QString::fromLatin1("%1 %2 %3\n").arg(lang, -40).arg(loc.name(), -8) + .arg(QString::fromLatin1(entry.gettextRules)); + } + } + langs.sort(); + return langs.join(QString()); +} + QT_END_NAMESPACE diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h index 3b7bd640b9..d0da527363 100644 --- a/tools/linguist/shared/translator.h +++ b/tools/linguist/shared/translator.h @@ -254,6 +254,8 @@ private: bool getNumerusInfo(QLocale::Language language, QLocale::Country country, QByteArray *rules, QStringList *forms, const char **gettextRules); +QString getNumerusInfoString(); + bool saveQM(const Translator &translator, QIODevice &dev, ConversionData &cd); /* diff --git a/tools/porting/src/qt3headers0.resource b/tools/porting/src/qt3headers0.resource Binary files differindex 8e243855a6..1a3e8a04b6 100644 --- a/tools/porting/src/qt3headers0.resource +++ b/tools/porting/src/qt3headers0.resource diff --git a/tools/qdoc3/doc/config/scripts/functions.js b/tools/qdoc3/doc/config/scripts/functions.js index 62bc53508e..af204d8d06 100755 --- a/tools/qdoc3/doc/config/scripts/functions.js +++ b/tools/qdoc3/doc/config/scripts/functions.js @@ -183,17 +183,6 @@ var blankRE=/^\s*$/; function CheckEmptyAndLoadList() { - /* Start Extracting information for feedback and adding this to the feedback form */ - var pageUrl = window.location.href; - var pageVal = $('title').html(); - $('#pageType').removeClass('red'); - $('#feedUrl').remove(); - $('#pageVal').remove(); - $('.menuAlert').remove(); - $('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">'); - $('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">'); - /* End Extracting information for feedback and adding this to the feedback form */ - /* extracts search query */ var value = document.getElementById('pageType').value; /* if the search is less than three chars long remove class names and remove elements from old search*/ @@ -255,4 +244,4 @@ function CheckEmptyAndLoadList() }); }, 500); /* timer set to 500 ms */ }); - });
\ No newline at end of file + }); diff --git a/tools/qdoc3/test/qt-html-templates-online.qdocconf b/tools/qdoc3/test/qt-html-templates-online.qdocconf index 3584b68ad1..073f1aa6b1 100644 --- a/tools/qdoc3/test/qt-html-templates-online.qdocconf +++ b/tools/qdoc3/test/qt-html-templates-online.qdocconf @@ -142,8 +142,6 @@ HTML.postpostheader = \ " <div class=\"content mainContent\">\n" HTML.footer = \ - " <div class=\"feedback t_button\">\n" \ - " [+] Documentation Feedback</div>\n" \ " </div>\n" \ " </div>\n" \ " </div> \n" \ @@ -169,16 +167,5 @@ HTML.footer = \ " Free Documentation License version 1.3</a>\n" \ " as published by the Free Software Foundation.</p>\n" \ " </div>\n" \ - " <div id=\"feedbackBox\">\n" \ - " <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \ - " <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \ - " <p id=\"noteHead\">Thank you for giving your feedback.</p> <p class=\"note\">Make sure it is related to this specific page. For more general bugs and \n" \ - " requests, please use the <a href=\"http://bugreports.qt.nokia.com/secure/Dashboard.jspa\">Qt Bug Tracker</a>.</p>\n" \ - " <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\"></textarea></p>\n" \ - " <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \ - " </form>\n" \ - " </div>\n" \ - " <div id=\"blurpage\">\n" \ - " </div>\n" \ "\n" \ " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n" diff --git a/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf b/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf index 8dc17af741..ed944945c3 100644 --- a/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf @@ -139,8 +139,6 @@ HTML.postpostheader = \ HTML.footer = \ " <!-- /div -->\n" \ - " <div class=\"feedback t_button\">\n" \ - " [+] Documentation Feedback</div>\n" \ " </div>\n" \ " </div>\n" \ " <div class=\"ft\">\n" \ @@ -164,13 +162,4 @@ HTML.footer = \ " Alternatively, this document may be used under the terms of the <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU\n" \ " Free Documentation License version 1.3</a>\n" \ " as published by the Free Software Foundation.</p>\n" \ - " </div>\n" \ - " <div id=\"feedbackBox\">\n" \ - " <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \ - " <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \ - " <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\">Please submit your feedback...</textarea></p>\n" \ - " <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \ - " </form>\n" \ - " </div>\n" \ - " <div id=\"blurpage\">\n" \ " </div>\n" diff --git a/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf b/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf index e7e822090f..ec0dc18411 100644 --- a/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf @@ -139,8 +139,6 @@ HTML.postpostheader = \ HTML.footer = \ " <!-- /div -->\n" \ - " <div class=\"feedback t_button\">\n" \ - " [+] Documentation Feedback</div>\n" \ " </div>\n" \ " </div>\n" \ " <div class=\"ft\">\n" \ @@ -164,13 +162,4 @@ HTML.footer = \ " Alternatively, this document may be used under the terms of the <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU\n" \ " Free Documentation License version 1.3</a>\n" \ " as published by the Free Software Foundation.</p>\n" \ - " </div>\n" \ - " <div id=\"feedbackBox\">\n" \ - " <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \ - " <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \ - " <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\">Please submit your feedback...</textarea></p>\n" \ - " <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \ - " </form>\n" \ - " </div>\n" \ - " <div id=\"blurpage\">\n" \ " </div>\n" diff --git a/tools/runonphone/codasignalhandler.cpp b/tools/runonphone/codasignalhandler.cpp index 2de6fbc84b..1df7834c1f 100644 --- a/tools/runonphone/codasignalhandler.cpp +++ b/tools/runonphone/codasignalhandler.cpp @@ -188,10 +188,15 @@ int CodaSignalHandler::run() connect(this, SIGNAL(done()), this, SLOT(finished())); d->codaDevice->sendSerialPing(false); - if (d->timeout > 0) - QTimer::singleShot(d->timeout, this, SLOT(timeout())); + QTimer timer; + if (d->timeout > 0) { + connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); + timer.setSingleShot(true); + timer.start(d->timeout); + } d->eventLoop = new QEventLoop(); d->eventLoop->exec(); + timer.stop(); int result = d->result; reportMessage(tr("Done.")); @@ -199,7 +204,6 @@ int CodaSignalHandler::run() disconnect(d->codaDevice.data(), 0, this, 0); SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(d->codaDevice); - QCoreApplication::quit(); return result; } diff --git a/tools/runonphone/main.cpp b/tools/runonphone/main.cpp index 39fa983878..6dd53fc91c 100644 --- a/tools/runonphone/main.cpp +++ b/tools/runonphone/main.cpp @@ -70,7 +70,8 @@ void printUsage(QTextStream& outstream, QString exeName) << "-T, --tempfile <remote file> specify temporary sis file name" << endl << "--nocrashlog Don't capture call stack if test crashes" << endl << "--crashlogpath <dir> Path to save crash logs (default=working dir)" << endl - << "--coda Use CODA instead of TRK (default agent)" << endl + << "--coda Use CODA instead of detecting the debug agent" << endl + << "--trk Use TRK instead of detecting the debug agent" << endl << endl << "USB COM ports can usually be autodetected, use -p or -f to force a specific port." << endl << "TRK is the default debugging agent, use --coda option when using CODA instead of TRK." << endl @@ -99,7 +100,7 @@ int main(int argc, char *argv[]) int loglevel=1; int timeout=0; bool crashlog = true; - bool coda = false; + enum {AgentUnknown, AgentCoda, AgentTRK} debugAgent = AgentUnknown; QString crashlogpath; QListIterator<QString> it(args); it.next(); //skip name of program @@ -154,7 +155,9 @@ int main(int argc, char *argv[]) } } else if (arg == "--coda") - coda = true; + debugAgent = AgentCoda; + else if (arg == "--trk") + debugAgent = AgentTRK; else if (arg == "--tempfile" || arg == "-T") { CHECK_PARAMETER_EXISTS dstName = it.next(); @@ -225,7 +228,24 @@ int main(int argc, char *argv[]) QFileInfo info(exeFile); QFileInfo uploadInfo(uploadLocalFile); - if (coda) { + if (debugAgent == AgentUnknown) { + outstream << "detecting debug agent..." << endl; + CodaSignalHandler codaDetector; + //auto detect agent + codaDetector.setSerialPortName(serialPortName); + codaDetector.setLogLevel(loglevel); + codaDetector.setActionType(ActionPingOnly); + codaDetector.setTimeout(1000); + if (!codaDetector.run()) { + debugAgent = AgentCoda; + outstream << " - Coda is found" << endl; + } else { + debugAgent = AgentTRK; + outstream << " - Coda is not found, defaulting to TRK" << endl; + } + } + + if (debugAgent == AgentCoda) { codaHandler.setSerialPortName(serialPortName); codaHandler.setLogLevel(loglevel); @@ -257,7 +277,8 @@ int main(int argc, char *argv[]) return codaHandler.run(); } else { - launcher.reset(new trk::Launcher(trk::Launcher::ActionPingOnly)); + launcher.reset(new trk::Launcher(trk::Launcher::ActionPingOnly, + SymbianUtils::SymbianDeviceManager::instance()->acquireDevice(serialPortName))); QStringList srcNames, dstNames; if (!sisFile.isEmpty()) { launcher->addStartupActions(trk::Launcher::ActionCopyInstall); diff --git a/tools/runonphone/symbianutils/launcher.cpp b/tools/runonphone/symbianutils/launcher.cpp index ff67881e24..2909696227 100644 --- a/tools/runonphone/symbianutils/launcher.cpp +++ b/tools/runonphone/symbianutils/launcher.cpp @@ -440,7 +440,7 @@ void Launcher::handleResult(const TrkResult &result) quint64 timestamp = extractInt64(result.data) & 0x0FFFFFFFFFFFFFFFULL; quint64 secs = timestamp / 1000000000; quint64 ns = timestamp % 1000000000; - msg = QString("[%1.%2] %3").arg(secs).arg(ns).arg(QString(result.data.mid(8))); + msg = QString("[%1.%2] %3").arg(secs).arg(ns,9,10,QLatin1Char('0')).arg(QString(result.data.mid(8))); logMessage("TEXT TRACE: " + msg); } } else { diff --git a/tools/runonphone/symbianutils/symbiandevicemanager.cpp b/tools/runonphone/symbianutils/symbiandevicemanager.cpp index e8d0b5ef41..0b7f5814a9 100644 --- a/tools/runonphone/symbianutils/symbiandevicemanager.cpp +++ b/tools/runonphone/symbianutils/symbiandevicemanager.cpp @@ -183,6 +183,9 @@ SymbianDevice::TrkDevicePtr SymbianDevice::acquireDevice() << "acquired: " << m_data->deviceAcquired << " open: " << isOpen(); if (isNull() || m_data->deviceAcquired) return TrkDevicePtr(); + //if port was opened for coda (but is not acquired) then close it first. + if (m_data->codaDevice) + m_data->codaDevice->device()->close(); if (m_data->device.isNull()) { m_data->device = TrkDevicePtr(new trk::TrkDevice); m_data->device->setPort(m_data->portName); diff --git a/tools/runonphone/texttracehandler.cpp b/tools/runonphone/texttracehandler.cpp index fff02e97ea..a121c083e1 100644 --- a/tools/runonphone/texttracehandler.cpp +++ b/tools/runonphone/texttracehandler.cpp @@ -85,5 +85,5 @@ void TextTraceHandler::dataAvailable() secs = timestamp / 1000000000; ns = timestamp % 1000000000; } - d->out << QString("[%1.%2] %3").arg(secs).arg(ns).arg(QString(result.mid(8))) << endl; + d->out << QString("[%1.%2] %3").arg(secs).arg(ns,9,10,QLatin1Char('0')).arg(QString(result.mid(8))) << endl; } diff --git a/translations/assistant_ko.ts b/translations/assistant_ko.ts index 1dbdf4f83d..c9d51cd940 100644 --- a/translations/assistant_ko.ts +++ b/translations/assistant_ko.ts @@ -259,6 +259,10 @@ Reason: <translation>주소</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>도구 모음 메뉴</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>책갈피 메뉴</translation> </message> @@ -286,11 +290,11 @@ Reason: <name>CentralWidget</name> <message> <source>Add new page</source> - <translation>새 쪽 추가</translation> + <translation type="obsolete">새 쪽 추가</translation> </message> <message> <source>Close current page</source> - <translation>현재 쪽 닫기</translation> + <translation type="obsolete">현재 쪽 닫기</translation> </message> <message> <source>Print Document</source> @@ -298,27 +302,27 @@ Reason: </message> <message> <source>unknown</source> - <translation>알 수 없음</translation> + <translation type="obsolete">알 수 없음</translation> </message> <message> <source>Add New Page</source> - <translation>새 쪽 추가</translation> + <translation type="obsolete">새 쪽 추가</translation> </message> <message> <source>Close This Page</source> - <translation>이 쪽 닫기</translation> + <translation type="obsolete">이 쪽 닫기</translation> </message> <message> <source>Close Other Pages</source> - <translation>다른 쪽 닫기</translation> + <translation type="obsolete">다른 쪽 닫기</translation> </message> <message> <source>Add Bookmark for this Page...</source> - <translation>이 쪽을 책갈피에 추가...</translation> + <translation type="obsolete">이 쪽을 책갈피에 추가...</translation> </message> <message> <source>Search</source> - <translation>찾기</translation> + <translation type="obsolete">찾기</translation> </message> </context> <context> @@ -657,6 +661,49 @@ Reason: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>뒤로(&B)</translation> + </message> + <message> + <source>&Forward</source> + <translation>앞으로(&F)</translation> + </message> + <message> + <source>&Home</source> + <translation>홈 페이지(&H)</translation> + </message> + <message> + <source>ALT+Home</source> + <translation>ALT+Home</translation> + </message> + <message> + <source>Zoom &in</source> + <translation>확대(&I)</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>축소(&O)</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>선택한 텍스트 복사(&C)</translation> + </message> + <message> + <source>&Print...</source> + <translation>인쇄(&P)...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>텍스트에서 찾기(&F)...</translation> + </message> + <message> + <source>&Find</source> + <translation>찾기(&F)</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -681,16 +728,32 @@ Reason: <translation><title>404 오류...</title><div align="center"><br><br><h1>페이지를 찾을 수 없음</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>링크 열기</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>링크 주소 복사(&L)</translation> </message> <message> + <source>Copy</source> + <translation>복사</translation> + </message> + <message> + <source>Reload</source> + <translation>새로 고침</translation> + </message> + <message> <source>Open Link in New Tab Ctrl+LMB</source> <translation>새 탭으로 링크 열기 Ctrl+LMB</translation> </message> <message> <source>Open Link in New Tab</source> - <translation>새 탭으로 링크 열기</translation> + <translation type="obsolete">새 탭으로 링크 열기</translation> + </message> + <message> + <source>Open Link in New Page</source> + <translation>새 쪽으로 링크 열기</translation> </message> </context> <context> @@ -881,10 +944,18 @@ Reason: <translation>책갈피</translation> </message> <message> + <source>Open Pages</source> + <translation>쪽 열기</translation> + </message> + <message> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> + <source>Bookmark Toolbar</source> + <translation>책갈피 도구 모음</translation> + </message> + <message> <source>Looking for Qt Documentation...</source> <translation>Qt 문서 찾는 중...</translation> </message> @@ -906,7 +977,7 @@ Reason: </message> <message> <source>&Print...</source> - <translation>인쇄(&P)...</translation> + <translation type="obsolete">인쇄(&P)...</translation> </message> <message> <source>&Close Tab</source> @@ -926,15 +997,15 @@ Reason: </message> <message> <source>&Copy selected Text</source> - <translation>선택한 텍스트 복사(&C)</translation> + <translation type="obsolete">선택한 텍스트 복사(&C)</translation> </message> <message> <source>&Find in Text...</source> - <translation>텍스트에서 찾기(&F)...</translation> + <translation type="obsolete">텍스트에서 찾기(&F)...</translation> </message> <message> <source>&Find</source> - <translation>찾기(&F)</translation> + <translation type="obsolete">찾기(&F)</translation> </message> <message> <source>Find &Next</source> @@ -954,11 +1025,11 @@ Reason: </message> <message> <source>Zoom &in</source> - <translation>확대(&I)</translation> + <translation type="obsolete">확대(&I)</translation> </message> <message> <source>Zoom &out</source> - <translation>축소(&O)</translation> + <translation type="obsolete">축소(&O)</translation> </message> <message> <source>Normal &Size</source> @@ -985,28 +1056,36 @@ Reason: <translation>찾기</translation> </message> <message> + <source>E&xit</source> + <translation>끝내기(&X)</translation> + </message> + <message> <source>ALT+S</source> <translation>ALT+S</translation> </message> <message> + <source>ALT+P</source> + <translation>ALT+P</translation> + </message> + <message> <source>&Go</source> <translation>이동(&G)</translation> </message> <message> <source>&Home</source> - <translation>홈 페이지(&H)</translation> + <translation type="obsolete">홈 페이지(&H)</translation> </message> <message> <source>ALT+Home</source> - <translation>ALT+Home</translation> + <translation type="obsolete">ALT+Home</translation> </message> <message> <source>&Back</source> - <translation>뒤로(&B)</translation> + <translation type="obsolete">뒤로(&B)</translation> </message> <message> <source>&Forward</source> - <translation>앞으로(&F)</translation> + <translation type="obsolete">앞으로(&F)</translation> </message> <message> <source>Sync with Table of Contents</source> @@ -1089,8 +1168,12 @@ Reason: <translation>연결된 내용을 찾을 수 없습니다.</translation> </message> <message> + <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></source> + <translation><center><h3>%1</h3><p>버전 %2</p></center><p>저작권자 (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></translation> + </message> + <message> <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></source> - <translation><center><h3>%1</h3><p>버전 %2</p></center><p>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></translation> + <translation type="obsolete"><center><h3>%1</h3><p>버전 %2</p></center><p>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></translation> </message> <message> <source>About %1</source> @@ -1106,6 +1189,17 @@ Reason: </message> </context> <context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>%1 닫기</translation> + </message> + <message> + <source>Close All Except %1</source> + <translation>%1 이외 모두 닫기</translation> + </message> +</context> +<context> <name>OutputPage</name> <message> <source>Form</source> @@ -1324,6 +1418,14 @@ Do you want to remove it?</source> <source>Restore to default</source> <translation>기본값으로 복원</translation> </message> + <message> + <source>Appearance</source> + <translation>모양</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>각각 쪽마다 탭 보이기</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1526,6 +1628,29 @@ qhelpgenerator <help-project-file> [옵션] </message> </context> <context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(제목 없음)</translation> + </message> + <message> + <source>New &Tab</source> + <translation>새 탭(&T)</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>탭 닫기(&C)</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>다른 탭 닫기</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>이 쪽을 책갈피에 추가...</translation> + </message> +</context> +<context> <name>TopicChooser</name> <message> <source>Choose Topic</source> diff --git a/translations/assistant_pl.ts b/translations/assistant_pl.ts index 87524a4d7c..a173895a2c 100644 --- a/translations/assistant_pl.ts +++ b/translations/assistant_pl.ts @@ -262,6 +262,10 @@ Powód: <translation>Adres</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>Menu paska narzędzi</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>Menu zakładek</translation> </message> @@ -289,11 +293,11 @@ Powód: <name>CentralWidget</name> <message> <source>Add new page</source> - <translation>Dodaj nową stronę</translation> + <translation type="obsolete">Dodaj nową stronę</translation> </message> <message> <source>Close current page</source> - <translation>Zamknij bieżącą stronę</translation> + <translation type="obsolete">Zamknij bieżącą stronę</translation> </message> <message> <source>Print Document</source> @@ -301,27 +305,27 @@ Powód: </message> <message> <source>unknown</source> - <translation>nieznany</translation> + <translation type="obsolete">nieznany</translation> </message> <message> <source>Add New Page</source> - <translation>Dodaj nową stronę</translation> + <translation type="obsolete">Dodaj nową stronę</translation> </message> <message> <source>Close This Page</source> - <translation>Zamknij tą stronę</translation> + <translation type="obsolete">Zamknij tą stronę</translation> </message> <message> <source>Close Other Pages</source> - <translation>Zamknij inne strony</translation> + <translation type="obsolete">Zamknij inne strony</translation> </message> <message> <source>Add Bookmark for this Page...</source> - <translation>Dodaj zakładkę dla tej strony...</translation> + <translation type="obsolete">Dodaj zakładkę dla tej strony...</translation> </message> <message> <source>Search</source> - <translation>Wyszukaj</translation> + <translation type="obsolete">Wyszukaj</translation> </message> </context> <context> @@ -661,6 +665,49 @@ Powód: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>&Wstecz</translation> + </message> + <message> + <source>&Forward</source> + <translation>W &przód</translation> + </message> + <message> + <source>&Home</source> + <translation>Strona &startowa</translation> + </message> + <message> + <source>ALT+Home</source> + <translation>ALT+Home</translation> + </message> + <message> + <source>Zoom &in</source> + <translation>Po&większ</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>Po&mniejsz</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>S&kopiuj zaznaczony tekst</translation> + </message> + <message> + <source>&Print...</source> + <translation>&Drukuj...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>Znajdź w &tekście...</translation> + </message> + <message> + <source>&Find</source> + <translation>&Znajdź</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -685,16 +732,32 @@ Powód: <translation><title>Błąd 404...</title><div align="center"><br><br><h1>Strona nie może być znaleziona</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>Otwórz odsyłacz</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>Skopiuj &odsyłacz</translation> </message> <message> + <source>Copy</source> + <translation>Skopiuj</translation> + </message> + <message> + <source>Reload</source> + <translation>Przeładuj</translation> + </message> + <message> <source>Open Link in New Tab Ctrl+LMB</source> <translation>Otwórz odsyłacz w nowej karcie Ctrl+LMB</translation> </message> <message> <source>Open Link in New Tab</source> - <translation>Otwórz odsyłacz w nowej karcie</translation> + <translation type="obsolete">Otwórz odsyłacz w nowej karcie</translation> + </message> + <message> + <source>Open Link in New Page</source> + <translation>Otwórz odsyłacz na nowej stronie</translation> </message> </context> <context> @@ -902,7 +965,7 @@ Powód: </message> <message> <source>&Print...</source> - <translation>Wy&drukuj...</translation> + <translation type="obsolete">Wy&drukuj...</translation> </message> <message> <source>New &Tab</source> @@ -922,15 +985,15 @@ Powód: </message> <message> <source>&Copy selected Text</source> - <translation>S&kopiuj zaznaczony tekst</translation> + <translation type="obsolete">S&kopiuj zaznaczony tekst</translation> </message> <message> <source>&Find in Text...</source> - <translation>Znajdź w &tekście...</translation> + <translation type="obsolete">Znajdź w &tekście...</translation> </message> <message> <source>&Find</source> - <translation>&Znajdź</translation> + <translation type="obsolete">&Znajdź</translation> </message> <message> <source>Find &Next</source> @@ -946,11 +1009,11 @@ Powód: </message> <message> <source>Zoom &in</source> - <translation>Po&większ</translation> + <translation type="obsolete">Po&większ</translation> </message> <message> <source>Zoom &out</source> - <translation>Po&mniejsz</translation> + <translation type="obsolete">Po&mniejsz</translation> </message> <message> <source>Normal &Size</source> @@ -974,15 +1037,15 @@ Powód: </message> <message> <source>&Home</source> - <translation>Strona &startowa</translation> + <translation type="obsolete">Strona &startowa</translation> </message> <message> <source>&Back</source> - <translation>&Wstecz</translation> + <translation type="obsolete">&Wstecz</translation> </message> <message> <source>&Forward</source> - <translation>W &przód</translation> + <translation type="obsolete">W &przód</translation> </message> <message> <source>Sync with Table of Contents</source> @@ -1021,6 +1084,22 @@ Powód: <translation>Informacje o programie...</translation> </message> <message> + <source>Open Pages</source> + <translation>Otwarte strony</translation> + </message> + <message> + <source>Bookmark Toolbar</source> + <translation>Pasek z zakładkami</translation> + </message> + <message> + <source>E&xit</source> + <translation>Za&kończ</translation> + </message> + <message> + <source>ALT+P</source> + <translation>ALT+P</translation> + </message> + <message> <source>Navigation Toolbar</source> <translation>Pasek do nawigacji</translation> </message> @@ -1094,7 +1173,7 @@ Powód: </message> <message> <source>ALT+Home</source> - <translation>ALT+Home</translation> + <translation type="obsolete">ALT+Home</translation> </message> <message> <source>&Bookmarks</source> @@ -1110,6 +1189,17 @@ Powód: </message> </context> <context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>Zamknij %1</translation> + </message> + <message> + <source>Close All Except %1</source> + <translation>Zamknij wszystko z wyjątkiem %1</translation> + </message> +</context> +<context> <name>OutputPage</name> <message> <source>Form</source> @@ -1328,6 +1418,14 @@ Czy chcesz go usunąć?</translation> <source>Blank Page</source> <translation>Pusta strona</translation> </message> + <message> + <source>Appearance</source> + <translation>Wygląd</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>Pokazuj karty dla każdej otwartej strony</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1527,6 +1625,29 @@ qhelpgenerator <plik-projektu-pomocy> [opcje] </message> </context> <context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(Nienazwany)</translation> + </message> + <message> + <source>New &Tab</source> + <translation>Nowa kar&ta</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>&Zamknij kartę</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>Zamknij pozostałe karty</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>Dodaj zakładkę dla tej strony...</translation> + </message> +</context> +<context> <name>TopicChooser</name> <message> <source>Choose a topic for <b>%1</b>:</source> diff --git a/translations/assistant_uk.ts b/translations/assistant_uk.ts index 73f5df584d..d3bd28411c 100644 --- a/translations/assistant_uk.ts +++ b/translations/assistant_uk.ts @@ -259,6 +259,10 @@ Reason: <translation>Адреса</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>Панель закладок</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>Меню закладок</translation> </message> @@ -285,41 +289,9 @@ Reason: <context> <name>CentralWidget</name> <message> - <source>Add new page</source> - <translation>Додати нову сторінку</translation> - </message> - <message> - <source>Close current page</source> - <translation>Закрити поточну сторінку</translation> - </message> - <message> <source>Print Document</source> <translation>Друкувати документ</translation> </message> - <message> - <source>unknown</source> - <translation>невідомо</translation> - </message> - <message> - <source>Add New Page</source> - <translation>Додати нову сторінку</translation> - </message> - <message> - <source>Close This Page</source> - <translation>Закрити цю сторінку</translation> - </message> - <message> - <source>Close Other Pages</source> - <translation>Закрити інші сторінки</translation> - </message> - <message> - <source>Add Bookmark for this Page...</source> - <translation>Додати закладку для цієї сторінки...</translation> - </message> - <message> - <source>Search</source> - <translation>Пошук</translation> - </message> </context> <context> <name>CmdLineParser</name> @@ -651,6 +623,49 @@ Reason: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>&Назад</translation> + </message> + <message> + <source>&Forward</source> + <translation>&Вперед</translation> + </message> + <message> + <source>&Home</source> + <translation>&Домівка</translation> + </message> + <message> + <source>ALT+Home</source> + <translation></translation> + </message> + <message> + <source>Zoom &in</source> + <translation>З&більшити</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>З&меншити</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>&Копіювати виділений текст</translation> + </message> + <message> + <source>&Print...</source> + <translation>&Друк...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>Пошук в &тексті...</translation> + </message> + <message> + <source>&Find</source> + <translation>По&шук</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -675,16 +690,28 @@ Reason: <translation><title>Помилка 404...</title><div align="center"><br><br><h1>Не вдалось знайти сторінку</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>Відкрити посилання</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>Копіювати &адресу посилання</translation> </message> <message> + <source>Copy</source> + <translation>Копіювати</translation> + </message> + <message> + <source>Reload</source> + <translation>Перезавантажити</translation> + </message> + <message> <source>Open Link in New Tab Ctrl+LMB</source> <translation>Відкрити посилання в новій вкладці Ctrl+LMB</translation> </message> <message> - <source>Open Link in New Tab</source> - <translation>Відкрити посилання в новій вкладці</translation> + <source>Open Link in New Page</source> + <translation>Відкрити посилання в новій сторінці</translation> </message> </context> <context> @@ -875,10 +902,18 @@ Reason: <translation>Закладки</translation> </message> <message> + <source>Open Pages</source> + <translation>Відкрити сторінки</translation> + </message> + <message> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> + <source>Bookmark Toolbar</source> + <translation>Панель закладок</translation> + </message> + <message> <source>Looking for Qt Documentation...</source> <translation>Пошук документації Qt...</translation> </message> @@ -899,10 +934,6 @@ Reason: <translation>Попередній перегляд...</translation> </message> <message> - <source>&Print...</source> - <translation>&Друк...</translation> - </message> - <message> <source>&Close Tab</source> <translation>&Закрити вкладку</translation> </message> @@ -919,18 +950,6 @@ Reason: <translation>&Правка</translation> </message> <message> - <source>&Copy selected Text</source> - <translation>&Копіювати виділений текст</translation> - </message> - <message> - <source>&Find in Text...</source> - <translation>Пошук в &тексті...</translation> - </message> - <message> - <source>&Find</source> - <translation>По&шук</translation> - </message> - <message> <source>Find &Next</source> <translation>Знайти &наступне</translation> </message> @@ -947,14 +966,6 @@ Reason: <translation>&Вид</translation> </message> <message> - <source>Zoom &in</source> - <translation>З&більшити</translation> - </message> - <message> - <source>Zoom &out</source> - <translation>З&меншити</translation> - </message> - <message> <source>Normal &Size</source> <translation>&Нормальний розмір</translation> </message> @@ -979,28 +990,20 @@ Reason: <translation>Пошук</translation> </message> <message> - <source>ALT+S</source> - <translation></translation> - </message> - <message> - <source>&Go</source> - <translation>П&ерейти</translation> - </message> - <message> - <source>&Home</source> - <translation>&Домівка</translation> + <source>E&xit</source> + <translation>Ви&йти</translation> </message> <message> - <source>ALT+Home</source> + <source>ALT+S</source> <translation></translation> </message> <message> - <source>&Back</source> - <translation>&Назад</translation> + <source>ALT+P</source> + <translation></translation> </message> <message> - <source>&Forward</source> - <translation>&Вперед</translation> + <source>&Go</source> + <translation>П&ерейти</translation> </message> <message> <source>Sync with Table of Contents</source> @@ -1100,6 +1103,17 @@ Reason: </message> </context> <context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>Закрити %1</translation> + </message> + <message> + <source>Close All Except %1</source> + <translation>Закрити все, крім %1</translation> + </message> +</context> +<context> <name>OutputPage</name> <message> <source>Form</source> @@ -1318,6 +1332,14 @@ Do you want to remove it?</source> <source>Restore to default</source> <translation>Відновити типово</translation> </message> + <message> + <source>Appearance</source> + <translation>Зовнішій вигляд</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>Показувати вкладки для кожної окремої сторінки</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1519,6 +1541,29 @@ qhelpgenerator <файл-проекту-довідки> [опції] </message> </context> <context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(Без назви)</translation> + </message> + <message> + <source>New &Tab</source> + <translation>&Нова вкладка</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>&Закрити вкладку</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>Закрити інші вкладки</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>Додати закладку для цієї сторінки...</translation> + </message> +</context> +<context> <name>TopicChooser</name> <message> <source>Choose Topic</source> diff --git a/translations/designer_ko.ts b/translations/designer_ko.ts index b14273fcce..9c2f6a89ad 100644 --- a/translations/designer_ko.ts +++ b/translations/designer_ko.ts @@ -410,7 +410,7 @@ </message> <message> <source>page</source> - <translation>쪽</translation> + <translation type="obsolete">쪽</translation> </message> <message> <source>Insert Subwindow</source> @@ -418,7 +418,7 @@ </message> <message> <source>subwindow</source> - <translation>subwindow</translation> + <translation type="obsolete">subwindow</translation> </message> <message> <source>Subwindow</source> @@ -461,6 +461,10 @@ <translation>'%1'의 레이아웃을 %2에서 %3(으)로 변경</translation> </message> <message> + <source>Change layout alignment</source> + <translation>레이아웃 정렬 변경</translation> + </message> + <message> <source>Set action text</source> <translation>동작 텍스트 설정</translation> </message> @@ -1813,7 +1817,11 @@ Container pages should only be added by specifying them in XML returned by the d </message> <message> <source>Edit</source> - <translation>편집</translation> + <translation type="obsolete">편집</translation> + </message> + <message> + <source>&Edit</source> + <translation>편집(&E)</translation> </message> <message> <source>F&orm</source> @@ -3248,8 +3256,12 @@ Do you want overwrite the template?</source> <translation><br/>Qt Designer는 Qt 프로그램의 그래픽 사용자 인터페이스 디자이너입니다.<br/></translation> </message> <message> + <source>%1<br/>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation>%1<br/>저작권자 (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</translation> + </message> + <message> <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation>%1<br/>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> + <translation type="obsolete">%1<br/>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> </message> </context> <context> @@ -3725,6 +3737,10 @@ Do you want overwrite the template?</source> <translation>상속됨</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[테마] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>수평</translation> </message> @@ -3733,6 +3749,10 @@ Do you want overwrite the template?</source> <translation>수직</translation> </message> <message> + <source>Theme</source> + <translation>테마</translation> + </message> + <message> <source>Normal Off</source> <translation>일반 꺼짐</translation> </message> @@ -4317,6 +4337,17 @@ Do you want overwrite the template?</source> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>테마에서 아이콘 선택하기</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>현재 테마의 아이콘 이름을 입력하십시오:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Items List</source> @@ -4467,20 +4498,36 @@ Do you want overwrite the template?</source> </message> <message> <source>Shortcut:</source> - <translation>단축키:</translation> + <translation type="obsolete">단축키:</translation> </message> <message> <source>Checkable:</source> - <translation>선택 가능:</translation> + <translation type="obsolete">선택 가능:</translation> </message> <message> <source>ToolTip:</source> - <translation>풍선 도움말:</translation> + <translation type="obsolete">풍선 도움말:</translation> </message> <message> <source>...</source> <translation>...</translation> </message> + <message> + <source>T&oolTip:</source> + <translation>풍선 도움말:</translation> + </message> + <message> + <source>Icon th&eme:</source> + <translation>아이콘 테마(&E):</translation> + </message> + <message> + <source>&Checkable:</source> + <translation>선택 가능(&C):</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>단축키(&S):</translation> + </message> </context> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> @@ -4730,6 +4777,10 @@ Please select another name.</source> <translation>파일 선택...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>테마에서 아이콘 선택...</translation> + </message> + <message> <source>Copy Path</source> <translation>경로 복사</translation> </message> @@ -4741,6 +4792,10 @@ Please select another name.</source> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[테마] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -5064,6 +5119,42 @@ Class: %2</source> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> + <source>Layout Alignment</source> + <translation>레이아웃 정렬</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>수평 정렬 없음</translation> + </message> + <message> + <source>Left</source> + <translation>왼쪽</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>수평 가운데</translation> + </message> + <message> + <source>Right</source> + <translation>오른쪽</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>수직 정렬 없음</translation> + </message> + <message> + <source>Top</source> + <translation>위</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>수직 가운데</translation> + </message> + <message> + <source>Bottom</source> + <translation>아래</translation> + </message> + <message> <source>Change objectName...</source> <translation>objectName 바꾸기...</translation> </message> @@ -5329,6 +5420,10 @@ Class: %2</source> <source>Insert &Image</source> <translation>그림 삽입(&I)</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>서식있는 텍스트 단순화</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/designer_pl.ts b/translations/designer_pl.ts index c2b5ebac8f..05b5a785b4 100644 --- a/translations/designer_pl.ts +++ b/translations/designer_pl.ts @@ -364,7 +364,7 @@ </message> <message> <source>page</source> - <translation>strona</translation> + <translation type="obsolete">strona</translation> </message> <message> <source>Insert Page</source> @@ -476,7 +476,7 @@ </message> <message> <source>subwindow</source> - <translation>podokno</translation> + <translation type="obsolete">podokno</translation> </message> <message> <source>Subwindow</source> @@ -530,6 +530,10 @@ <translation>Zmień rozmieszczenie widżetu '%1' z %2 na %3</translation> </message> <message> + <source>Change layout alignment</source> + <translation>Zmień wyrównanie w rozmieszczeniu</translation> + </message> + <message> <source>Change script</source> <translation>Zmień skrypt</translation> </message> @@ -876,8 +880,6 @@ <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values ---------- -Parsing layout stretch values ----------- Parsing layout stretch values</extracomment> <translation>Niepoprawna wartość rozciągniecia dla '%1': '%2'</translation> </message> @@ -885,8 +887,6 @@ Parsing layout stretch values</extracomment> <source>Invalid minimum size for '%1': '%2'</source> <extracomment>Parsing grid layout minimum size values ---------- -Parsing grid layout minimum size values ----------- Parsing grid layout minimum size values</extracomment> <translation>Niepoprawna wartość minimalna dla '%1': '%2'</translation> </message> @@ -1820,6 +1820,10 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w <translation>&Plik</translation> </message> <message> + <source>&Edit</source> + <translation>&Edycja</translation> + </message> + <message> <source>F&orm</source> <translation>&Formularz</translation> </message> @@ -1857,7 +1861,7 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w </message> <message> <source>Edit</source> - <translation>Edycja</translation> + <translation type="obsolete">Edycja</translation> </message> <message> <source>Toolbars</source> @@ -1902,8 +1906,6 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method ---------- -Empty class name passed to widget factory method ----------- Empty class name passed to widget factory method</extracomment> <translation>Pusta nazwa klasy została przekazana do %1 (nazwa obiektu: '%2').</translation> </message> @@ -3741,6 +3743,10 @@ Czy chcesz nadpisać szablon?</translation> <translation>Odziedziczony</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[Motyw] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>Poziomo</translation> </message> @@ -3749,6 +3755,10 @@ Czy chcesz nadpisać szablon?</translation> <translation>Pionowo</translation> </message> <message> + <source>Theme</source> + <translation>Motyw</translation> + </message> + <message> <source>Normal Off</source> <translation>Normalny wyciśnięty</translation> </message> @@ -4337,6 +4347,17 @@ Czy chcesz nadpisać szablon?</translation> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>Ustaw ikonę dla motywu</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>Podaj nazwę ikony z bieżącego motywu:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Properties &<<</source> @@ -4483,15 +4504,15 @@ Czy chcesz nadpisać szablon?</translation> </message> <message> <source>Shortcut:</source> - <translation>Skrót:</translation> + <translation type="obsolete">Skrót:</translation> </message> <message> <source>Checkable:</source> - <translation>Przełączalny:</translation> + <translation type="obsolete">Przełączalny:</translation> </message> <message> <source>ToolTip:</source> - <translation>Podpowiedź:</translation> + <translation type="obsolete">Podpowiedź:</translation> </message> <message> <source>...</source> @@ -4501,6 +4522,22 @@ Czy chcesz nadpisać szablon?</translation> <source>Object &name:</source> <translation>&Nazwa obiektu:</translation> </message> + <message> + <source>T&oolTip:</source> + <translation>&Podpowiedź:</translation> + </message> + <message> + <source>Icon th&eme:</source> + <translation>Ikonka z &motywu:</translation> + </message> + <message> + <source>&Checkable:</source> + <translation>P&rzełączalna:</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>&Skrót:</translation> + </message> </context> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> @@ -4758,9 +4795,17 @@ Wybierz inną nazwę.</translation> <translation>Wybierz plik...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>Ustaw ikonkę z motywu...</translation> + </message> + <message> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[Motyw] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -5136,6 +5181,42 @@ Klasa: %2</translation> <translation>Zmień sygnały/sloty...</translation> </message> <message> + <source>Layout Alignment</source> + <translation>Wyrównanie w rozmieszczeniu</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>Brak poziomego wyrównania</translation> + </message> + <message> + <source>Left</source> + <translation>Do lewej</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>Wyśrodkuj w poziomie</translation> + </message> + <message> + <source>Right</source> + <translation>Do prawej</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>Brak pionowego wyrównania</translation> + </message> + <message> + <source>Top</source> + <translation>Do góry</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>Wyśrodkuj w pionie</translation> + </message> + <message> + <source>Bottom</source> + <translation>Do dołu</translation> + </message> + <message> <source>Go to slot...</source> <translation>Przejdź do slotu...</translation> </message> @@ -5351,6 +5432,10 @@ Klasa: %2</translation> <source>Insert &Image</source> <translation>Wstaw &obrazek</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>Uprość tekst sformatowany</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts index 471a3661e4..fdaeda39a1 100644 --- a/translations/designer_ru.ts +++ b/translations/designer_ru.ts @@ -872,8 +872,6 @@ <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values ---------- -Parsing layout stretch values ----------- Parsing layout stretch values</extracomment> <translation>Некорректный коэффициент растяжения для '%1': '%2'</translation> </message> @@ -881,8 +879,6 @@ Parsing layout stretch values</extracomment> <source>Invalid minimum size for '%1': '%2'</source> <extracomment>Parsing grid layout minimum size values ---------- -Parsing grid layout minimum size values ----------- Parsing grid layout minimum size values</extracomment> <translation>Некорректный минимальный размер для '%1': '%2'</translation> </message> @@ -1899,8 +1895,6 @@ Container pages should only be added by specifying them in XML returned by the d <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method ---------- -Empty class name passed to widget factory method ----------- Empty class name passed to widget factory method</extracomment> <translation>Методу %1 (объекта '%2') было передано пустое имя класса.</translation> </message> diff --git a/translations/designer_uk.ts b/translations/designer_uk.ts index 7d1065c0c2..4f45ff75b5 100644 --- a/translations/designer_uk.ts +++ b/translations/designer_uk.ts @@ -409,18 +409,10 @@ <translation>Видалити підвікно</translation> </message> <message> - <source>page</source> - <translation>сторінка</translation> - </message> - <message> <source>Insert Subwindow</source> <translation>Вставити підвікно</translation> </message> <message> - <source>subwindow</source> - <translation>підвікно</translation> - </message> - <message> <source>Subwindow</source> <translation>Підвікно</translation> </message> @@ -461,6 +453,10 @@ <translation>Змінити розташування '%1' з %2 на %3</translation> </message> <message> + <source>Change layout alignment</source> + <translation>Змінити вирівнювання розташування</translation> + </message> + <message> <source>Set action text</source> <translation>Встановити текст дії</translation> </message> @@ -876,8 +872,6 @@ <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values ---------- -Parsing layout stretch values ----------- Parsing layout stretch values</extracomment> <translation>Неправильне значення розтягування для '%1': '%2'</translation> </message> @@ -885,8 +879,6 @@ Parsing layout stretch values</extracomment> <source>Invalid minimum size for '%1': '%2'</source> <extracomment>Parsing grid layout minimum size values ---------- -Parsing grid layout minimum size values ----------- Parsing grid layout minimum size values</extracomment> <translation>Неправильне значення мінімального розміру для '%1': '%2'</translation> </message> @@ -1820,8 +1812,8 @@ Container pages should only be added by specifying them in XML returned by the d <translation>&Файл</translation> </message> <message> - <source>Edit</source> - <translation>Правка</translation> + <source>&Edit</source> + <translation>&Правка</translation> </message> <message> <source>F&orm</source> @@ -1902,8 +1894,6 @@ Container pages should only be added by specifying them in XML returned by the d <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method ---------- -Empty class name passed to widget factory method ----------- Empty class name passed to widget factory method</extracomment> <translation>До %1 було передане пусте ім'я класу (ім'я об'єкта: '%2').</translation> </message> @@ -3741,6 +3731,10 @@ Do you want overwrite the template?</source> <translation>Успадкована</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[Тема] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>Горизонтальне</translation> </message> @@ -3749,6 +3743,10 @@ Do you want overwrite the template?</source> <translation>Вертикальне</translation> </message> <message> + <source>Theme</source> + <translation>Тема</translation> + </message> + <message> <source>Normal Off</source> <translation>Нормальний, вимк</translation> </message> @@ -4337,6 +4335,17 @@ Do you want overwrite the template?</source> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>Встановити піктограму з теми</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>Введіть назву піктограми з поточної теми:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Items List</source> @@ -4486,20 +4495,24 @@ Do you want overwrite the template?</source> <translation>&Значок:</translation> </message> <message> - <source>Shortcut:</source> - <translation>Поєднання клавіш:</translation> + <source>...</source> + <translation>...</translation> </message> <message> - <source>Checkable:</source> - <translation>Прапорець:</translation> + <source>T&oolTip:</source> + <translation>Спливаюча &підказка:</translation> </message> <message> - <source>ToolTip:</source> - <translation>Спливаюча підказка:</translation> + <source>Icon th&eme:</source> + <translation>Те&ма значків:</translation> </message> <message> - <source>...</source> - <translation>...</translation> + <source>&Checkable:</source> + <translation>П&рапорець:</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>Поєднання клаві&ш:</translation> </message> </context> <context> @@ -4750,6 +4763,10 @@ Please select another name.</source> <translation>Оберіть файл...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>Встановити піктограму з теми...</translation> + </message> + <message> <source>Copy Path</source> <translation>Копіювати шлях</translation> </message> @@ -4761,6 +4778,10 @@ Please select another name.</source> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[Тема] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -5084,6 +5105,42 @@ Class: %2</source> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> + <source>Layout Alignment</source> + <translation>Вирівнювання розташування</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>Без горизонтального вирівнювання</translation> + </message> + <message> + <source>Left</source> + <translation>Вліво</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>Центрувати горизонтально</translation> + </message> + <message> + <source>Right</source> + <translation>Вправо</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>Без вертикального вирівнювання</translation> + </message> + <message> + <source>Top</source> + <translation>Догори</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>Центрувати вертикально</translation> + </message> + <message> + <source>Bottom</source> + <translation>Донизу</translation> + </message> + <message> <source>Change objectName...</source> <translation>Змінити objectName...</translation> </message> @@ -5351,6 +5408,10 @@ Class: %2</source> <source>Insert &Image</source> <translation>Вставити &зображення</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>Спростити форматований текст</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/linguist_ko.ts b/translations/linguist_ko.ts index 7545dbc523..ed740b0ef7 100644 --- a/translations/linguist_ko.ts +++ b/translations/linguist_ko.ts @@ -84,6 +84,10 @@ <context> <name>DataModel</name> <message> + <source>The translation file '%1' will not be loaded because it is empty.</source> + <translation>번역 파일 '%1'이(가) 비어 있으므로 불러올 수 없습니다.</translation> + </message> + <message> <source><qt>Duplicate messages found in '%1':</source> <translation><qt>'%1'에 중복된 메시지가 있음:</translation> </message> @@ -1109,7 +1113,11 @@ Java, JavaScript/QtScript 원본 코드에서 번역 가능한 문자열을 추 </message> <message> <source>Illegal escape squence</source> - <translation>잘못된 탈출 문자</translation> + <translation type="obsolete">잘못된 탈출 문자</translation> + </message> + <message> + <source>Illegal escape sequence</source> + <translation>잘못된 탈출 시퀀스</translation> </message> <message> <source>Illegal unicode escape sequence</source> @@ -1942,8 +1950,12 @@ All files (*)</source> <translation>버전 %1</translation> </message> <message> + <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist는 Qt 프로그램을 번역하는 도구입니다.</p><p>저작권자 (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</translation> + </message> + <message> <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist는 Qt 프로그램을 번역하는 도구입니다.</p><p>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> + <translation type="obsolete"><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist는 Qt 프로그램을 번역하는 도구입니다.</p><p>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> </message> <message> <source>Do you want to save the modified files?</source> diff --git a/translations/qt_ja.ts b/translations/qt_ja.ts index 05ed9d4deb..7a6985b292 100644 --- a/translations/qt_ja.ts +++ b/translations/qt_ja.ts @@ -407,7 +407,7 @@ libgstreamer-plugins-base はインストールされていますか。</transla </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>反射遅延 (ms)</translation> </message> <message> @@ -422,7 +422,7 @@ libgstreamer-plugins-base はインストールされていますか。</transla </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>リバーブ レベル (mB)</translation> </message> <message> @@ -480,8 +480,12 @@ libgstreamer-plugins-base はインストールされていますか。</transla <translation>音量: %1%</translation> </message> <message> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> + <translation>スライダを用いて音量を調整してください。左端が0%です。右端が%1%になります</translation> + </message> + <message> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation>スライダを用いて音量を指定してください。左端が0%、右端が%1%になります</translation> + <translation type="obsolete">スライダを用いて音量を指定してください。左端が0%、右端が%1%になります</translation> </message> <message> <source>Muted</source> @@ -3724,6 +3728,10 @@ Do you want to delete it anyway?</source> <source>Actions</source> <translation>アクション</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>コーナーツールバー</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -6481,6 +6489,10 @@ Please choose a different file name.</source> <name>QSoftKeyManager</name> <message> <source>Ok</source> + <translation type="obsolete">OK</translation> + </message> + <message> + <source>OK</source> <translation>OK</translation> </message> <message> @@ -6725,6 +6737,72 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>無効なオプション: </translation> + </message> + <message> + <source>Error opening database</source> + <translation>データベースのオープン時にエラーが発生しました</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>POLICY_DB_DEFAULT は他の POLICY 定義の利用前に定義されなければなりません</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>トランザクションを開始できません</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>トランザクションをコミットできません</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>トランザクションをロールバックできません</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>カラム数の取得時にエラーが発生しました</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>カラム名の取得時にエラーが発生しました</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>カラムの型の取得時にエラーが発生しました</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>レコードをフェッチできません</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>ステートメントを実行できません</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>ステートメントがプリペアではありません</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>ステートメントをリセットできません</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>パラメータをバインドできません</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>パラメータの数が合っていません</translation> + </message> +</context> +<context> <name>QSymbianSocketEngine</name> <message> <source>Unable to initialize non-blocking socket</source> @@ -7051,6 +7129,10 @@ Please choose a different file name.</source> <translation>リクエストはキャンセルされました</translation> </message> <message> + <source>Request canceled</source> + <translation>リクエストはキャンセルされました</translation> + </message> + <message> <source>Request blocked</source> <translation>リクエストはブロックされました</translation> </message> @@ -8298,7 +8380,7 @@ Please choose a different file name.</source> <name>QmlJSDebugger::ToolBox</name> <message> <source>Qt Quick Toolbox</source> - <translation>Qt Quick ツールボックス</translation> + <translation type="obsolete">Qt Quick ツールボックス</translation> </message> </context> <context> @@ -8776,7 +8858,11 @@ Please choose a different file name.</source> </message> <message> <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます)</translation> + <translation type="obsolete">ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます)</translation> + </message> + <message> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> + <translation>ユーザ定義の関数の名前空間は、空であってはなりません。(今回の場合、すでに定義されているプレフィックス '%1' が使用できます)</translation> </message> <message> <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> @@ -9620,6 +9706,10 @@ Please choose a different file name.</source> </message> <message> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> + <translation type="obsolete">複合型 %1 のコンテンツモデルは %2 要素を含んでいますが非 empty 型を派生した拡張にする事はできません。</translation> + </message> + <message> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> <translation>複合型 %1 のコンテンツモデルは %2 要素を含んでいますが非 empty 型を派生した拡張にする事はできません。</translation> </message> <message> @@ -10027,10 +10117,14 @@ Please choose a different file name.</source> <translation>要素 %1 はテキストを含む事を許可されていません。</translation> </message> <message> - <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> <translation>要素 %1 は固定値を持った他の要素を含む事はできません。</translation> </message> <message> + <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <translation type="obsolete">要素 %1 は固定値を持った他の要素を含む事はできません。</translation> + </message> + <message> <source>Element %1 is missing required attribute %2.</source> <translation>要素 %1 に要求された属性 %2 がありません。</translation> </message> diff --git a/translations/qt_ko.ts b/translations/qt_ko.ts index c7ab8e3638..c391fa2a40 100644 --- a/translations/qt_ko.ts +++ b/translations/qt_ko.ts @@ -9,9 +9,24 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[길이가 %1인 배열]</translation> + </message> + <message> + <source><undefined></source> + <translation><정의되지 않음></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> <source>Fake error !</source> + <translation type="obsolete">가짜 오류!</translation> + </message> + <message> + <source>Fake error!</source> <translation>가짜 오류!</translation> </message> <message> @@ -421,7 +436,7 @@ libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.< </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>반사 지연 시간 (ms)</translation> </message> <message> @@ -436,7 +451,7 @@ libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.< </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>리버브 레벨 (mB)</translation> </message> <message> @@ -468,6 +483,10 @@ libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.< <source>Error opening source: media type could not be determined</source> <translation>원본 열기 오류: 미디어 형식을 결정할 수 없음</translation> </message> + <message> + <source>Failed to set requested IAP</source> + <translation>요청한 IAP를 설정할 수 없음</translation> + </message> </context> <context> <name>Phonon::MMF::StereoWidening</name> @@ -490,10 +509,14 @@ libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.< <translation>음량: %1%</translation> </message> <message> - <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> <translation>이 슬라이더를 사용하여 음량을 조정하십시오. 맨 왼쪽은 0%, 맨 오른쪽은 %1%입니다</translation> </message> <message> + <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <translation type="obsolete">이 슬라이더를 사용하여 음량을 조정하십시오. 맨 왼쪽은 0%, 맨 오른쪽은 %1%입니다</translation> + </message> + <message> <source>Muted</source> <translation>음소거</translation> </message> @@ -1082,6 +1105,14 @@ to <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>선택 해제</translation> + </message> + <message> + <source>Check</source> + <translation>선택</translation> + </message> + <message> <source>Press</source> <translation>누름</translation> </message> @@ -1228,6 +1259,11 @@ to <translation>%1: 자원 부족</translation> </message> <message> + <source>%1: permission denied</source> + <comment>QSystemSemaphore</comment> + <translation>%1: 권한이 거부됨</translation> + </message> + <message> <source>%1: unknown error %2</source> <comment>QSystemSemaphore</comment> <translation>%1: 알 수 없는 오류 %2</translation> @@ -1394,6 +1430,13 @@ to </message> </context> <context> + <name>QDeclarativeApplication</name> + <message> + <source>Application is an abstract class</source> + <translation>Application은 추상 클래스임</translation> + </message> +</context> +<context> <name>QDeclarativeBehavior</name> <message> <source>Cannot change the animation assigned to a Behavior.</source> @@ -1521,6 +1564,14 @@ to <translation>비어 있는 컴포넌트 정의를 만들 수 없음</translation> </message> <message> + <source>"%1.%2" is not available in %3 %4.%5.</source> + <translation>"%1.%2"은(는) %3 %4.%5에서 사용할 수 없습니다.</translation> + </message> + <message> + <source>"%1.%2" is not available due to component versioning.</source> + <translation>"%1.%2"은(는) 구성 요소 버전 때문에 사용할 수 없습니다.</translation> + </message> + <message> <source>Incorrectly specified signal assignment</source> <translation>잘못 지정된 시그널 할당</translation> </message> @@ -1731,6 +1782,10 @@ to <source>Invalid empty URL</source> <translation>잘못된 빈 URL</translation> </message> + <message> + <source>createObject: value is not an object</source> + <translation>createObject: 값이 객체가 아님</translation> + </message> </context> <context> <name>QDeclarativeConnections</name> @@ -1871,6 +1926,17 @@ to </message> </context> <context> + <name>QDeclarativeLayoutMirroringAttached</name> + <message> + <source>LayoutDirection attached property only works with Items</source> + <translation>연결된 속성 LayoutDirection은 Item에서만 동작함</translation> + </message> + <message> + <source>LayoutMirroring is only available via attached properties</source> + <translation>LayoutMirroring은 연결된 속성으로만 사용할 수 있음</translation> + </message> +</context> +<context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> @@ -1970,6 +2036,10 @@ to </message> <message> <source>Illegal escape squence</source> + <translation type="obsolete">잘못된 탈출 시퀀스</translation> + </message> + <message> + <source>Illegal escape sequence</source> <translation>잘못된 탈출 시퀀스</translation> </message> <message> @@ -2435,6 +2505,10 @@ to <source>Cannot create %1 for output</source> <translation>%1에 쓰기 위하여 열 수 없음</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>파일 엔진을 사용할 수 없거나 파일 엔진이 UnMapExtension을 지원하지 않음</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -3422,6 +3496,18 @@ Do you want to delete it anyway?</source> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>%2의 심볼 "%1"을(를) 불러올 수 없음: %3</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>'%1'은(는) ELF 객체가 아님 (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>'%1'은(는) ELF 객체가 아님</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>'%1'은(는) 잘못된 ELF 객체임 (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3519,6 +3605,10 @@ Do you want to delete it anyway?</source> <source>%1: Unknown error %2</source> <translation>%1: 알 수 없는 오류 %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: 접근이 거부됨</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3693,6 +3783,10 @@ Do you want to delete it anyway?</source> <source>Actions</source> <translation>동작</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>모서리 도구 모음</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -3717,8 +3811,12 @@ Do you want to delete it anyway?</source> <translation><h3>Qt 정보</h3><p>이 프로그램은 Qt 버전 %1을(를) 사용합니다.</p></translation> </message> <message> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt는 크로스 플랫폼 프로그램 개발을 위한 C++ 툴킷입니다.</p><p>Qt는 MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, 리눅스, 여러 상용 유닉스 간 소스 호환성을 제공합니다. Qt는 Qt for Embedded Linux, Qt for Windows CE와 같은 임베디드 장치도 지원합니다.</p><p>Qt는 여러 사용자의 조건에 맞는 세 가지 조건으로 라이선스됩니다.</p><p>Qt의 상용 라이선스는 제 3자와 코드를 공유할 수 없거나, GNU LGPL 2.1, GNU GPL 3.0의 조건을 따를 수 없는 독점/상용 소프트웨어 개발에 사용할 수 있습니다.</p><p>Qt의 GNU LGPL 2.1 라이선스는 GNU LGPL 2.1의 조건을 따르는 독점 및 오픈소스 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt의 GNU GPL 3.0 라이선스는 GNU GPL 3.0의 조건을 적용받거나 GNU GPL 3.0으로 라이선싱할 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt 라이선싱 조건을 알아 보려면 <a href="http://qt.nokia.con/products/licensing">qt.nokia.com/products/licensing</a> 페이지를 참고하십시오.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt는 노키아의 제품입니다. 더 많은 정보를 보려면 <a href="http://qt.nokia.com">qt.nokia.com</a>을 참조하십시오.</p></translation> + </message> + <message> <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt는 크로스 플랫폼 프로그램 개발을 위한 C++ 툴킷입니다.</p><p>Qt는 마이크로소프트&nbsp;윈도, Mac&nbsp;OS&nbsp;X, 리눅스, 여러 상용 유닉스 간 소스 호환성을 제공합니다. Qt는 Qt for Embedded Linux, Qt for Windows CE와 같은 임베디드 장치도 지원합니다.</p><p>Qt는 여러 사용자의 조건에 맞는 세 가지 조건으로 라이선스됩니다.</p><p>Qt의 상용 라이선스는 제 3자와 코드를 공유할 수 없거나, GNU LGPL 2.1, GNU GPL 3.0의 조건을 따를 수 없는 독점/상용 소프트웨어 개발에 사용할 수 있습니다.</p><p>Qt의 GNU LGPL 2.1 라이선스는 GNU LGPL 2.1의 조건을 따르는 독점 및 오픈소스 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt의 GNU GPL 3.0 라이선스는 GNU GPL 3.0의 조건을 적용받거나 GNU GPL 3.0으로 라이선싱할 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt 라이선싱 조건을 알아 보려면 <a href="http://qt.nokia.con/products/licensing">qt.nokia.com/products/licensing</a> 페이지를 참고하십시오.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt는 노키아의 제품입니다. 더 많은 정보를 보려면 <a href="http://qt.nokia.com">qt.nokia.com</a>을 참조하십시오.</p></translation> + <translation type="obsolete"><p>Qt는 크로스 플랫폼 프로그램 개발을 위한 C++ 툴킷입니다.</p><p>Qt는 마이크로소프트&nbsp;윈도, Mac&nbsp;OS&nbsp;X, 리눅스, 여러 상용 유닉스 간 소스 호환성을 제공합니다. Qt는 Qt for Embedded Linux, Qt for Windows CE와 같은 임베디드 장치도 지원합니다.</p><p>Qt는 여러 사용자의 조건에 맞는 세 가지 조건으로 라이선스됩니다.</p><p>Qt의 상용 라이선스는 제 3자와 코드를 공유할 수 없거나, GNU LGPL 2.1, GNU GPL 3.0의 조건을 따를 수 없는 독점/상용 소프트웨어 개발에 사용할 수 있습니다.</p><p>Qt의 GNU LGPL 2.1 라이선스는 GNU LGPL 2.1의 조건을 따르는 독점 및 오픈소스 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt의 GNU GPL 3.0 라이선스는 GNU GPL 3.0의 조건을 적용받거나 GNU GPL 3.0으로 라이선싱할 Qt 프로그램을 개발할 수 있습니다.</p><p>Qt 라이선싱 조건을 알아 보려면 <a href="http://qt.nokia.con/products/licensing">qt.nokia.com/products/licensing</a> 페이지를 참고하십시오.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt는 노키아의 제품입니다. 더 많은 정보를 보려면 <a href="http://qt.nokia.com">qt.nokia.com</a>을 참조하십시오.</p></translation> </message> <message> <source>About Qt</source> @@ -3861,7 +3959,7 @@ Do you want to delete it anyway?</source> <name>QNetworkAccessDataBackend</name> <message> <source>Operation not supported on %1</source> - <translation>%1에는 작업이 지원되지 않음</translation> + <translation type="obsolete">%1에는 작업이 지원되지 않음</translation> </message> <message> <source>Invalid URI: %1</source> @@ -3958,6 +4056,10 @@ Do you want to delete it anyway?</source> <translation>네트워크 세션 오류.</translation> </message> <message> + <source>backend start error.</source> + <translation>백엔드 시작 오류.</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>일시적인 네트워크 실패.</translation> </message> @@ -4150,6 +4252,10 @@ Do you want to delete it anyway?</source> <source>invalid query: "%1"</source> <translation>잘못된 쿼리: "%1"</translation> </message> + <message> + <source>Host not found</source> + <translation>호스트를 찾을 수 없음</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -5460,7 +5566,7 @@ Do you want to overwrite it?</source> </message> <message> <source>%1: key error</source> - <translation>%1: 키 오류</translation> + <translation type="obsolete">%1: 키 오류</translation> </message> <message> <source>%1: unable to make key</source> @@ -5503,6 +5609,10 @@ Do you want to overwrite it?</source> <translation>%1: 시스템에서 크게를 제한함</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: 잘못된 이름</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: 연결되지 않음</translation> </message> @@ -6328,11 +6438,11 @@ Do you want to overwrite it?</source> </message> <message> <source>Touroku</source> - <translation type="unfinished"></translation> + <translation>단어 등록</translation> </message> <message> <source>Massyo</source> - <translation type="unfinished"></translation> + <translation>단어 지움</translation> </message> <message> <source>Kana Lock</source> @@ -6344,11 +6454,11 @@ Do you want to overwrite it?</source> </message> <message> <source>Eisu Shift</source> - <translation type="unfinished"></translation> + <translation>한자 Shift</translation> </message> <message> <source>Eisu toggle</source> - <translation type="unfinished"></translation> + <translation>한자 반전</translation> </message> <message> <source>Code input</source> @@ -6517,6 +6627,10 @@ Do you want to overwrite it?</source> <name>QSoftKeyManager</name> <message> <source>Ok</source> + <translation type="obsolete">확인</translation> + </message> + <message> + <source>OK</source> <translation>확인</translation> </message> <message> @@ -6685,6 +6799,10 @@ Do you want to overwrite it?</source> <translation>호스트 이름이 이 인증서에서 지정한 유효한 호스트 중 아무 것도 일치하지 않음</translation> </message> <message> + <source>The peer certificate is blacklisted</source> + <translation>동료 인증서가 블랙리스트에 포함됨</translation> + </message> + <message> <source>Unknown error</source> <translation>알 수 없는 오류</translation> </message> @@ -6757,6 +6875,187 @@ Do you want to overwrite it?</source> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>잘못된 옵션:</translation> + </message> + <message> + <source>Error opening database</source> + <translation>데이터베이스를 여는 중 오류 발생</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>다른 POLICY 선언을 사용하기 전에 POLICY_DB_DEFAULT가 정의되어야 함</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>트랜잭션을 시작할 수 없음</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>트랜잭션을 커밋할 수 없음</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>트랜잭션을 되돌릴 수 없음</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>행 개수를 가져올 수 없음</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>행 이름을 가져올 수 없음</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>행 종류를 가져올 수 없음</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>열을 가져올 수 없음</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>구문을 실행할 수 없음</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>구문이 준비되지 않았음</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>구문을 초기화할 수 없음</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>인자를 바인딩할 수 없음</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>인자 수가 일치하지 않음</translation> + </message> +</context> +<context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>논블러킹 소켓을 초기화할 수 없음</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>브로드캐스트 소켓을 초기화할 수 없음</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>IPv6을 지원하지 않는 플랫폼에서 IPv6 소켓을 사용하려고 시도함</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>원격 호스트에서 연결을 닫음</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>네트워크 작업 시간 초과</translation> + </message> + <message> + <source>Out of resources</source> + <translation>자원 부족</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>지원하지 않는 소켓 작업</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>지원하지 않는 프로토콜 형식</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>잘못된 소켓 설명자</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>호스트에 접근할 수 없음</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>네트워크에 접근할 수 없음</translation> + </message> + <message> + <source>Permission denied</source> + <translation>권한이 거부됨</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>연결 시간 초과됨</translation> + </message> + <message> + <source>Connection refused</source> + <translation>연결이 거부됨</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>지정한 주소가 이미 사용 중</translation> + </message> + <message> + <source>The address is not available</source> + <translation>주소를 사용할 수 없음</translation> + </message> + <message> + <source>The address is protected</source> + <translation>주소가 보호되어 있음</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>한 번에 보낼 데이터그램이 너무 큼</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>메시지를 보낼 수 없음</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>메시지를 받을 수 없음</translation> + </message> + <message> + <source>Unable to write</source> + <translation>쓸 수 없음</translation> + </message> + <message> + <source>Network error</source> + <translation>네트워크 오류</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>다른 소켓이 지정한 포트에서 듣고 있음</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>비 소켓에서 작업 실행됨</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>이 작업에 사용할 프록시 형식이 잘못됨</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>이 작업에 사용할 주소가 잘못됨</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>지정한 네트워크 세션이 열려 있지 않음</translation> + </message> + <message> + <source>Unknown error</source> + <translation>알 수 없는 오류</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: permission denied</source> @@ -6800,6 +7099,10 @@ Do you want to overwrite it?</source> <translation>%1: 자원 부족</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: 이름 오류</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: 알 수 없는 오류 %2</translation> </message> @@ -6890,10 +7193,28 @@ Do you want to overwrite it?</source> <name>QUndoGroup</name> <message> <source>Undo</source> + <translation type="obsolete">실행 취소</translation> + </message> + <message> + <source>Redo</source> + <translation type="obsolete">다시 실행</translation> + </message> + <message> + <source>Undo %1</source> + <translation>%1 실행 취소</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>실행 취소</translation> </message> <message> + <source>Redo %1</source> + <translation>%1 다시 실행</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>다시 실행</translation> </message> </context> @@ -6908,10 +7229,28 @@ Do you want to overwrite it?</source> <name>QUndoStack</name> <message> <source>Undo</source> + <translation type="obsolete">실행 취소</translation> + </message> + <message> + <source>Redo</source> + <translation type="obsolete">다시 실행</translation> + </message> + <message> + <source>Undo %1</source> + <translation>%1 실행 취소</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>실행 취소</translation> </message> <message> + <source>Redo %1</source> + <translation>%1 다시 실행</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>다시 실행</translation> </message> </context> @@ -6969,6 +7308,10 @@ Do you want to overwrite it?</source> <translation>요청 취소됨</translation> </message> <message> + <source>Request canceled</source> + <translation>요청 취소됨</translation> + </message> + <message> <source>Request blocked</source> <translation>요청 거부됨</translation> </message> @@ -6988,6 +7331,10 @@ Do you want to overwrite it?</source> <source>File does not exist</source> <translation>파일이 존재하지 않음</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>미디어 엔진에서 불러오기 작업이 처리됨</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6997,7 +7344,7 @@ Do you want to overwrite it?</source> </message> <message> <source>Bad HTTP request</source> - <translation>잘못된 HTTP 요청</translation> + <translation type="obsolete">잘못된 HTTP 요청</translation> </message> <message numerus="yes"> <source>%n file(s)</source> @@ -7294,11 +7641,76 @@ Do you want to overwrite it?</source> <translation>초기화</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>자세히</translation> + </message> + <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>그림 주소 복사</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>비디오 열기</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>오디오 열기</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>비디오 복사</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>오디오 복사</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation>컨트롤 보이기/숨기기</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation>반복/반복 해제</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>전체 화면</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>재생</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>일시 정지</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>음소거</translation> + </message> + <message> <source>Stop</source> <comment>Stop context menu item</comment> <translation>정지</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>모두 선택</translation> + </message> + <message> <source>Ignore</source> <comment>Ignore Spelling context menu item</comment> <translation>무시</translation> @@ -7610,7 +8022,7 @@ Do you want to overwrite it?</source> </message> <message> <source>Select all</source> - <translation>모두 선택</translation> + <translation type="obsolete">모두 선택</translation> </message> <message> <source>Select to the next character</source> @@ -8111,6 +8523,94 @@ Do you want to overwrite it?</source> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>항목</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>들여다보기 모드</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>애니메이션 재생/일시 정지</translation> + </message> + <message> + <source>Select</source> + <translation>선택</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>선택 (Marquee)</translation> + </message> + <message> + <source>Zoom</source> + <translation>확대/축소</translation> + </message> + <message> + <source>Color Picker</source> + <translation>색상 선택기</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>QML 뷰어에 변경 사항 적용하기</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>문서에 변경 사항 적용하기</translation> + </message> + <message> + <source>Tools</source> + <translation>도구</translation> + </message> + <message> + <source>1x</source> + <translation>1x</translation> + </message> + <message> + <source>0.5x</source> + <translation>0.5x</translation> + </message> + <message> + <source>0.25x</source> + <translation>0.25x</translation> + </message> + <message> + <source>0.125x</source> + <translation>0.125x</translation> + </message> + <message> + <source>0.1x</source> + <translation>0.1x</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>색 복사</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>원본 크기(&1)</translation> + </message> + <message> + <source>Zoom In</source> + <translation>확대</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>축소</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>%1 is an unsupported encoding.</source> @@ -8570,6 +9070,10 @@ Do you want to overwrite it?</source> </message> <message> <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> + <translation type="obsolete">사용자 정의 함수의 네임스페이스는 비어 있을 수 없습니다. (이러한 경우에 사용할 수 있는 미리 정의된 접두사 %1을(를) 사용하십시오)</translation> + </message> + <message> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> <translation>사용자 정의 함수의 네임스페이스는 비어 있을 수 없습니다. (이러한 경우에 사용할 수 있는 미리 정의된 접두사 %1을(를) 사용하십시오)</translation> </message> <message> @@ -9419,6 +9923,10 @@ Do you want to overwrite it?</source> </message> <message> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> + <translation type="obsolete">복합 형식 %1의 내용 모델은 %2 원소를 포함하므로 비어 있지 않은 형식의 확장으로 파생될 수 없습니다.</translation> + </message> + <message> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> <translation>복합 형식 %1의 내용 모델은 %2 원소를 포함하므로 비어 있지 않은 형식의 확장으로 파생될 수 없습니다.</translation> </message> <message> @@ -9826,8 +10334,12 @@ Do you want to overwrite it?</source> <translation>원소 %1에 허용되지 않은 텍스트 내용이 포함되어 있습니다.</translation> </message> <message> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> + <translation>원소 %1은(는) 고정된 내용을 가지고 있으므로 다른 원소를 포함할 수 없습니다.</translation> + </message> + <message> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> - <translation>원소 %1의 내용은 고정되어 있으므로 다른 원소를 포함할 수 없습니다.</translation> + <translation type="obsolete">원소 %1의 내용은 고정되어 있으므로 다른 원소를 포함할 수 없습니다.</translation> </message> <message> <source>Element %1 is missing required attribute %2.</source> diff --git a/translations/qt_pl.ts b/translations/qt_pl.ts index 0c9c01e474..c1a7a03072 100644 --- a/translations/qt_pl.ts +++ b/translations/qt_pl.ts @@ -9,9 +9,24 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[Tablica o długości %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><niezdefiniowanej></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> <source>Fake error !</source> + <translation type="obsolete">Fałszywy błąd!</translation> + </message> + <message> + <source>Fake error!</source> <translation>Fałszywy błąd!</translation> </message> <message> @@ -397,7 +412,7 @@ zainstalowałeś libgstreamer-plugins-base.</translation> </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>Opóźnienie odbić (ms)</translation> </message> <message> @@ -412,7 +427,7 @@ zainstalowałeś libgstreamer-plugins-base.</translation> </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>Poziom pogłosu (mB)</translation> </message> <message> @@ -470,8 +485,12 @@ zainstalowałeś libgstreamer-plugins-base.</translation> <translation>Głośność: %1%</translation> </message> <message> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> + <translation>Użyj tego suwaka aby zmienić głośność. Skrajnie lewa pozycja to 0%. Skrajnie prawa to %1%</translation> + </message> + <message> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation>Użyj tego suwaka aby zmienić głośność. Skrajnie lewa pozycja to 0%, skrajnie prawa to %1%</translation> + <translation type="obsolete">Użyj tego suwaka aby zmienić głośność. Skrajnie lewa pozycja to 0%, skrajnie prawa to %1%</translation> </message> <message> <source>Muted</source> @@ -1062,6 +1081,14 @@ na <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>Odznacz</translation> + </message> + <message> + <source>Check</source> + <translation>Zaznacz</translation> + </message> + <message> <source>Press</source> <translation>Wciśnij</translation> </message> @@ -2365,7 +2392,7 @@ na </message> <message> <source>Reset</source> - <translation>Resetuj</translation> + <translation>Zresetuj</translation> </message> <message> <source>Restore Defaults</source> @@ -2500,6 +2527,10 @@ na <source>Cannot create %1 for output</source> <translation>Nie można utworzyć pliku wyjściowego %1</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>Brak dostępnego silnika lub silnik nie obsługuje UnMapExtension</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -3471,6 +3502,18 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>Nie można zidentyfikować symbolu "%1" w %2: %3</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>"%1" nie jest obiektem ELF (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>"%1" nie jest obiektem ELF</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>"%1" jest niepoprawnym obiektem ELF (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3568,6 +3611,10 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <source>%1: Unknown error %2</source> <translation>%1: Nieznany błąd %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: Odmowa dostępu</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3577,7 +3624,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Nie można potwierdzić transakcji</translation> + <translation>Nie można dokonać transakcji</translation> </message> <message> <source>Unable to connect</source> @@ -3620,7 +3667,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> </message> <message> <source>Unable to reset statement</source> - <translation>Nie można skasować polecenia</translation> + <translation>Nie można zresetować polecenia</translation> </message> <message> <source>Unable to store result</source> @@ -3742,6 +3789,10 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <source>Actions</source> <translation>Akcje</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>Narożny pasek narzędzi</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -3910,7 +3961,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <name>QNetworkAccessDataBackend</name> <message> <source>Operation not supported on %1</source> - <translation>Operacja nieobsługiwana na %1</translation> + <translation type="obsolete">Operacja nieobsługiwana na %1</translation> </message> <message> <source>Invalid URI: %1</source> @@ -4007,6 +4058,10 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <translation>Błąd sesji sieciowej.</translation> </message> <message> + <source>backend start error.</source> + <translation type="unfinished"></translation> + </message> + <message> <source>Temporary network failure.</source> <translation>Chwilowy błąd w sieci.</translation> </message> @@ -4123,7 +4178,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <name>QODBCDriver</name> <message> <source>Unable to commit transaction</source> - <translation>Nie można potwierdzić transakcji</translation> + <translation>Nie można dokonać transakcji</translation> </message> <message> <source>Unable to connect</source> @@ -4199,6 +4254,10 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> <source>invalid query: "%1"</source> <translation>Niepoprawne zapytanie: "%1"</translation> </message> + <message> + <source>Host not found</source> + <translation>Host nie znaleziony</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -4219,7 +4278,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation> </message> <message> <source>Could not commit transaction</source> - <translation>Nie można potwierdzić transakcji</translation> + <translation>Nie można dokonać transakcji</translation> </message> <message> <source>Could not rollback transaction</source> @@ -5092,7 +5151,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>Unable to reset statement</source> - <translation>Nie można skasować polecenia</translation> + <translation>Nie można zresetować polecenia</translation> </message> <message> <source>No query</source> @@ -5500,6 +5559,10 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>%1: ograniczenia rozmiarów narzucone przez system</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: zła nazwa</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: niedołączony</translation> </message> @@ -5509,7 +5572,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>%1: key error</source> - <translation>%1: błąd klucza</translation> + <translation type="obsolete">%1: błąd klucza</translation> </message> <message> <source>%1: size query failed</source> @@ -6491,6 +6554,10 @@ Proszę wybrać inną nazwę pliku.</translation> <name>QSoftKeyManager</name> <message> <source>Ok</source> + <translation type="obsolete">OK</translation> + </message> + <message> + <source>OK</source> <translation>OK</translation> </message> <message> @@ -6735,6 +6802,187 @@ Proszę wybrać inną nazwę pliku.</translation> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>Niepoprawna opcja: </translation> + </message> + <message> + <source>Error opening database</source> + <translation>Błąd otwierania bazy danych</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>POLICY_DB_DEFAULT musi być zdefiniowane przed użyciem definicji POLICY</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>Nie można rozpocząć transakcji</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>Nie można dokonać transakcji</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>Nie można wycofać transakcji</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>Błąd pobierania liczby kolumn</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>Błąd pobierania nazwy kolumny</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>Błąd pobierania typu kolumny</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>Nie można pobrać wiersza danych</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>Nie można wykonać polecenia</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>Polecenie nie jest przygotowane</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>Nie można zresetować polecenia</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>Nie można powiązać parametrów</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>Niezgodna liczba parametrów</translation> + </message> +</context> +<context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>Nie można zainicjalizować gniazda w trybie nieblokującym</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>Nie można zainicjalizować gniazda rozsyłającego</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Próba użycia IPv6 na platformie bez obsługi IPv6</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>Zdalny host zakończył połączenie</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>Przekroczony czas operacji sieciowej</translation> + </message> + <message> + <source>Out of resources</source> + <translation>Zasoby wyczerpane</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>Nieobsługiwana operacja gniazda</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>Nieobsługiwany typ protokołu</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>Niepoprawny opis gniazda</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>Host niedostępny</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>Sieć niedostępna</translation> + </message> + <message> + <source>Permission denied</source> + <translation>Brak uprawnień</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>Przekroczony czas połączenia</translation> + </message> + <message> + <source>Connection refused</source> + <translation>Połączenie odrzucone</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>Adres jest aktualnie w użyciu</translation> + </message> + <message> + <source>The address is not available</source> + <translation>Adres nie jest dostępny</translation> + </message> + <message> + <source>The address is protected</source> + <translation>Adres jest zabezpieczony</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>Datagram za długi do wysłania</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>Nie można wysłać wiadomości</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>Nie można odebrać wiadomości</translation> + </message> + <message> + <source>Unable to write</source> + <translation>Nie można zapisać</translation> + </message> + <message> + <source>Network error</source> + <translation>Błąd sieci</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>Inne gniazdo nasłuchuje już na tym porcie</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>Operacja na nieprawidłowym gnieździe</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>Typ pośrednika nie jest poprawny dla tej operacji</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>Niepoprawny adres dla tej operacji</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>Podana sesja sieciowa nie jest otwarta</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Nieznany błąd</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: out of resources</source> @@ -6753,6 +7001,10 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>%1: nie istnieje</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: błąd nazwy</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: nieznany błąd %2</translation> </message> @@ -6843,12 +7095,30 @@ Proszę wybrać inną nazwę pliku.</translation> <name>QUndoGroup</name> <message> <source>Redo</source> - <translation>Przywróć</translation> + <translation type="obsolete">Przywróć</translation> </message> <message> <source>Undo</source> + <translation type="obsolete">Cofnij</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Cofnij %1</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Cofnij</translation> </message> + <message> + <source>Redo %1</source> + <translation>Przywróć %1</translation> + </message> + <message> + <source>Redo</source> + <comment>Default text for redo action</comment> + <translation>Przywróć</translation> + </message> </context> <context> <name>QUndoModel</name> @@ -6861,12 +7131,30 @@ Proszę wybrać inną nazwę pliku.</translation> <name>QUndoStack</name> <message> <source>Redo</source> - <translation>Przywróć</translation> + <translation type="obsolete">Przywróć</translation> </message> <message> <source>Undo</source> + <translation type="obsolete">Cofnij</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Cofnij %1</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Cofnij</translation> </message> + <message> + <source>Redo %1</source> + <translation>Przywróć %1</translation> + </message> + <message> + <source>Redo</source> + <comment>Default text for redo action</comment> + <translation>Przywróć</translation> + </message> </context> <context> <name>QUnicodeControlCharacterMenu</name> @@ -6922,6 +7210,10 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Prośba anulowana</translation> </message> <message> + <source>Request canceled</source> + <translation>Prośba anulowana</translation> + </message> + <message> <source>Request blocked</source> <translation>Prośba zablokowana</translation> </message> @@ -6941,6 +7233,10 @@ Proszę wybrać inną nazwę pliku.</translation> <source>File does not exist</source> <translation>Plik nie istnieje</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>Ładowanie jest obsługiwane przez silnik mediów</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6957,7 +7253,7 @@ Proszę wybrać inną nazwę pliku.</translation> <message> <source>Reset</source> <comment>default label for Reset buttons in forms on web pages</comment> - <translation>Wyczyść</translation> + <translation>Zresetuj</translation> </message> <message> <source>Choose File</source> @@ -6970,6 +7266,11 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Nie zaznaczono pliku</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>Szczegóły</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>Otwórz w nowym oknie</translation> @@ -7000,6 +7301,61 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Skopiuj obrazek</translation> </message> <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>Skopiuj adres obrazka</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>Otwórz wideo</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>Otwórz dźwięk</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>Skopiuj wideo</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>Skopiuj dźwięk</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation type="unfinished"></translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation type="unfinished"></translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>Pełny ekran</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>Odtwórz</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>Pauza</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>Wycisz</translation> + </message> + <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>Otwórz ramkę</translation> @@ -7040,6 +7396,11 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Wklej</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>Zaznacz wszystko</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Nie odnaleziono podpowiedzi</translation> @@ -7379,7 +7740,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>Bad HTTP request</source> - <translation>Niepoprawna komenda HTTP</translation> + <translation type="obsolete">Niepoprawna komenda HTTP</translation> </message> <message> <source>This is a searchable index. Enter search keywords: </source> @@ -7532,7 +7893,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>Select all</source> - <translation>Zaznacz wszystko</translation> + <translation type="obsolete">Zaznacz wszystko</translation> </message> <message> <source>Select to the next character</source> @@ -8029,6 +8390,94 @@ Proszę wybrać inną nazwę pliku.</translation> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>Elementy</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>Odtwórz / wstrzymaj animacje</translation> + </message> + <message> + <source>Select</source> + <translation>Wybierz</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>Wybierz (Marquee)</translation> + </message> + <message> + <source>Zoom</source> + <translation>Powiększ</translation> + </message> + <message> + <source>Color Picker</source> + <translation>Wybieracz kolorów</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>Zastosuj zmiany do QML Viewera</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>Zastosuj zmiany do dokumentu</translation> + </message> + <message> + <source>Tools</source> + <translation>Narzędzia</translation> + </message> + <message> + <source>1x</source> + <translation>1x</translation> + </message> + <message> + <source>0.5x</source> + <translation>0.5x</translation> + </message> + <message> + <source>0.25x</source> + <translation>0.25x</translation> + </message> + <message> + <source>0.125x</source> + <translation>0.125x</translation> + </message> + <message> + <source>0.1x</source> + <translation>0.1x</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>Skopiuj kolor</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>Powiększ do &100%</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Powiększ</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Pomniejsz</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>Network timeout.</source> @@ -8351,6 +8800,10 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Cecha "Import modułu" nie jest obsługiwana</translation> </message> <message> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> + <translation>Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika nie może być pusta (spróbuj predefiniowany przedrostek %1, który stworzono specjalnie do takich sytuacji)</translation> + </message> + <message> <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> <translation>Przestrzeń nazw %1 jest zarezerwowana, dlatego funkcje zdefiniowane przez użytkownika nie mogą jej użyć. Spróbuj predefiniowany przedrostek %2, który istnieje w takich przypadkach.</translation> </message> @@ -8428,7 +8881,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika nie może być pusta (spróbuj predefiniowany przedrostek %1, który stworzono specjalnie do takich sytuacji)</translation> + <translation type="obsolete">Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika nie może być pusta (spróbuj predefiniowany przedrostek %1, który stworzono specjalnie do takich sytuacji)</translation> </message> <message> <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> @@ -9168,7 +9621,11 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> - <translation>Model zawartości typu złożonego %1 posiada element %2 więc nie może być on wywiedziony poprzez rozszerzenie niepustego typu.</translation> + <translation type="obsolete">Model zawartości typu złożonego %1 posiada element %2 więc nie może być on wywiedziony poprzez rozszerzenie niepustego typu.</translation> + </message> + <message> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> + <translation>Model zawartości typu złożonego %1, posiada element %2, więc nie może być on wywiedziony poprzez rozszerzenie niepustego typu.</translation> </message> <message> <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source> @@ -9757,7 +10214,7 @@ Proszę wybrać inną nazwę pliku.</translation> </message> <message> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> - <translation>Element %1 nie może zawierać innych elementów ponieważ posiada on stałą zawartość.</translation> + <translation type="obsolete">Element %1 nie może zawierać innych elementów ponieważ posiada on stałą zawartość.</translation> </message> <message> <source>Specified type %1 is not validly substitutable with element type %2.</source> @@ -9792,6 +10249,10 @@ Proszę wybrać inną nazwę pliku.</translation> <translation>Element %1 zawiera niedozwolony text.</translation> </message> <message> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> + <translation>Element %1 nie może zawierać innych elementów, ponieważ posiada on stałą zawartość.</translation> + </message> + <message> <source>Element %1 is missing required attribute %2.</source> <translation>Brak wymaganego atrybutu %2 w elemencie %1.</translation> </message> diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index 19c0544be5..348b1ce020 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -408,7 +408,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>Затухание отражений (мс)</translation> </message> <message> @@ -423,7 +423,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>Уровень эха (мБар)</translation> </message> <message> @@ -481,7 +481,7 @@ have libgstreamer-plugins-base installed.</source> <translation>Громкость: %1%</translation> </message> <message> - <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> <translation>Используйте данный регулятор для настройки громкости. Крайнее левое положение соответствует 0%, крайнее правое - %1%</translation> </message> <message> @@ -1264,7 +1264,7 @@ to </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> <message> <source>Unable to set autocommit</source> @@ -3262,7 +3262,7 @@ Please verify the correct directory name was given.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> </context> <context> @@ -3569,7 +3569,7 @@ Please verify the correct directory name was given.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> </context> <context> @@ -3722,6 +3722,10 @@ Please verify the correct directory name was given.</source> <source>Actions</source> <translation>Действия</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>Угловая панель</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -4062,7 +4066,7 @@ Please verify the correct directory name was given.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> </context> <context> @@ -4116,7 +4120,7 @@ Please verify the correct directory name was given.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> <message> <source>Unable to enable autocommit</source> @@ -4212,7 +4216,7 @@ Please verify the correct directory name was given.</source> </message> <message> <source>Could not rollback transaction</source> - <translation>Не удалось отозвать транзакцию</translation> + <translation>Не удалось откатить транзакцию</translation> </message> <message> <source>Unable to subscribe</source> @@ -5020,7 +5024,7 @@ Please choose a different file name.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> </context> <context> @@ -5054,7 +5058,7 @@ Please choose a different file name.</source> </message> <message> <source>Unable to rollback transaction</source> - <translation>Невозможно отозвать транзакцию</translation> + <translation>Невозможно откатить транзакцию</translation> </message> </context> <context> @@ -5510,15 +5514,15 @@ Please choose a different file name.</source> <message> <source>Space</source> <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment> - <translation type="unfinished">Пробел</translation> + <translation>Пробел</translation> </message> <message> <source>Esc</source> - <translation type="unfinished">Esc</translation> + <translation>Esc</translation> </message> <message> <source>Tab</source> - <translation type="unfinished">Tab</translation> + <translation>Tab</translation> </message> <message> <source>Backtab</source> @@ -5538,67 +5542,67 @@ Please choose a different file name.</source> </message> <message> <source>Ins</source> - <translation type="unfinished">Ins</translation> + <translation>Ins</translation> </message> <message> <source>Del</source> - <translation type="unfinished">Del</translation> + <translation>Del</translation> </message> <message> <source>Pause</source> - <translation type="unfinished">Pause</translation> + <translation>Pause</translation> </message> <message> <source>Print</source> - <translation type="unfinished">Print</translation> + <translation>Print</translation> </message> <message> <source>SysReq</source> - <translation type="unfinished">SysReq</translation> + <translation>SysReq</translation> </message> <message> <source>Home</source> - <translation type="unfinished">Home</translation> + <translation>Home</translation> </message> <message> <source>End</source> - <translation type="unfinished">End</translation> + <translation>End</translation> </message> <message> <source>Left</source> - <translation type="unfinished">Влево</translation> + <translation>Влево</translation> </message> <message> <source>Up</source> - <translation type="unfinished">Вверх</translation> + <translation>Вверх</translation> </message> <message> <source>Right</source> - <translation type="unfinished">Вправо</translation> + <translation>Вправо</translation> </message> <message> <source>Down</source> - <translation type="unfinished">Вниз</translation> + <translation>Вниз</translation> </message> <message> <source>PgUp</source> - <translation type="unfinished">PgUp</translation> + <translation>PgUp</translation> </message> <message> <source>PgDown</source> - <translation type="unfinished">PgDown</translation> + <translation>PgDown</translation> </message> <message> <source>CapsLock</source> - <translation type="unfinished">CapsLock</translation> + <translation>CapsLock</translation> </message> <message> <source>NumLock</source> - <translation type="unfinished">NumLock</translation> + <translation>NumLock</translation> </message> <message> <source>ScrollLock</source> - <translation type="unfinished">ScrollLock</translation> + <translation>ScrollLock</translation> </message> <message> <source>Menu</source> @@ -5626,15 +5630,15 @@ Please choose a different file name.</source> </message> <message> <source>Volume Down</source> - <translation type="unfinished">Тише</translation> + <translation>Тише</translation> </message> <message> <source>Volume Mute</source> - <translation type="unfinished">Выключить звук</translation> + <translation>Выключить звук</translation> </message> <message> <source>Volume Up</source> - <translation type="unfinished">Громче</translation> + <translation>Громче</translation> </message> <message> <source>Bass Boost</source> @@ -5696,7 +5700,7 @@ Please choose a different file name.</source> </message> <message> <source>Standby</source> - <translation type="unfinished">Режим ожидания</translation> + <translation>Режим ожидания</translation> </message> <message> <source>Open URL</source> @@ -5776,31 +5780,31 @@ Please choose a different file name.</source> </message> <message> <source>Monitor Brightness Up</source> - <translation type="unfinished">Увеличить яркость монитора</translation> + <translation>Увеличить яркость монитора</translation> </message> <message> <source>Monitor Brightness Down</source> - <translation type="unfinished">Уменьшить яркость монитора</translation> + <translation>Уменьшить яркость монитора</translation> </message> <message> <source>Keyboard Light On/Off</source> - <translation type="unfinished">Вкл./Откл. подсветку клавиатуры</translation> + <translation>Вкл./Откл. подсветку клавиатуры</translation> </message> <message> <source>Keyboard Brightness Up</source> - <translation type="unfinished">Увеличить яркость подсветки клавиатуры</translation> + <translation>Увеличить яркость подсветки клавиатуры</translation> </message> <message> <source>Keyboard Brightness Down</source> - <translation type="unfinished">Уменьшить яркость подсветки клавиатуры</translation> + <translation>Уменьшить яркость подсветки клавиатуры</translation> </message> <message> <source>Power Off</source> - <translation type="unfinished">Отключение питания</translation> + <translation>Отключение питания</translation> </message> <message> <source>Wake Up</source> - <translation type="unfinished">Пробуждение</translation> + <translation>Пробуждение</translation> </message> <message> <source>Eject</source> @@ -5856,7 +5860,7 @@ Please choose a different file name.</source> </message> <message> <source>Back Forward</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Назад/вперёд</translation> </message> <message> <source>Application Left</source> @@ -5900,7 +5904,7 @@ Please choose a different file name.</source> </message> <message> <source>Display</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Отобразить</translation> </message> <message> <source>DOS</source> @@ -6355,7 +6359,7 @@ Please choose a different file name.</source> <message> <source>Hangup</source> <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment> - <translation type="unfinished">Положить трубку</translation> + <translation type="unfinished">Отбой</translation> </message> <message> <source>Flip</source> @@ -6363,23 +6367,23 @@ Please choose a different file name.</source> </message> <message> <source>Ctrl</source> - <translation></translation> + <translation>Ctrl</translation> </message> <message> <source>Shift</source> - <translation></translation> + <translation>Shift</translation> </message> <message> <source>Alt</source> - <translation></translation> + <translation>Alt</translation> </message> <message> <source>Meta</source> - <translation></translation> + <translation>Meta</translation> </message> <message> <source>+</source> - <translation></translation> + <translation>+</translation> </message> <message> <source>F%1</source> @@ -6475,8 +6479,8 @@ Please choose a different file name.</source> <context> <name>QSoftKeyManager</name> <message> - <source>Ok</source> - <translation>ОК</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> <source>Select</source> @@ -6720,6 +6724,72 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>Неверный параметр: </translation> + </message> + <message> + <source>Error opening database</source> + <translation>Ошибка открытия базы данных</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>POLICY_DB_DEFAULT должна быть задана до начала использования других определений POLICY</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>Невозможно начать транзакцию</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>Невозможно завершить транзакцию</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>Невозможно откатить транзакцию</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>Ошибка получения количества колонок</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>Ошибка получения названия колонки</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>Ошибка получения типа колонки</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>Невозможно получить строку</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>Невозможно выполнить выражение</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>Выражение не подготовлено</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>Невозможно сбросить выражение</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>Невозможно привязать параметр</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>Количество параметров не совпадает</translation> + </message> +</context> +<context> <name>QSymbianSocketEngine</name> <message> <source>Unable to initialize non-blocking socket</source> @@ -7046,6 +7116,10 @@ Please choose a different file name.</source> <translation>Запрос отменён</translation> </message> <message> + <source>Request canceled</source> + <translation>Запрос отменён</translation> + </message> + <message> <source>Request blocked</source> <translation>Запрос блокирован</translation> </message> @@ -7409,12 +7483,12 @@ Please choose a different file name.</source> <message> <source>Toggle Controls</source> <comment>Toggle Media Controls</comment> - <translation type="unfinished">Вкл/выкл управление</translation> + <translation>Вкл/выкл управление</translation> </message> <message> <source>Toggle Loop</source> <comment>Toggle Media Loop Playback</comment> - <translation type="unfinished">Вкл/выкл зацикленность</translation> + <translation>Вкл/выкл зацикленность</translation> </message> <message> <source>Enter Fullscreen</source> @@ -8289,13 +8363,6 @@ Please choose a different file name.</source> </message> </context> <context> - <name>QmlJSDebugger::ToolBox</name> - <message> - <source>Qt Quick Toolbox</source> - <translation>Инструментарий Qt Quick</translation> - </message> -</context> -<context> <name>QmlJSDebugger::ZoomTool</name> <message> <source>Zoom to &100%</source> @@ -8729,6 +8796,10 @@ Please choose a different file name.</source> <translation>Функция стилей должна иметь имя с префиксом.</translation> </message> <message> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> + <translation>Пространство имён для функции пользователя не может быть пустым (попробуйте предопределённый префикс %1, созданный для подобных случаев)</translation> + </message> + <message> <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> <translation>Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределённый префикс %2, который существует для подобных ситуаций.</translation> </message> @@ -8885,10 +8956,6 @@ Please choose a different file name.</source> <translation>Корневой узел второго аргумента функции %1 должен быть документом. %2 не является документом.</translation> </message> <message> - <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределённый префикс %1, который существует для подобных ситуаций)</translation> - </message> - <message> <source>A default namespace declaration must occur before function, variable, and option declarations.</source> <translation>Объявление пространство имён по умолчанию должно быть до объявления функций, переменных и опций.</translation> </message> @@ -9449,7 +9516,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> <translation type="unfinished"></translation> </message> <message> @@ -10037,10 +10104,6 @@ Please choose a different file name.</source> <translation>Для обнуляемых элементов недопустимо ограничение фиксированным значением.</translation> </message> <message> - <source>Element %1 cannot contain other elements, as it has a fixed content.</source> - <translation type="unfinished">Элемент %1 не может содержать другие элементы, т.к. имеет статическое содержимое.</translation> - </message> - <message> <source>Specified type %1 is not validly substitutable with element type %2.</source> <translation>Указанный тип %1 не может быть корректно замещён элементом типа %2.</translation> </message> @@ -10073,6 +10136,10 @@ Please choose a different file name.</source> <translation>Элемент %1 содержит недопустимое текстовое содержимое.</translation> </message> <message> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> + <translation>Элемент %1 не может содержать другие элементы, так как у него фиксированное содержимое.</translation> + </message> + <message> <source>Element %1 is missing required attribute %2.</source> <translation>У элемента %1 отсутствует необходимый атрибут %2.</translation> </message> @@ -10110,11 +10177,11 @@ Please choose a different file name.</source> </message> <message> <source>Key constraint %1 contains absent fields.</source> - <translation type="unfinished">Ограничение на ключ %1 содержит недостающие поля.</translation> + <translation>Ограничение на ключ %1 содержит недостающие поля.</translation> </message> <message> <source>Key constraint %1 contains references nillable element %2.</source> - <translation type="unfinished"></translation> + <translation>Ограничение на ключ %1 содержит ссылки на обнуляемый элемент %2.</translation> </message> <message> <source>No referenced value found for key reference %1.</source> @@ -10134,7 +10201,7 @@ Please choose a different file name.</source> </message> <message> <source>'%1' attribute contains invalid QName content: %2.</source> - <translation type="unfinished">Атрибут `%1` имеет некорректное содержимое QName: %2.</translation> + <translation>Атрибут «%1» имеет некорректное содержимое QName: %2.</translation> </message> </context> </TS> diff --git a/translations/qt_uk.ts b/translations/qt_uk.ts index c3cfec0bbf..44f6d69f70 100644 --- a/translations/qt_uk.ts +++ b/translations/qt_uk.ts @@ -9,10 +9,21 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[Масив довжини %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><не визначено></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> - <source>Fake error !</source> - <translation>Несправжня помилка !</translation> + <source>Fake error!</source> + <translation>Несправжня помилка!</translation> </message> <message> <source>Invalid URL</source> @@ -397,7 +408,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>Затримка відбиття (мс)</translation> </message> <message> @@ -412,7 +423,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>Рівень луни (мБ)</translation> </message> <message> @@ -470,7 +481,7 @@ have libgstreamer-plugins-base installed.</source> <translation>Гучність: %1%</translation> </message> <message> - <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> <translation>Використовуйте цей повзунок для регулювання гучності. Крайня ліва позиція - 0%, крайня права - %1%</translation> </message> <message> @@ -1062,6 +1073,14 @@ to <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>Зняти відмітку</translation> + </message> + <message> + <source>Check</source> + <translation>Відмітити</translation> + </message> + <message> <source>Press</source> <translation>Натисніть</translation> </message> @@ -2450,6 +2469,10 @@ to <source>Cannot create %1 for output</source> <translation>Неможливо створити %1 для виводу</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>Жодний файловий рушій не є доступним або підтримує UnMapExtension</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -3411,6 +3434,18 @@ Do you want to delete it anyway?</source> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>Неможливо розв’язати символ "%1" в %2: %3</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>'%1' не є об'єктом ELF (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>'%1' не є об'єктом ELF</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>'%1' є неправильним об'єктом ELF (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3508,6 +3543,10 @@ Do you want to delete it anyway?</source> <source>%1: Unknown error %2</source> <translation>%1: Невідома помилка %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: Доступ заборонено</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3682,6 +3721,10 @@ Do you want to delete it anyway?</source> <source>Actions</source> <translation>Дії</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>Кутова панель</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -3849,10 +3892,6 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkAccessDataBackend</name> <message> - <source>Operation not supported on %1</source> - <translation>Непідтримувана для %1 операція</translation> - </message> - <message> <source>Invalid URI: %1</source> <translation>Неправильний URI: %1</translation> </message> @@ -3947,6 +3986,10 @@ Do you want to delete it anyway?</source> <translation>Помилка мережевої сесії.</translation> </message> <message> + <source>backend start error.</source> + <translation>помилка запуску драйвера.</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>Тимчасовий збій мережі.</translation> </message> @@ -4139,6 +4182,10 @@ Do you want to delete it anyway?</source> <source>invalid query: "%1"</source> <translation>неправильний запит "%1"</translation> </message> + <message> + <source>Host not found</source> + <translation>Вузол не знайдено</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -5424,10 +5471,6 @@ Do you want to overwrite it?</source> <translation>%1: невідома помилка %2</translation> </message> <message> - <source>%1: key error</source> - <translation>%1: помилка ключа</translation> - </message> - <message> <source>%1: unable to make key</source> <translation>%1: неможливо створити ключ</translation> </message> @@ -5452,6 +5495,10 @@ Do you want to overwrite it?</source> <translation>%1: обмеження розміру встановлені системою</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: пагане ім'я</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: не прикріплено</translation> </message> @@ -6430,8 +6477,8 @@ Do you want to overwrite it?</source> <context> <name>QSoftKeyManager</name> <message> - <source>Ok</source> - <translation>Ok</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> <source>Select</source> @@ -6675,6 +6722,187 @@ Do you want to overwrite it?</source> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>Неправильна опція: </translation> + </message> + <message> + <source>Error opening database</source> + <translation>Помилка відкриття бази даних</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>POLICY_DB_DEFAULT повинна бути визначена до того, як будь-які інші визначення POLICY можуть бути використані</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>Неможливо почати транзакцію</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>Неможливо завершити транзакцію</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>Неможливо відкотити транзакцію</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>Помилка отримання кількості стовпців</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>Помилка отримання назви стовпця</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>Помилка отримання типу стовпця</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>Неможливо отримати рядок</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>Неможливо виконати вираз</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>Вираз не підготовлено</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>Неможливо скинути вираз</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>Неможливо прив'язати параметри</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>Кількість параметрів не збігається</translation> + </message> +</context> +<context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>Неможливо ініціалізувати неблокувальний сокет</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>Неможливо ініціалізувати широкомовний сокет</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Спроба використати сокет IPv6 на платформі без підтримки IPv6</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>Віддалений вузол закрив з’єднання</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>Час на мережеву операцію вичерпано</translation> + </message> + <message> + <source>Out of resources</source> + <translation>Недостатньо ресурсів</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>Непідтримувана для сокета операція</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>Тип протоколу не підтримується</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>Неправильний дескриптор сокета</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>Вузол недоступний</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>Мережа недоступна</translation> + </message> + <message> + <source>Permission denied</source> + <translation>Доступ заборонено</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>Час на з’єднання вичерпано</translation> + </message> + <message> + <source>Connection refused</source> + <translation>У з'єднанні відмовлено</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>Адреса вже використовується</translation> + </message> + <message> + <source>The address is not available</source> + <translation>Адреса не доступна</translation> + </message> + <message> + <source>The address is protected</source> + <translation>Адреса захищена</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>Датаграма завелика, щоб надіслати</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>Неможливо надіслати повідомлення</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>Неможливо отримати повідомлення</translation> + </message> + <message> + <source>Unable to write</source> + <translation>Неможливо записати</translation> + </message> + <message> + <source>Network error</source> + <translation>Помилка мережі</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>Інший сокет вже слухає цей самий порт</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>Операція з не-сокетом</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>Неправильний тип проксі-серверу для цієї операції</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>Неправильна адреса для цієї операції</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>Вказаний мережевий сеанс не відкрито</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Невідома помилка</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: permission denied</source> @@ -6693,6 +6921,10 @@ Do you want to overwrite it?</source> <translation>%1: недостатньо ресурсів</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: помилка імені</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: невідома помилка %2</translation> </message> @@ -6782,11 +7014,21 @@ Do you want to overwrite it?</source> <context> <name>QUndoGroup</name> <message> + <source>Undo %1</source> + <translation>Повернути %1</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Повернути</translation> </message> <message> + <source>Redo %1</source> + <translation>Повторити %1</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>Повторити</translation> </message> </context> @@ -6800,11 +7042,21 @@ Do you want to overwrite it?</source> <context> <name>QUndoStack</name> <message> + <source>Undo %1</source> + <translation>Повернути %1</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Повернути</translation> </message> <message> + <source>Redo %1</source> + <translation>Повторити %1</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>Повторити</translation> </message> </context> @@ -6862,6 +7114,10 @@ Do you want to overwrite it?</source> <translation>Запит скасовано</translation> </message> <message> + <source>Request canceled</source> + <translation>Запит скасовано</translation> + </message> + <message> <source>Request blocked</source> <translation>Запит блоковано</translation> </message> @@ -6881,6 +7137,10 @@ Do you want to overwrite it?</source> <source>File does not exist</source> <translation>Файл не існує</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>Звантаження оброблене рушієм мультимедіа</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6888,10 +7148,6 @@ Do you want to overwrite it?</source> <source>Redirection limit reached</source> <translation>Ліміт перенаправлень вичерпано</translation> </message> - <message> - <source>Bad HTTP request</source> - <translation>Поганий запит HTTP</translation> - </message> <message numerus="yes"> <source>%n file(s)</source> <comment>number of chosen file</comment> @@ -6932,6 +7188,11 @@ Do you want to overwrite it?</source> <translation>Файл не обрано</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>Деталі</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>Відкрити в новому вікні</translation> @@ -6962,6 +7223,61 @@ Do you want to overwrite it?</source> <translation>Копіювати зображення</translation> </message> <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>Скопіювати адресу зображення</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>Відкрити відео</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>Відкрити аудіо</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>Копіювати відео</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>Копіювати аудіо</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation>Увімкнути/викнути управління</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation>Увімкнути/викнути програвання по колу</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>На повний екран</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>Грати</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>Пауза</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>Без звуку</translation> + </message> + <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>Відкрити фрейм</translation> @@ -7002,6 +7318,11 @@ Do you want to overwrite it?</source> <translation>Вставити</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>Виділити все</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Підказок не знайдено</translation> @@ -7467,10 +7788,6 @@ Do you want to overwrite it?</source> <translation>Пересунути курсор в кінець документа</translation> </message> <message> - <source>Select all</source> - <translation>Виділити все</translation> - </message> - <message> <source>Select to the next character</source> <translation>Виділити до наступного символу</translation> </message> @@ -7969,6 +8286,94 @@ Do you want to overwrite it?</source> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>Елементи</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>Режим інспектора</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>Грати/зупинити анімації</translation> + </message> + <message> + <source>Select</source> + <translation>Обрати</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>Обрати (Marquee)</translation> + </message> + <message> + <source>Zoom</source> + <translation>Масштабувати</translation> + </message> + <message> + <source>Color Picker</source> + <translation>Вибір кольору</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>Застосувати зміни до переглядача QML</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>Застосувати зміни до документа</translation> + </message> + <message> + <source>Tools</source> + <translation>Інструменти</translation> + </message> + <message> + <source>1x</source> + <translation></translation> + </message> + <message> + <source>0.5x</source> + <translation></translation> + </message> + <message> + <source>0.25x</source> + <translation></translation> + </message> + <message> + <source>0.125x</source> + <translation></translation> + </message> + <message> + <source>0.1x</source> + <translation></translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>Копіювати колір</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>Масштабувати до &100%</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Збільшити</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Зменшити</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>%1 is an unsupported encoding.</source> @@ -8431,7 +8836,7 @@ Do you want to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> <translation type="unfinished"></translation> </message> <message> @@ -9275,7 +9680,7 @@ Do you want to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> <translation type="unfinished"></translation> </message> <message> @@ -9683,7 +10088,7 @@ Do you want to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> <translation type="unfinished"></translation> </message> <message> diff --git a/translations/qtconfig_ko.ts b/translations/qtconfig_ko.ts index 9708a22b6c..fc139ed349 100644 --- a/translations/qtconfig_ko.ts +++ b/translations/qtconfig_ko.ts @@ -36,6 +36,10 @@ <translation>On The Spot</translation> </message> <message> + <source>Unknown</source> + <translation>알 수 없음</translation> + </message> + <message> <source>Auto (default)</source> <translation>자동 (기본값)</translation> </message> @@ -92,6 +96,14 @@ <translation>변경 사항 저장하는 중...</translation> </message> <message> + <source>Saved changes.</source> + <translation>변경 사항을 저장하였습니다.</translation> + </message> + <message> + <source><h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation><h3>%1</h3><br/>버전 %2<br/><br/>저작권자 (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</translation> + </message> + <message> <source>Over The Spot</source> <translation>Over The Spot</translation> </message> @@ -109,7 +121,7 @@ </message> <message> <source><h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation><h3>%1</h3><br/>버전 %2<br/><br/>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> + <translation type="obsolete"><h3>%1</h3><br/>버전 %2<br/><br/>저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation> </message> <message> <source>Qt Configuration</source> @@ -125,22 +137,15 @@ </message> <message> <source>&Yes</source> - <translation>예(&Y)</translation> + <translation type="obsolete">예(&Y)</translation> </message> <message> <source>&No</source> - <translation>아니오(&N)</translation> + <translation type="obsolete">아니오(&N)</translation> </message> <message> <source>&Cancel</source> - <translation>취소(&C)</translation> - </message> -</context> -<context> - <name>MainWindowBase</name> - <message> - <source>Qt Configuration</source> - <translation>Qt 설정</translation> + <translation type="obsolete">취소(&C)</translation> </message> <message> <source>Appearance</source> @@ -179,8 +184,8 @@ <translation>팔레트 생성</translation> </message> <message> - <source>&3-D Effects:</source> - <translation>3차원 효과(&3):</translation> + <source>&Button Background:</source> + <translation>단추 배경(&B):</translation> </message> <message> <source>Window Back&ground:</source> @@ -351,64 +356,407 @@ <translation>XIM 입력 방식:</translation> </message> <message> + <source>Default Input Method:</source> + <translation>기본 입력기:</translation> + </message> + <message> + <source>Printer</source> + <translation>프린터</translation> + </message> + <message> + <source>Enable Font embedding</source> + <translation>글꼴 임베딩 사용하기</translation> + </message> + <message> + <source>Font Paths</source> + <translation>글꼴 경로</translation> + </message> + <message> + <source>Browse...</source> + <translation>찾아보기...</translation> + </message> + <message> + <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> + <translation><b>찾아보기</b> 단추를 누르거나 디렉터리를 입력하고 Enter 키를 눌러서 목록에 추가할 수 있습니다.</translation> + </message> + <message> + <source>Phonon</source> + <translation>Phonon</translation> + </message> + <message> + <source>About Phonon</source> + <translation>Phonon 정보</translation> + </message> + <message> + <source>Current Version:</source> + <translation>현재 버전:</translation> + </message> + <message> + <source>Not available</source> + <translation>사용할 수 없음</translation> + </message> + <message> + <source>Website:</source> + <translation>웹 사이트:</translation> + </message> + <message> + <source><a href="http://phonon.kde.org">http://phonon.kde.org/</a></source> + <translation><a href="http://phonon.kde.org">http://phonon.kde.org/</a></translation> + </message> + <message> + <source>About GStreamer</source> + <translation>GStreamer 정보</translation> + </message> + <message> + <source><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></source> + <translation><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></translation> + </message> + <message> + <source>GStreamer backend settings</source> + <translation>GStreamer 백엔드 설정</translation> + </message> + <message> + <source>Preferred audio sink:</source> + <translation>선호하는 오디오 싱크:</translation> + </message> + <message> + <source>Preferred render method:</source> + <translation>선호하는 렌더링 방법:</translation> + </message> + <message> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">메모: 이 설정을 변경하면 프로그램이 시작되지 않을 수도 있습니다.</span></p></body></html></translation> + </message> + <message> + <source>&File</source> + <translation>파일(&F)</translation> + </message> + <message> + <source>&Help</source> + <translation>도움말(&H)</translation> + </message> + <message> + <source>&Save</source> + <translation>저장(&S)</translation> + </message> + <message> + <source>Save</source> + <translation>저장</translation> + </message> + <message> + <source>Ctrl+S</source> + <translation>Ctrl+S</translation> + </message> + <message> + <source>E&xit</source> + <translation>끝내기(&X)</translation> + </message> + <message> + <source>Exit</source> + <translation>끝내기</translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> + <source>&About</source> + <translation>정보(&A)</translation> + </message> + <message> + <source>About</source> + <translation>정보</translation> + </message> + <message> + <source>About &Qt</source> + <translation>Qt 정보(&Q)</translation> + </message> + <message> + <source>About Qt</source> + <translation>Qt 정보</translation> + </message> +</context> +<context> + <name>MainWindowBase</name> + <message> + <source>Qt Configuration</source> + <translation type="obsolete">Qt 설정</translation> + </message> + <message> + <source>Appearance</source> + <translation type="obsolete">모양</translation> + </message> + <message> + <source>GUI Style</source> + <translation type="obsolete">GUI 스타일</translation> + </message> + <message> + <source>Select GUI &Style:</source> + <translation type="obsolete">GUI 스타일 선택(&S):</translation> + </message> + <message> + <source>Preview</source> + <translation type="obsolete">미리 보기</translation> + </message> + <message> + <source>Select &Palette:</source> + <translation type="obsolete">팔레트 선택(&P):</translation> + </message> + <message> + <source>Active Palette</source> + <translation type="obsolete">활성 팔레트</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation type="obsolete">비활성 팔레트</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation type="obsolete">사용 불가 팔레트</translation> + </message> + <message> + <source>Build Palette</source> + <translation type="obsolete">팔레트 생성</translation> + </message> + <message> + <source>&3-D Effects:</source> + <translation type="obsolete">3차원 효과(&3):</translation> + </message> + <message> + <source>Window Back&ground:</source> + <translation type="obsolete">창 배경(&G):</translation> + </message> + <message> + <source>&Tune Palette...</source> + <translation type="obsolete">팔레트 조정(&T)...</translation> + </message> + <message> + <source>Please use the KDE Control Center to set the palette.</source> + <translation type="obsolete">KDE 제어판에서 팔레트를 조정하십시오.</translation> + </message> + <message> + <source>Fonts</source> + <translation type="obsolete">글꼴</translation> + </message> + <message> + <source>Default Font</source> + <translation type="obsolete">기본 글꼴</translation> + </message> + <message> + <source>&Style:</source> + <translation type="obsolete">스타일(&S):</translation> + </message> + <message> + <source>&Point Size:</source> + <translation type="obsolete">포인트 크기(&P):</translation> + </message> + <message> + <source>F&amily:</source> + <translation type="obsolete">종류(&A):</translation> + </message> + <message> + <source>Sample Text</source> + <translation type="obsolete">견본 텍스트</translation> + </message> + <message> + <source>Font Substitution</source> + <translation type="obsolete">글꼴 대체</translation> + </message> + <message> + <source>S&elect or Enter a Family:</source> + <translation type="obsolete">글꼴을 선택하거나 입력하십시오(&E):</translation> + </message> + <message> + <source>Current Substitutions:</source> + <translation type="obsolete">현재 대체 목록:</translation> + </message> + <message> + <source>Up</source> + <translation type="obsolete">위로</translation> + </message> + <message> + <source>Down</source> + <translation type="obsolete">아래로</translation> + </message> + <message> + <source>Remove</source> + <translation type="obsolete">삭제</translation> + </message> + <message> + <source>Select s&ubstitute Family:</source> + <translation type="obsolete">대체할 글꼴을 선택하십시오(&U):</translation> + </message> + <message> + <source>Add</source> + <translation type="obsolete">추가</translation> + </message> + <message> + <source>Interface</source> + <translation type="obsolete">인터페이스</translation> + </message> + <message> + <source>Feel Settings</source> + <translation type="obsolete">모양 설정</translation> + </message> + <message> + <source> ms</source> + <translation type="obsolete"> ms</translation> + </message> + <message> + <source>&Double Click Interval:</source> + <translation type="obsolete">두 번 누름 간격(&D):</translation> + </message> + <message> + <source>No blinking</source> + <translation type="obsolete">깜빡임 없음</translation> + </message> + <message> + <source>&Cursor Flash Time:</source> + <translation type="obsolete">커서 깜빡임 시간(&C):</translation> + </message> + <message> + <source> lines</source> + <translation type="obsolete"> 줄</translation> + </message> + <message> + <source>Wheel &Scroll Lines:</source> + <translation type="obsolete">휠 스크롤 줄 수(&S):</translation> + </message> + <message> + <source>Resolve symlinks in URLs</source> + <translation type="obsolete">URL의 심볼릭 링크 따라가기</translation> + </message> + <message> + <source>GUI Effects</source> + <translation type="obsolete">GUI 효과</translation> + </message> + <message> + <source>&Enable</source> + <translation type="obsolete">활성화(&E)</translation> + </message> + <message> + <source>Alt+E</source> + <translation type="obsolete">Alt+E</translation> + </message> + <message> + <source>&Menu Effect:</source> + <translation type="obsolete">메뉴 효과(&M):</translation> + </message> + <message> + <source>C&omboBox Effect:</source> + <translation type="obsolete">콤보 상자 효과(&O):</translation> + </message> + <message> + <source>&ToolTip Effect:</source> + <translation type="obsolete">풍선 도움말 효과(&T):</translation> + </message> + <message> + <source>Tool&Box Effect:</source> + <translation type="obsolete">도구 상자 효과(&B):</translation> + </message> + <message> + <source>Disable</source> + <translation type="obsolete">사용 안함</translation> + </message> + <message> + <source>Animate</source> + <translation type="obsolete">애니메이션</translation> + </message> + <message> + <source>Fade</source> + <translation type="obsolete">페이드</translation> + </message> + <message> + <source>Global Strut</source> + <translation type="obsolete">크기 제한</translation> + </message> + <message> + <source>Minimum &Width:</source> + <translation type="obsolete">최소 폭(&W):</translation> + </message> + <message> + <source>Minimum Hei&ght:</source> + <translation type="obsolete">최소 높이(&G):</translation> + </message> + <message> + <source> pixels</source> + <translation type="obsolete"> 픽셀</translation> + </message> + <message> + <source>Enhanced support for languages written right-to-left</source> + <translation type="obsolete">오른쪽에서 왼쪽으로 쓰는 언어 지원 향상</translation> + </message> + <message> + <source>XIM Input Style:</source> + <translation type="obsolete">XIM 입력 방식:</translation> + </message> + <message> <source>On The Spot</source> - <translation>On The Spot</translation> + <translation type="obsolete">On The Spot</translation> </message> <message> <source>Over The Spot</source> - <translation>Over The Spot</translation> + <translation type="obsolete">Over The Spot</translation> </message> <message> <source>Off The Spot</source> - <translation>Off The Spot</translation> + <translation type="obsolete">Off The Spot</translation> </message> <message> <source>Root</source> - <translation>루트</translation> + <translation type="obsolete">루트</translation> </message> <message> <source>Default Input Method:</source> - <translation>기본 입력기:</translation> + <translation type="obsolete">기본 입력기:</translation> </message> <message> <source>Printer</source> - <translation>프린터</translation> + <translation type="obsolete">프린터</translation> </message> <message> <source>Enable Font embedding</source> - <translation>글꼴 임베딩 사용하기</translation> + <translation type="obsolete">글꼴 임베딩 사용하기</translation> </message> <message> <source>Font Paths</source> - <translation>글꼴 경로</translation> + <translation type="obsolete">글꼴 경로</translation> </message> <message> <source>Browse...</source> - <translation>찾아보기...</translation> + <translation type="obsolete">찾아보기...</translation> </message> <message> <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> - <translation><b>찾아보기</b> 단추를 누르거나 디렉터리를 입력하고 Enter 키를 눌러서 목록에 추가할 수 있습니다.</translation> + <translation type="obsolete"><b>찾아보기</b> 단추를 누르거나 디렉터리를 입력하고 Enter 키를 눌러서 목록에 추가할 수 있습니다.</translation> </message> <message> <source>Phonon</source> - <translation>Phonon</translation> + <translation type="obsolete">Phonon</translation> </message> <message> <source>About Phonon</source> - <translation>Phonon 정보</translation> + <translation type="obsolete">Phonon 정보</translation> </message> <message> <source>Current Version:</source> - <translation>현재 버전:</translation> + <translation type="obsolete">현재 버전:</translation> </message> <message> <source>Not available</source> - <translation>사용할 수 없음</translation> + <translation type="obsolete">사용할 수 없음</translation> </message> <message> <source>Website:</source> - <translation>웹 사이트:</translation> + <translation type="obsolete">웹 사이트:</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -416,7 +764,7 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -424,7 +772,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>About GStreamer</source> - <translation>GStreamer 정보</translation> + <translation type="obsolete">GStreamer 정보</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -432,7 +780,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -440,15 +788,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>GStreamer backend settings</source> - <translation>GStreamer 백엔드 설정</translation> + <translation type="obsolete">GStreamer 백엔드 설정</translation> </message> <message> <source>Preferred audio sink:</source> - <translation>선호하는 오디오 싱크:</translation> + <translation type="obsolete">선호하는 오디오 싱크:</translation> </message> <message> <source>Preferred render method:</source> - <translation>선호하는 렌더링 방법:</translation> + <translation type="obsolete">선호하는 렌더링 방법:</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -456,7 +804,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -464,60 +812,56 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&File</source> - <translation>파일(&F)</translation> + <translation type="obsolete">파일(&F)</translation> </message> <message> <source>&Help</source> - <translation>도움말(&H)</translation> + <translation type="obsolete">도움말(&H)</translation> </message> <message> <source>&Save</source> - <translation>저장(&S)</translation> + <translation type="obsolete">저장(&S)</translation> </message> <message> <source>Save</source> - <translation>저장</translation> + <translation type="obsolete">저장</translation> </message> <message> <source>Ctrl+S</source> - <translation>Ctrl+S</translation> + <translation type="obsolete">Ctrl+S</translation> </message> <message> <source>E&xit</source> - <translation>끝내기(&X)</translation> + <translation type="obsolete">끝내기(&X)</translation> </message> <message> <source>Exit</source> - <translation>끝내기</translation> + <translation type="obsolete">끝내기</translation> </message> <message> <source>&About</source> - <translation>정보(&A)</translation> + <translation type="obsolete">정보(&A)</translation> </message> <message> <source>About</source> - <translation>정보</translation> + <translation type="obsolete">정보</translation> </message> <message> <source>About &Qt</source> - <translation>Qt 정보(&Q)</translation> + <translation type="obsolete">Qt 정보(&Q)</translation> </message> <message> <source>About Qt</source> - <translation>Qt 정보</translation> + <translation type="obsolete">Qt 정보</translation> </message> </context> <context> - <name>PaletteEditorAdvancedBase</name> + <name>PaletteEditorAdvanced</name> <message> <source>Tune Palette</source> <translation>팔레트 조정</translation> </message> <message> - <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> - <translation><b>팔레트 조정</b><p>현재 위젯이나 폼의 팔레트를 변경합니다.</p><p>생성된 팔레트를 사용하거나, 각각 색상 그룹과 역할의 색을 선택하십시오.</p><p>미리 보기 섹션의 여러 위젯 레이아웃으로 팔레트를 테스트할 수 있습니다.</p></translation> - </message> - <message> <source>Select &Palette:</source> <translation>팔레트 선택(&P):</translation> </message> @@ -566,26 +910,38 @@ p, li { white-space: pre-wrap; } <translation>창 텍스트</translation> </message> <message> - <source>Button</source> - <translation>단추</translation> - </message> - <message> <source>Base</source> <translation>기본</translation> </message> <message> + <source>AlternateBase</source> + <translation>대체 텍스트</translation> + </message> + <message> + <source>ToolTipBase</source> + <translation>풍선 도움말 기본</translation> + </message> + <message> + <source>ToolTipText</source> + <translation>풍선 도움말 텍스트</translation> + </message> + <message> <source>Text</source> <translation>텍스트</translation> </message> <message> - <source>BrightText</source> - <translation>밝은 텍스트</translation> + <source>Button</source> + <translation>단추</translation> </message> <message> <source>ButtonText</source> <translation>단추 텍스트</translation> </message> <message> + <source>BrightText</source> + <translation>밝은 텍스트</translation> + </message> + <message> <source>Highlight</source> <translation>강조</translation> </message> @@ -594,26 +950,22 @@ p, li { white-space: pre-wrap; } <translation>강조된 텍스트</translation> </message> <message> - <source>&Select Color:</source> - <translation>색 선택(&S):</translation> + <source>Link</source> + <translation>링크</translation> </message> <message> - <source>Choose a color</source> - <translation>색 선택</translation> + <source>LinkVisited</source> + <translation>방문한 링크</translation> </message> <message> - <source>Choose a color for the selected central color role.</source> - <translation>중심 색상 역할에 사용할 색상을 선택하십시오.</translation> + <source>&Select Color:</source> + <translation>색 선택(&S):</translation> </message> <message> <source>3-D shadow &effects</source> <translation>3차원 그림자 효과(&E)</translation> </message> <message> - <source>Build &from button color</source> - <translation>단추 색상에서 생성(&F)</translation> - </message> - <message> <source>Generate shadings</source> <translation>그림자 생성</translation> </message> @@ -622,6 +974,10 @@ p, li { white-space: pre-wrap; } <translation>3차원 효과 색상을 단추 색상에서 생성하려면 누르십시오.</translation> </message> <message> + <source>Build &from button color</source> + <translation>단추 색상에서 생성(&F)</translation> + </message> + <message> <source>Choose 3D-effect color role</source> <translation>3차원 효과 색상 역할 선택</translation> </message> @@ -654,24 +1010,183 @@ p, li { white-space: pre-wrap; } <translation>색 선택(&L):</translation> </message> <message> + <source>Choose a color</source> + <translation>색 선택</translation> + </message> + <message> + <source>Choose a color for the selected central color role.</source> + <translation>중심 색상 역할에 사용할 색상을 선택하십시오.</translation> + </message> + <message> <source>Choose a color for the selected effect color role.</source> <translation>선택한 효과 색상 역할에 사용할 색을 선택하십시오.</translation> </message> +</context> +<context> + <name>PaletteEditorAdvancedBase</name> + <message> + <source>Tune Palette</source> + <translation type="obsolete">팔레트 조정</translation> + </message> + <message> + <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> + <translation type="obsolete"><b>팔레트 조정</b><p>현재 위젯이나 폼의 팔레트를 변경합니다.</p><p>생성된 팔레트를 사용하거나, 각각 색상 그룹과 역할의 색을 선택하십시오.</p><p>미리 보기 섹션의 여러 위젯 레이아웃으로 팔레트를 테스트할 수 있습니다.</p></translation> + </message> + <message> + <source>Select &Palette:</source> + <translation type="obsolete">팔레트 선택(&P):</translation> + </message> + <message> + <source>Active Palette</source> + <translation type="obsolete">활성 팔레트</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation type="obsolete">비활성 팔레트</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation type="obsolete">사용 불가 팔레트</translation> + </message> + <message> + <source>Auto</source> + <translation type="obsolete">자동</translation> + </message> + <message> + <source>Build inactive palette from active</source> + <translation type="obsolete">활성 팔레트에서 비활성 팔레트 생성</translation> + </message> + <message> + <source>Build disabled palette from active</source> + <translation type="obsolete">활성 팔레트에서 사용 불가 팔레트 생성</translation> + </message> + <message> + <source>Central color &roles</source> + <translation type="obsolete">중심 색상 역할(&R)</translation> + </message> + <message> + <source>Choose central color role</source> + <translation type="obsolete">중심 색상 역할 선택</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> + <translation type="obsolete"><b>색상 역할을 선택하십시오.</b><p>사용 가능한 색상 역할 목록: <ul> <li>창 - 일반적인 배경색.</li> <li>창 텍스트 - 일반적인 전경색. </li> <li>기본 - 텍스트 입력 위젯과 같은 곳의 배경색. 일반적으로 흰색 또는 밝은 색입니다.</li> <li>텍스트 - '기본'과 같이 사용되는 전경색입니다. 대개 창 텍스트와 같은 색을 사용합니다.</li> <li>단추 - 일반적인 단추 배경색. 매킨토시 스타일과 같이 단추와 창의 배경색이 다른 곳에서 사용합니다.</li> <li>단추 텍스트 - 단추 색과 같이 사용되는 전경색.</li> <li>강조 - 선택하거나 강조된 항목을 나타내는 색.</li> <li>강조 텍스트 - '강조'와 같이 사용되는 텍스트 색.</li> <li>밝은 텍스트 - 창 텍스트와 대조되는 텍스트 색. 예를 들어 검정색입니다.</li> </ul> </p></translation> + </message> + <message> + <source>Window</source> + <translation type="obsolete">창</translation> + </message> + <message> + <source>WindowText</source> + <translation type="obsolete">창 텍스트</translation> + </message> + <message> + <source>Button</source> + <translation type="obsolete">단추</translation> + </message> + <message> + <source>Base</source> + <translation type="obsolete">기본</translation> + </message> + <message> + <source>Text</source> + <translation type="obsolete">텍스트</translation> + </message> + <message> + <source>BrightText</source> + <translation type="obsolete">밝은 텍스트</translation> + </message> + <message> + <source>ButtonText</source> + <translation type="obsolete">단추 텍스트</translation> + </message> + <message> + <source>Highlight</source> + <translation type="obsolete">강조</translation> + </message> + <message> + <source>HighlightedText</source> + <translation type="obsolete">강조된 텍스트</translation> + </message> + <message> + <source>&Select Color:</source> + <translation type="obsolete">색 선택(&S):</translation> + </message> + <message> + <source>Choose a color</source> + <translation type="obsolete">색 선택</translation> + </message> + <message> + <source>Choose a color for the selected central color role.</source> + <translation type="obsolete">중심 색상 역할에 사용할 색상을 선택하십시오.</translation> + </message> + <message> + <source>3-D shadow &effects</source> + <translation type="obsolete">3차원 그림자 효과(&E)</translation> + </message> + <message> + <source>Build &from button color</source> + <translation type="obsolete">단추 색상에서 생성(&F)</translation> + </message> + <message> + <source>Generate shadings</source> + <translation type="obsolete">그림자 생성</translation> + </message> + <message> + <source>Check to let 3D-effect colors be calculated from button-color.</source> + <translation type="obsolete">3차원 효과 색상을 단추 색상에서 생성하려면 누르십시오.</translation> + </message> + <message> + <source>Choose 3D-effect color role</source> + <translation type="obsolete">3차원 효과 색상 역할 선택</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></source> + <translation type="obsolete"><b>색상 역할을 선택하십시오.</b><p>사용 가능한 색상 역할 목록: <ul> <li>밝음 - 단추 색보다 밝음. </li> <li>약간 밝음 - '밝음'과 '단추 색'의 중간.</li> <li>중간 - '단추 색'과 '어두움'의 중간.</li> <li>어두움 - 단추 색보다 어두움.</li> <li>그림자 - 매우 어두운 색.</li> </ul></translation> + </message> + <message> + <source>Light</source> + <translation type="obsolete">밝음</translation> + </message> + <message> + <source>Midlight</source> + <translation type="obsolete">약간 밝음</translation> + </message> + <message> + <source>Mid</source> + <translation type="obsolete">중간</translation> + </message> + <message> + <source>Dark</source> + <translation type="obsolete">어두움</translation> + </message> + <message> + <source>Shadow</source> + <translation type="obsolete">그림자</translation> + </message> + <message> + <source>Select Co&lor:</source> + <translation type="obsolete">색 선택(&L):</translation> + </message> + <message> + <source>Choose a color for the selected effect color role.</source> + <translation type="obsolete">선택한 효과 색상 역할에 사용할 색을 선택하십시오.</translation> + </message> <message> <source>OK</source> - <translation>확인</translation> + <translation type="obsolete">확인</translation> </message> <message> <source>Close dialog and apply all changes.</source> - <translation>대화 상자를 닫고 변경 사항을 적용합니다.</translation> + <translation type="obsolete">대화 상자를 닫고 변경 사항을 적용합니다.</translation> </message> <message> <source>Cancel</source> - <translation>취소</translation> + <translation type="obsolete">취소</translation> </message> <message> <source>Close dialog and discard all changes.</source> - <translation>대화 상자를 닫고 변경 사항을 적용하지 않습니다.</translation> + <translation type="obsolete">대화 상자를 닫고 변경 사항을 적용하지 않습니다.</translation> </message> </context> <context> @@ -682,14 +1197,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PreviewWidgetBase</name> + <name>PreviewWidget</name> <message> <source>Preview Window</source> <translation>미리 보기 창</translation> </message> <message> - <source>ButtonGroup</source> - <translation>단추 그룹</translation> + <source>GroupBox</source> + <translation>그룹 상자</translation> </message> <message> <source>RadioButton1</source> @@ -704,8 +1219,8 @@ p, li { white-space: pre-wrap; } <translation>라디오 단추 3</translation> </message> <message> - <source>ButtonGroup2</source> - <translation>단추 그룹 2</translation> + <source>GroupBox2</source> + <translation>그룹 상자 2</translation> </message> <message> <source>CheckBox1</source> @@ -728,13 +1243,66 @@ p, li { white-space: pre-wrap; } <translation>누름 단추</translation> </message> <message> + <source><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></source> + <translation><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></translation> + </message> +</context> +<context> + <name>PreviewWidgetBase</name> + <message> + <source>Preview Window</source> + <translation type="obsolete">미리 보기 창</translation> + </message> + <message> + <source>ButtonGroup</source> + <translation type="obsolete">단추 그룹</translation> + </message> + <message> + <source>RadioButton1</source> + <translation type="obsolete">라디오 단추 1</translation> + </message> + <message> + <source>RadioButton2</source> + <translation type="obsolete">라디오 단추 2</translation> + </message> + <message> + <source>RadioButton3</source> + <translation type="obsolete">라디오 단추 3</translation> + </message> + <message> + <source>ButtonGroup2</source> + <translation type="obsolete">단추 그룹 2</translation> + </message> + <message> + <source>CheckBox1</source> + <translation type="obsolete">체크 상자 1</translation> + </message> + <message> + <source>CheckBox2</source> + <translation type="obsolete">체크 상자 2</translation> + </message> + <message> + <source>LineEdit</source> + <translation type="obsolete">라인 편집기</translation> + </message> + <message> + <source>ComboBox</source> + <translation type="obsolete">콤보 상자</translation> + </message> + <message> + <source>PushButton</source> + <translation type="obsolete">누름 단추</translation> + </message> + <message> <source><p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> <p> <a href="http://www.kde.org">http://www.kde.org</a> </p></source> - <translation><p> + <translation type="obsolete"><p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> <p> diff --git a/translations/qtconfig_pl.ts b/translations/qtconfig_pl.ts index b2a0c52f1b..dda344fc46 100644 --- a/translations/qtconfig_pl.ts +++ b/translations/qtconfig_pl.ts @@ -52,6 +52,10 @@ <translation>Użyj prostego oprogramowania renderującego</translation> </message> <message> + <source>Saved changes.</source> + <translation>Zachowano zmiany.</translation> + </message> + <message> <source>Over The Spot</source> <translation>Nad oknem dokumentu (Over-The-Spot)</translation> </message> @@ -85,15 +89,15 @@ </message> <message> <source>&Yes</source> - <translation>&Tak</translation> + <translation type="obsolete">&Tak</translation> </message> <message> <source>&No</source> - <translation>&Nie</translation> + <translation type="obsolete">&Nie</translation> </message> <message> <source>&Cancel</source> - <translation>&Anuluj</translation> + <translation type="obsolete">&Anuluj</translation> </message> <message> <source>No changes to be saved.</source> @@ -128,6 +132,10 @@ <translation>Wybierz styl i paletę na podstawie ustawień Twojego pulpitu.</translation> </message> <message> + <source>Unknown</source> + <translation>Nieznany</translation> + </message> + <message> <source>Use OpenGL if available</source> <translation>Użyj OpenGL jeśli jest dostępny</translation> </message> @@ -135,13 +143,6 @@ <source>Saving changes...</source> <translation>Zapisywanie zmian...</translation> </message> -</context> -<context> - <name>MainWindowBase</name> - <message> - <source>Qt Configuration</source> - <translation>Konfiguracja Qt</translation> - </message> <message> <source>Appearance</source> <translation>Wygląd</translation> @@ -155,44 +156,44 @@ <translation>Wybierz &styl GUI:</translation> </message> <message> - <source>Build Palette</source> - <translation>Wersje palety</translation> + <source>Preview</source> + <translation>Podgląd</translation> </message> <message> - <source>&3-D Effects:</source> - <translation>&Efekty 3-D:</translation> + <source>Select &Palette:</source> + <translation>Wybierz &paletę:</translation> </message> <message> - <source>Window Back&ground:</source> - <translation>&Tło okna:</translation> + <source>Active Palette</source> + <translation>Paleta "aktywna"</translation> </message> <message> - <source>&Tune Palette...</source> - <translation>&Ustaw paletę...</translation> + <source>Inactive Palette</source> + <translation>Paleta "nieaktywna"</translation> </message> <message> - <source>Please use the KDE Control Center to set the palette.</source> - <translation>Użyj Centrum Kontroli KDE aby zmienić paletę.</translation> + <source>Disabled Palette</source> + <translation>Paleta "zablokowana"</translation> </message> <message> - <source>Preview</source> - <translation>Podgląd</translation> + <source>Build Palette</source> + <translation>Wersje palety</translation> </message> <message> - <source>Select &Palette:</source> - <translation>Wybierz &paletę:</translation> + <source>&Button Background:</source> + <translation>Tło &przycisku:</translation> </message> <message> - <source>Active Palette</source> - <translation>Aktywna paleta</translation> + <source>Window Back&ground:</source> + <translation>Tło &okna:</translation> </message> <message> - <source>Inactive Palette</source> - <translation>Nieaktywna paleta</translation> + <source>&Tune Palette...</source> + <translation>&Modyfikuj paletę...</translation> </message> <message> - <source>Disabled Palette</source> - <translation>Paleta "zablokowane"</translation> + <source>Please use the KDE Control Center to set the palette.</source> + <translation>Użyj Centrum Kontroli KDE aby zmienić paletę.</translation> </message> <message> <source>Fonts</source> @@ -220,7 +221,7 @@ </message> <message> <source>Font Substitution</source> - <translation>Zamiana czcionki</translation> + <translation>Czcionki zastępcze</translation> </message> <message> <source>S&elect or Enter a Family:</source> @@ -228,7 +229,7 @@ </message> <message> <source>Current Substitutions:</source> - <translation>Bieżące zamiany:</translation> + <translation>Bieżące zastępstwa:</translation> </message> <message> <source>Up</source> @@ -244,7 +245,7 @@ </message> <message> <source>Select s&ubstitute Family:</source> - <translation>Wybierz &nazwę czcionki do zamiany na:</translation> + <translation>Wybierz &nazwę czcionki zastępczej:</translation> </message> <message> <source>Add</source> @@ -264,7 +265,7 @@ </message> <message> <source>&Double Click Interval:</source> - <translation>&Odstęp pomiędzy dwukrotnym kliknięciem:</translation> + <translation>Odstęp pomiędzy &dwukrotnym kliknięciem:</translation> </message> <message> <source>No blinking</source> @@ -272,15 +273,15 @@ </message> <message> <source>&Cursor Flash Time:</source> - <translation>&Czas zmiany kursora:</translation> + <translation>Okres &migotania kursora:</translation> </message> <message> <source> lines</source> - <translation> linie</translation> + <translation> </translation> </message> <message> <source>Wheel &Scroll Lines:</source> - <translation>Obrócenie kółkiem powoduje &przesunięcie o tyle linii:</translation> + <translation>Ilość &przewiniętych linii po obrocie kółkiem:</translation> </message> <message> <source>Resolve symlinks in URLs</source> @@ -308,7 +309,7 @@ </message> <message> <source>&ToolTip Effect:</source> - <translation>Efekt &chmurki:</translation> + <translation>Efekty &podpowiedzi:</translation> </message> <message> <source>Tool&Box Effect:</source> @@ -316,15 +317,15 @@ </message> <message> <source>Disable</source> - <translation>Wyłącz</translation> + <translation>Wyłączone</translation> </message> <message> <source>Animate</source> - <translation>Animacja</translation> + <translation>Animowane</translation> </message> <message> <source>Fade</source> - <translation>Wyłanianie</translation> + <translation>Blaknące</translation> </message> <message> <source>Global Strut</source> @@ -348,67 +349,410 @@ </message> <message> <source>XIM Input Style:</source> - <translation>Rodzaje wprowadzania znaków (XIM):</translation> + <translation>Style wprowadzania znaków (XIM):</translation> + </message> + <message> + <source>Default Input Method:</source> + <translation>Domyślna metoda wprowadzania:</translation> + </message> + <message> + <source>Printer</source> + <translation>Drukarka</translation> + </message> + <message> + <source>Enable Font embedding</source> + <translation>Włącz osadzanie czcionek</translation> + </message> + <message> + <source>Font Paths</source> + <translation>Ścieżki do czcionek</translation> + </message> + <message> + <source>Browse...</source> + <translation>Przeglądaj...</translation> + </message> + <message> + <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> + <translation>Naciśnij przycisk <b>Przeglądaj</b> lub wpisz nazwę katalogu i naciśnij Enter aby dodać do listy.</translation> + </message> + <message> + <source>Phonon</source> + <translation>Phonon</translation> + </message> + <message> + <source>About Phonon</source> + <translation>Informacje o Phonon</translation> + </message> + <message> + <source>Current Version:</source> + <translation>Bieżąca wersja:</translation> + </message> + <message> + <source>Not available</source> + <translation>Nie dostępna</translation> + </message> + <message> + <source>Website:</source> + <translation>Witryna:</translation> + </message> + <message> + <source><a href="http://phonon.kde.org">http://phonon.kde.org/</a></source> + <translation><a href="http://phonon.kde.org">http://phonon.kde.org/</a></translation> + </message> + <message> + <source>About GStreamer</source> + <translation>Informacje o GStreamer</translation> + </message> + <message> + <source><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></source> + <translation><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></translation> + </message> + <message> + <source>GStreamer backend settings</source> + <translation>Ustawienia końcówki GStreamer</translation> + </message> + <message> + <source>Preferred audio sink:</source> + <translation>Preferowane ujście dźwiękowe:</translation> + </message> + <message> + <source>Preferred render method:</source> + <translation>Preferowana metoda renderowania:</translation> + </message> + <message> + <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Zwróć uwagę, że zmiany tych ustawień mogą spowodować nieprawidłowe działanie aplikacji</span></p></body></html></translation> + </message> + <message> + <source>&File</source> + <translation>&Plik</translation> + </message> + <message> + <source>&Help</source> + <translation>&Pomoc</translation> + </message> + <message> + <source>&Save</source> + <translation>&Zachowaj</translation> + </message> + <message> + <source>Save</source> + <translation>Zachowaj</translation> + </message> + <message> + <source>Ctrl+S</source> + <translation>Ctrl+S</translation> + </message> + <message> + <source>E&xit</source> + <translation>Za&kończ</translation> + </message> + <message> + <source>Exit</source> + <translation>Zakończ</translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> + <source>&About</source> + <translation>&Informacje o</translation> + </message> + <message> + <source>About</source> + <translation>Informacje o</translation> + </message> + <message> + <source>About &Qt</source> + <translation>Informacje o &Qt</translation> + </message> + <message> + <source>About Qt</source> + <translation>Informacje o Qt</translation> + </message> +</context> +<context> + <name>MainWindowBase</name> + <message> + <source>Qt Configuration</source> + <translation type="obsolete">Konfiguracja Qt</translation> + </message> + <message> + <source>Appearance</source> + <translation type="obsolete">Wygląd</translation> + </message> + <message> + <source>GUI Style</source> + <translation type="obsolete">Styl GUI</translation> + </message> + <message> + <source>Select GUI &Style:</source> + <translation type="obsolete">Wybierz &styl GUI:</translation> + </message> + <message> + <source>Build Palette</source> + <translation type="obsolete">Wersje palety</translation> + </message> + <message> + <source>&3-D Effects:</source> + <translation type="obsolete">&Efekty 3-D:</translation> + </message> + <message> + <source>Window Back&ground:</source> + <translation type="obsolete">&Tło okna:</translation> + </message> + <message> + <source>&Tune Palette...</source> + <translation type="obsolete">&Ustaw paletę...</translation> + </message> + <message> + <source>Please use the KDE Control Center to set the palette.</source> + <translation type="obsolete">Użyj Centrum Kontroli KDE aby zmienić paletę.</translation> + </message> + <message> + <source>Preview</source> + <translation type="obsolete">Podgląd</translation> + </message> + <message> + <source>Select &Palette:</source> + <translation type="obsolete">Wybierz &paletę:</translation> + </message> + <message> + <source>Active Palette</source> + <translation type="obsolete">Aktywna paleta</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation type="obsolete">Nieaktywna paleta</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation type="obsolete">Paleta "zablokowane"</translation> + </message> + <message> + <source>Fonts</source> + <translation type="obsolete">Czcionki</translation> + </message> + <message> + <source>Default Font</source> + <translation type="obsolete">Domyślna czcionka</translation> + </message> + <message> + <source>&Style:</source> + <translation type="obsolete">&Styl:</translation> + </message> + <message> + <source>&Point Size:</source> + <translation type="obsolete">&Rozmiar czcionki:</translation> + </message> + <message> + <source>F&amily:</source> + <translation type="obsolete">&Nazwa czcionki:</translation> + </message> + <message> + <source>Sample Text</source> + <translation type="obsolete">Przykładowy tekst</translation> + </message> + <message> + <source>Font Substitution</source> + <translation type="obsolete">Zamiana czcionki</translation> + </message> + <message> + <source>S&elect or Enter a Family:</source> + <translation type="obsolete">&Wybierz lub wpisz nazwę czcionki:</translation> + </message> + <message> + <source>Current Substitutions:</source> + <translation type="obsolete">Bieżące zamiany:</translation> + </message> + <message> + <source>Up</source> + <translation type="obsolete">W górę</translation> + </message> + <message> + <source>Down</source> + <translation type="obsolete">W dół</translation> + </message> + <message> + <source>Remove</source> + <translation type="obsolete">Usuń</translation> + </message> + <message> + <source>Select s&ubstitute Family:</source> + <translation type="obsolete">Wybierz &nazwę czcionki do zamiany na:</translation> + </message> + <message> + <source>Add</source> + <translation type="obsolete">Dodaj</translation> + </message> + <message> + <source>Interface</source> + <translation type="obsolete">Interfejs</translation> + </message> + <message> + <source>Feel Settings</source> + <translation type="obsolete">Ustawienia działania</translation> + </message> + <message> + <source> ms</source> + <translation type="obsolete"> ms</translation> + </message> + <message> + <source>&Double Click Interval:</source> + <translation type="obsolete">&Odstęp pomiędzy dwukrotnym kliknięciem:</translation> + </message> + <message> + <source>No blinking</source> + <translation type="obsolete">Brak migotania</translation> + </message> + <message> + <source>&Cursor Flash Time:</source> + <translation type="obsolete">&Czas zmiany kursora:</translation> + </message> + <message> + <source> lines</source> + <translation type="obsolete"> linie</translation> + </message> + <message> + <source>Wheel &Scroll Lines:</source> + <translation type="obsolete">Obrócenie kółkiem powoduje &przesunięcie o tyle linii:</translation> + </message> + <message> + <source>Resolve symlinks in URLs</source> + <translation type="obsolete">Rozwiązuj dowiązania symboliczne w adresach URL</translation> + </message> + <message> + <source>GUI Effects</source> + <translation type="obsolete">Efekty GUI</translation> + </message> + <message> + <source>&Enable</source> + <translation type="obsolete">&Włącz</translation> + </message> + <message> + <source>Alt+E</source> + <translation type="obsolete">Alt+E</translation> + </message> + <message> + <source>&Menu Effect:</source> + <translation type="obsolete">Efekty &menu:</translation> + </message> + <message> + <source>C&omboBox Effect:</source> + <translation type="obsolete">Efekty c&ombobox'a:</translation> + </message> + <message> + <source>&ToolTip Effect:</source> + <translation type="obsolete">Efekt &chmurki:</translation> + </message> + <message> + <source>Tool&Box Effect:</source> + <translation type="obsolete">Efekty &paska narzędzi:</translation> + </message> + <message> + <source>Disable</source> + <translation type="obsolete">Wyłącz</translation> + </message> + <message> + <source>Animate</source> + <translation type="obsolete">Animacja</translation> + </message> + <message> + <source>Fade</source> + <translation type="obsolete">Wyłanianie</translation> + </message> + <message> + <source>Global Strut</source> + <translation type="obsolete">Minimalny rozmiar widżetów</translation> + </message> + <message> + <source>Minimum &Width:</source> + <translation type="obsolete">Minimalna &szerokość:</translation> + </message> + <message> + <source>Minimum Hei&ght:</source> + <translation type="obsolete">Minimalna &wysokość:</translation> + </message> + <message> + <source> pixels</source> + <translation type="obsolete"> pikseli</translation> + </message> + <message> + <source>Enhanced support for languages written right-to-left</source> + <translation type="obsolete">Rozszerzona obsługa dla języków pisanych od prawej do lewej</translation> + </message> + <message> + <source>XIM Input Style:</source> + <translation type="obsolete">Rodzaje wprowadzania znaków (XIM):</translation> </message> <message> <source>On The Spot</source> - <translation>W oknie dokumentu (On-The-Spot)</translation> + <translation type="obsolete">W oknie dokumentu (On-The-Spot)</translation> </message> <message> <source>Over The Spot</source> - <translation>Nad oknem dokumentu (Over-The-Spot)</translation> + <translation type="obsolete">Nad oknem dokumentu (Over-The-Spot)</translation> </message> <message> <source>Off The Spot</source> - <translation>Na pasku stanu (Off-The-Spot)</translation> + <translation type="obsolete">Na pasku stanu (Off-The-Spot)</translation> </message> <message> <source>Root</source> - <translation>W dodatkowym oknie (Root)</translation> + <translation type="obsolete">W dodatkowym oknie (Root)</translation> </message> <message> <source>Default Input Method:</source> - <translation>Domyślna metoda wprowadzania:</translation> + <translation type="obsolete">Domyślna metoda wprowadzania:</translation> </message> <message> <source>Printer</source> - <translation>Drukarka</translation> + <translation type="obsolete">Drukarka</translation> </message> <message> <source>Enable Font embedding</source> - <translation>Włącz czcionki wbudowane</translation> + <translation type="obsolete">Włącz czcionki wbudowane</translation> </message> <message> <source>Font Paths</source> - <translation>Ścieżki czcionek</translation> + <translation type="obsolete">Ścieżki czcionek</translation> </message> <message> <source>Browse...</source> - <translation>Przeglądaj...</translation> + <translation type="obsolete">Przeglądaj...</translation> </message> <message> <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> - <translation>Naciśnij przycisk <b>Przeglądaj</b> lub wpisz nazwę katalogu i naciśnij Enter aby dodać do listy.</translation> + <translation type="obsolete">Naciśnij przycisk <b>Przeglądaj</b> lub wpisz nazwę katalogu i naciśnij Enter aby dodać do listy.</translation> </message> <message> <source>Phonon</source> - <translation>Phonon</translation> + <translation type="obsolete">Phonon</translation> </message> <message> <source>About Phonon</source> - <translation>Informacje o Phonon</translation> + <translation type="obsolete">Informacje o Phonon</translation> </message> <message> <source>Current Version:</source> - <translation>Bieżąca wersja:</translation> + <translation type="obsolete">Bieżąca wersja:</translation> </message> <message> <source>Not available</source> - <translation>Nie dostępne</translation> + <translation type="obsolete">Nie dostępne</translation> </message> <message> <source>Website:</source> - <translation>Witryna:</translation> + <translation type="obsolete">Witryna:</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -416,7 +760,7 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -424,7 +768,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>About GStreamer</source> - <translation>Informacje o GStreamer</translation> + <translation type="obsolete">Informacje o GStreamer</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -432,7 +776,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -440,15 +784,15 @@ p, li { white-space: pre-wrap; } </message> <message> <source>GStreamer backend settings</source> - <translation>Ustawienia końcówki GStreamer</translation> + <translation type="obsolete">Ustawienia końcówki GStreamer</translation> </message> <message> <source>Preferred audio sink:</source> - <translation>Preferowane ujście dźwiękowe:</translation> + <translation type="obsolete">Preferowane ujście dźwiękowe:</translation> </message> <message> <source>Preferred render method:</source> - <translation>Preferowana metoda renderowania:</translation> + <translation type="obsolete">Preferowana metoda renderowania:</translation> </message> <message> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -456,7 +800,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> @@ -464,86 +808,82 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&File</source> - <translation>&Plik</translation> + <translation type="obsolete">&Plik</translation> </message> <message> <source>&Help</source> - <translation>&Pomoc</translation> + <translation type="obsolete">&Pomoc</translation> </message> <message> <source>&Save</source> - <translation>&Zapisz</translation> + <translation type="obsolete">&Zapisz</translation> </message> <message> <source>Save</source> - <translation>Zapisz</translation> + <translation type="obsolete">Zapisz</translation> </message> <message> <source>Ctrl+S</source> - <translation>Ctrl+S</translation> + <translation type="obsolete">Ctrl+S</translation> </message> <message> <source>E&xit</source> - <translation>&Zakończ</translation> + <translation type="obsolete">&Zakończ</translation> </message> <message> <source>Exit</source> - <translation>Zakończ</translation> + <translation type="obsolete">Zakończ</translation> </message> <message> <source>&About</source> - <translation>&Informacje o</translation> + <translation type="obsolete">&Informacje o</translation> </message> <message> <source>About</source> - <translation>Informacje o</translation> + <translation type="obsolete">Informacje o</translation> </message> <message> <source>About &Qt</source> - <translation>Informacje o &Qt</translation> + <translation type="obsolete">Informacje o &Qt</translation> </message> <message> <source>About Qt</source> - <translation>Informacje o Qt</translation> + <translation type="obsolete">Informacje o Qt</translation> </message> </context> <context> - <name>PaletteEditorAdvancedBase</name> + <name>PaletteEditorAdvanced</name> <message> <source>Tune Palette</source> <translation>Ustaw paletę</translation> </message> <message> - <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> - <translation><b>Edycja palety</b><p>Zmień paletę bieżącego widżetu lub formularza.</p><p>Użyj wygenerowanej palety lub wybierz kolory dla każdej grupy i roli koloru.</p><p>Paleta może być przetestowana z różnymi rozmieszczeniami widżetów w sekcji podglądu.</p></translation> - </message> - <message> <source>Select &Palette:</source> <translation>Wybierz &paletę:</translation> </message> <message> <source>Active Palette</source> - <translation>Paleta "aktywne"</translation> + <translation>Paleta "aktywna"</translation> </message> <message> <source>Inactive Palette</source> - <translation>Paleta "nieaktywne"</translation> + <translation>Paleta "nieaktywna"</translation> </message> <message> <source>Disabled Palette</source> - <translation>Paleta "zablokowane"</translation> + <translation>Paleta "zablokowana"</translation> </message> <message> <source>Auto</source> - <translation>Automatycznie</translation> + <translation>Automatyczne tworzenie</translation> </message> <message> <source>Build inactive palette from active</source> - <translation>Twórz paletę "nieaktywne" z "aktywne"</translation> + <translation>Twórz paletę "nieaktywną" na podstawie palety "aktywnej"</translation> </message> <message> <source>Build disabled palette from active</source> - <translation>Twórz paletę "zablokowane" z "aktywne"</translation> + <translation>Twórz paletę "zablokowaną" na podstawie palety "aktywnej"</translation> </message> <message> <source>Central color &roles</source> @@ -555,7 +895,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> - <translation><b>Wybierz rolę koloru.</b><p>Dostępne role główne: <ul> <li>Okno - główny kolor tła.</li> <li>Tekst Okna - główny kolor pierwszoplanowy. </li> <li>Bazowy - używany jako kolor tła dla np. widżetów wejściowych, zwykle biały lub inny jasny kolor. </li> <li>Tekst - kolor pierwszoplanowy używany z Bazowym. Zwykle jest on taki sam jak Tekst Okna i wtedy powinien dobrze kontrastować jednocześnie z Oknem i Bazowym </li> <li>Przycisk - główny kolor tła przycisku, gdy przyciski potrzebują innego tła niż Okno, jak np. w stylu Macintosh. </li> <li>Tekst Przycisku - kolor pierwszoplanowy używany z Przyciskiem. </li> <li>Podświetlony - kolor użyty w zaznaczonych lub podświetlonych elementach. </li> <li>Podświetlony Tekst - kolor tekstu który kontrastuje z Podświetlonym. </li> <li>Jasny Tekst - kolor teksty który znacznie różni się od Tekstu Okna i dobrze kontrastuje z np. czarnym. </li> </ul> </p></translation> + <translation><b>Wybierz rolę koloru.</b><p>Dostępne role główne: <ul> <li>Okno - główny kolor tła.</li> <li>Tekst Okna - główny kolor pierwszoplanowy. </li> <li>Bazowy - używany jako kolor tła dla np. widżetów wejściowych, zwykle biały lub inny jasny kolor. </li> <li>Tekst - kolor pierwszoplanowy używany z Bazowym. Zwykle jest on taki sam jak Tekst Okna i wtedy powinien dobrze kontrastować jednocześnie z Oknem i Bazowym </li> <li>Przycisk - główny kolor tła przycisku, gdy przyciski potrzebują innego tła niż Okno, jak np. w stylu Macintosh. </li> <li>Tekst Przycisku - kolor pierwszoplanowy używany z Przyciskiem. </li> <li>Wyróżnienie - kolor użyty w zaznaczonych lub podświetlonych elementach. </li> <li>Wyróżniony Tekst - kolor tekstu który kontrastuje z Podświetlonym. </li> <li>Jasny Tekst - kolor teksty który znacznie różni się od Tekstu Okna i dobrze kontrastuje z np. czarnym. </li> </ul> </p></translation> </message> <message> <source>Window</source> @@ -566,24 +906,36 @@ p, li { white-space: pre-wrap; } <translation>Tekst Okna</translation> </message> <message> - <source>Button</source> - <translation>Przycisk</translation> + <source>Base</source> + <translation>Bazowy</translation> </message> <message> - <source>Base</source> - <translation>Podstawa</translation> + <source>AlternateBase</source> + <translation>Bazowy Alternatywny</translation> + </message> + <message> + <source>ToolTipBase</source> + <translation>Bazowy dla podpowiedzi</translation> + </message> + <message> + <source>ToolTipText</source> + <translation>Tekst podpowiedzi</translation> </message> <message> <source>Text</source> <translation>Tekst</translation> </message> <message> - <source>BrightText</source> - <translation>Jasny tekst</translation> + <source>Button</source> + <translation>Przycisk</translation> </message> <message> <source>ButtonText</source> - <translation>Tekst przycisku</translation> + <translation>Tekst Przycisku</translation> + </message> + <message> + <source>BrightText</source> + <translation>Jasny Tekst</translation> </message> <message> <source>Highlight</source> @@ -591,27 +943,23 @@ p, li { white-space: pre-wrap; } </message> <message> <source>HighlightedText</source> - <translation>Tekst wyróżniony</translation> + <translation>Wyróżniony tekst</translation> </message> <message> - <source>&Select Color:</source> - <translation>&Wybierz kolor:</translation> + <source>Link</source> + <translation>Odsyłacz</translation> </message> <message> - <source>Choose a color</source> - <translation>Wybierz kolor</translation> + <source>LinkVisited</source> + <translation>Zwiedzony Odsyłacz</translation> </message> <message> - <source>Choose a color for the selected central color role.</source> - <translation>Wybierz kolor dla zaznaczonej głównej roli koloru.</translation> + <source>&Select Color:</source> + <translation>&Wybierz kolor:</translation> </message> <message> <source>3-D shadow &effects</source> - <translation>&Efekty cień 3-D </translation> - </message> - <message> - <source>Build &from button color</source> - <translation>&Zbuduj w oparciu o kolor przycisku</translation> + <translation>&Efekty cienia 3-D </translation> </message> <message> <source>Generate shadings</source> @@ -619,7 +967,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Check to let 3D-effect colors be calculated from button-color.</source> - <translation>Zaznacz aby kolory efektów trójwymiarowych były obliczone na podstawie koloru przycisku.</translation> + <translation>Zaznacz, aby kolory efektów trójwymiarowych były obliczone na podstawie koloru przycisku.</translation> + </message> + <message> + <source>Build &from button color</source> + <translation>&Zbuduj w oparciu o kolor przycisku</translation> </message> <message> <source>Choose 3D-effect color role</source> @@ -654,24 +1006,183 @@ p, li { white-space: pre-wrap; } <translation>Wybierz &kolor:</translation> </message> <message> + <source>Choose a color</source> + <translation>Wybierz kolor</translation> + </message> + <message> + <source>Choose a color for the selected central color role.</source> + <translation>Wybierz kolor dla zaznaczonej głównej roli koloru.</translation> + </message> + <message> <source>Choose a color for the selected effect color role.</source> <translation>Wybierz kolor dla zaznaczonej roli koloru dla efektu.</translation> </message> +</context> +<context> + <name>PaletteEditorAdvancedBase</name> + <message> + <source>Tune Palette</source> + <translation type="obsolete">Ustaw paletę</translation> + </message> + <message> + <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> + <translation type="obsolete"><b>Edycja palety</b><p>Zmień paletę bieżącego widżetu lub formularza.</p><p>Użyj wygenerowanej palety lub wybierz kolory dla każdej grupy i roli koloru.</p><p>Paleta może być przetestowana z różnymi rozmieszczeniami widżetów w sekcji podglądu.</p></translation> + </message> + <message> + <source>Select &Palette:</source> + <translation type="obsolete">Wybierz &paletę:</translation> + </message> + <message> + <source>Active Palette</source> + <translation type="obsolete">Paleta "aktywne"</translation> + </message> + <message> + <source>Inactive Palette</source> + <translation type="obsolete">Paleta "nieaktywne"</translation> + </message> + <message> + <source>Disabled Palette</source> + <translation type="obsolete">Paleta "zablokowane"</translation> + </message> + <message> + <source>Auto</source> + <translation type="obsolete">Automatycznie</translation> + </message> + <message> + <source>Build inactive palette from active</source> + <translation type="obsolete">Twórz paletę "nieaktywne" z "aktywne"</translation> + </message> + <message> + <source>Build disabled palette from active</source> + <translation type="obsolete">Twórz paletę "zablokowane" z "aktywne"</translation> + </message> + <message> + <source>Central color &roles</source> + <translation type="obsolete">Główne &role koloru</translation> + </message> + <message> + <source>Choose central color role</source> + <translation type="obsolete">Wybierz główną rolę koloru</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> + <translation type="obsolete"><b>Wybierz rolę koloru.</b><p>Dostępne role główne: <ul> <li>Okno - główny kolor tła.</li> <li>Tekst Okna - główny kolor pierwszoplanowy. </li> <li>Bazowy - używany jako kolor tła dla np. widżetów wejściowych, zwykle biały lub inny jasny kolor. </li> <li>Tekst - kolor pierwszoplanowy używany z Bazowym. Zwykle jest on taki sam jak Tekst Okna i wtedy powinien dobrze kontrastować jednocześnie z Oknem i Bazowym </li> <li>Przycisk - główny kolor tła przycisku, gdy przyciski potrzebują innego tła niż Okno, jak np. w stylu Macintosh. </li> <li>Tekst Przycisku - kolor pierwszoplanowy używany z Przyciskiem. </li> <li>Podświetlony - kolor użyty w zaznaczonych lub podświetlonych elementach. </li> <li>Podświetlony Tekst - kolor tekstu który kontrastuje z Podświetlonym. </li> <li>Jasny Tekst - kolor teksty który znacznie różni się od Tekstu Okna i dobrze kontrastuje z np. czarnym. </li> </ul> </p></translation> + </message> + <message> + <source>Window</source> + <translation type="obsolete">Okno</translation> + </message> + <message> + <source>WindowText</source> + <translation type="obsolete">Tekst Okna</translation> + </message> + <message> + <source>Button</source> + <translation type="obsolete">Przycisk</translation> + </message> + <message> + <source>Base</source> + <translation type="obsolete">Podstawa</translation> + </message> + <message> + <source>Text</source> + <translation type="obsolete">Tekst</translation> + </message> + <message> + <source>BrightText</source> + <translation type="obsolete">Jasny tekst</translation> + </message> + <message> + <source>ButtonText</source> + <translation type="obsolete">Tekst przycisku</translation> + </message> + <message> + <source>Highlight</source> + <translation type="obsolete">Wyróżnienie</translation> + </message> + <message> + <source>HighlightedText</source> + <translation type="obsolete">Tekst wyróżniony</translation> + </message> + <message> + <source>&Select Color:</source> + <translation type="obsolete">&Wybierz kolor:</translation> + </message> + <message> + <source>Choose a color</source> + <translation type="obsolete">Wybierz kolor</translation> + </message> + <message> + <source>Choose a color for the selected central color role.</source> + <translation type="obsolete">Wybierz kolor dla zaznaczonej głównej roli koloru.</translation> + </message> + <message> + <source>3-D shadow &effects</source> + <translation type="obsolete">&Efekty cień 3-D </translation> + </message> + <message> + <source>Build &from button color</source> + <translation type="obsolete">&Zbuduj w oparciu o kolor przycisku</translation> + </message> + <message> + <source>Generate shadings</source> + <translation type="obsolete">Wygeneruj cienie</translation> + </message> + <message> + <source>Check to let 3D-effect colors be calculated from button-color.</source> + <translation type="obsolete">Zaznacz aby kolory efektów trójwymiarowych były obliczone na podstawie koloru przycisku.</translation> + </message> + <message> + <source>Choose 3D-effect color role</source> + <translation type="obsolete">Wybierz rolę koloru efektu trójwymiarowego</translation> + </message> + <message> + <source><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></source> + <translation type="obsolete"><b>Wybierz rolę koloru.</b><p>Dostępne role kolorów: <ul> <li>Jasny - jaśniejszy od koloru Przycisku. </li> <li>Średnio Jasny - pomiędzy kolorem Przycisku i Jasnym. </li> <li>Średni - pomiędzy kolorem Przycisku i Ciemnym. </li> <li>Ciemny - ciemniejszy od koloru Przycisku. </li> <li>Cień - bardzo ciemny kolor. </li> </ul></translation> + </message> + <message> + <source>Light</source> + <translation type="obsolete">Jasny</translation> + </message> + <message> + <source>Midlight</source> + <translation type="obsolete">Średnio jasny</translation> + </message> + <message> + <source>Mid</source> + <translation type="obsolete">Średni</translation> + </message> + <message> + <source>Dark</source> + <translation type="obsolete">Ciemny</translation> + </message> + <message> + <source>Shadow</source> + <translation type="obsolete">Cień</translation> + </message> + <message> + <source>Select Co&lor:</source> + <translation type="obsolete">Wybierz &kolor:</translation> + </message> + <message> + <source>Choose a color for the selected effect color role.</source> + <translation type="obsolete">Wybierz kolor dla zaznaczonej roli koloru dla efektu.</translation> + </message> <message> <source>OK</source> - <translation>OK</translation> + <translation type="obsolete">OK</translation> </message> <message> <source>Close dialog and apply all changes.</source> - <translation>Zamknij okno i zastosuj wszystkie zmiany.</translation> + <translation type="obsolete">Zamknij okno i zastosuj wszystkie zmiany.</translation> </message> <message> <source>Cancel</source> - <translation>Anuluj</translation> + <translation type="obsolete">Anuluj</translation> </message> <message> <source>Close dialog and discard all changes.</source> - <translation>Zamknij okno i anuluj wszystkie zmiany.</translation> + <translation type="obsolete">Zamknij okno i anuluj wszystkie zmiany.</translation> </message> </context> <context> @@ -682,14 +1193,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PreviewWidgetBase</name> + <name>PreviewWidget</name> <message> <source>Preview Window</source> <translation>Okno podglądu</translation> </message> <message> - <source>ButtonGroup</source> - <translation>ButtonGroup</translation> + <source>GroupBox</source> + <translation>GroupBox</translation> </message> <message> <source>RadioButton1</source> @@ -704,8 +1215,8 @@ p, li { white-space: pre-wrap; } <translation>RadioButton3</translation> </message> <message> - <source>ButtonGroup2</source> - <translation>ButtonGroup2</translation> + <source>GroupBox2</source> + <translation>GroupBox2</translation> </message> <message> <source>CheckBox1</source> @@ -728,13 +1239,66 @@ p, li { white-space: pre-wrap; } <translation>PushButton</translation> </message> <message> + <source><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></source> + <translation><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></translation> + </message> +</context> +<context> + <name>PreviewWidgetBase</name> + <message> + <source>Preview Window</source> + <translation type="obsolete">Okno podglądu</translation> + </message> + <message> + <source>ButtonGroup</source> + <translation type="obsolete">ButtonGroup</translation> + </message> + <message> + <source>RadioButton1</source> + <translation type="obsolete">RadioButton1</translation> + </message> + <message> + <source>RadioButton2</source> + <translation type="obsolete">RadioButton2</translation> + </message> + <message> + <source>RadioButton3</source> + <translation type="obsolete">RadioButton3</translation> + </message> + <message> + <source>ButtonGroup2</source> + <translation type="obsolete">ButtonGroup2</translation> + </message> + <message> + <source>CheckBox1</source> + <translation type="obsolete">CheckBox1</translation> + </message> + <message> + <source>CheckBox2</source> + <translation type="obsolete">CheckBox2</translation> + </message> + <message> + <source>LineEdit</source> + <translation type="obsolete">LineEdit</translation> + </message> + <message> + <source>ComboBox</source> + <translation type="obsolete">ComboBox</translation> + </message> + <message> + <source>PushButton</source> + <translation type="obsolete">PushButton</translation> + </message> + <message> <source><p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> <p> <a href="http://www.kde.org">http://www.kde.org</a> </p></source> - <translation><p> + <translation type="obsolete"><p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> <p> diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index a200ac1823..c5ddbb0173 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -33,7 +33,7 @@ </message> <message> <source>On The Spot</source> - <translation type="unfinished"></translation> + <translation>В тексте</translation> </message> <message> <source>Unknown</source> @@ -101,15 +101,15 @@ </message> <message> <source>Over The Spot</source> - <translation type="unfinished"></translation> + <translation>Поверх текста</translation> </message> <message> <source>Off The Spot</source> - <translation type="unfinished"></translation> + <translation>Вне текста</translation> </message> <message> <source>Root</source> - <translation type="unfinished"></translation> + <translation>Общий</translation> </message> <message> <source>Select a Directory</source> diff --git a/translations/qtconfig_uk.ts b/translations/qtconfig_uk.ts index 24a9b7df73..6cdae56b9b 100644 --- a/translations/qtconfig_uk.ts +++ b/translations/qtconfig_uk.ts @@ -36,6 +36,10 @@ <translation>У вікні документу</translation> </message> <message> + <source>Unknown</source> + <translation>Невідомий</translation> + </message> + <message> <source>Auto (default)</source> <translation>Автоматично (типово)</translation> </message> @@ -92,6 +96,10 @@ <translation>Збереження змін...</translation> </message> <message> + <source>Saved changes.</source> + <translation>Зміни збережено.</translation> + </message> + <message> <source>Over The Spot</source> <translation>Над вікном документу</translation> </message> @@ -124,25 +132,6 @@ <translation>Зберегти зміни до налаштувань?</translation> </message> <message> - <source>&Yes</source> - <translation>&Так</translation> - </message> - <message> - <source>&No</source> - <translation>&Ні</translation> - </message> - <message> - <source>&Cancel</source> - <translation>&Скасувати</translation> - </message> -</context> -<context> - <name>MainWindowBase</name> - <message> - <source>Qt Configuration</source> - <translation>Налаштування Qt</translation> - </message> - <message> <source>Appearance</source> <translation>Вигляд</translation> </message> @@ -179,8 +168,8 @@ <translation>Створити палітру</translation> </message> <message> - <source>&3-D Effects:</source> - <translation>&3-D ефекти:</translation> + <source>&Button Background:</source> + <translation>Фон &кнопки:</translation> </message> <message> <source>Window Back&ground:</source> @@ -351,22 +340,6 @@ <translation>Стиль введення XIM:</translation> </message> <message> - <source>On The Spot</source> - <translation>У вікні документу</translation> - </message> - <message> - <source>Over The Spot</source> - <translation>Над вікном документу</translation> - </message> - <message> - <source>Off The Spot</source> - <translation>В рядку стану</translation> - </message> - <message> - <source>Root</source> - <translation>В додатковому вікні</translation> - </message> - <message> <source>Default Input Method:</source> <translation>Типовий метод введення:</translation> </message> @@ -411,11 +384,7 @@ <translation>Веб-сайт:</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> + <source><a href="http://phonon.kde.org">http://phonon.kde.org/</a></source> <translation></translation> </message> <message> @@ -423,11 +392,7 @@ p, li { white-space: pre-wrap; } <translation>Про GStreamer</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> + <source><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></source> <translation></translation> </message> <message> @@ -472,7 +437,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Ctrl+S</source> - <translation>Ctrl+S</translation> + <translation></translation> </message> <message> <source>E&xit</source> @@ -483,6 +448,10 @@ p, li { white-space: pre-wrap; } <translation>Вийти</translation> </message> <message> + <source>Ctrl+Q</source> + <translation></translation> + </message> + <message> <source>&About</source> <translation>&Про</translation> </message> @@ -500,16 +469,12 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PaletteEditorAdvancedBase</name> + <name>PaletteEditorAdvanced</name> <message> <source>Tune Palette</source> <translation>Налаштувати палітру</translation> </message> <message> - <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> - <translation><b>Редагування палітри</b><p>Змінити палітру поточного віджета чи форми.</p><p>Використовуйте згенеровану палітру чи оберіть кольори для кожної групи кольорів та кожної кольорової ролі.</p><p>Палітру можна протестувати з різними розміщеннями віджетів в секції попереднього перегляду.</p></translation> - </message> - <message> <source>Select &Palette:</source> <translation>Виберіть &палітру:</translation> </message> @@ -558,26 +523,38 @@ p, li { white-space: pre-wrap; } <translation>Текст вікна</translation> </message> <message> - <source>Button</source> - <translation>Кнопка</translation> - </message> - <message> <source>Base</source> <translation>Базовий</translation> </message> <message> + <source>AlternateBase</source> + <translation>Альтернативний базовий</translation> + </message> + <message> + <source>ToolTipBase</source> + <translation>Базовий спливаючої підказки</translation> + </message> + <message> + <source>ToolTipText</source> + <translation>Текст спливаючої підказки</translation> + </message> + <message> <source>Text</source> <translation>Текст</translation> </message> <message> - <source>BrightText</source> - <translation>Яскравий текст</translation> + <source>Button</source> + <translation>Кнопка</translation> </message> <message> <source>ButtonText</source> <translation>Текст кнопки</translation> </message> <message> + <source>BrightText</source> + <translation>Яскравий текст</translation> + </message> + <message> <source>Highlight</source> <translation>Підсвічений</translation> </message> @@ -586,26 +563,22 @@ p, li { white-space: pre-wrap; } <translation>Підсвічений текст</translation> </message> <message> - <source>&Select Color:</source> - <translation>&Оберіть колір:</translation> + <source>Link</source> + <translation>Посилання</translation> </message> <message> - <source>Choose a color</source> - <translation>Оберіть колір</translation> + <source>LinkVisited</source> + <translation>Відвідане посилання</translation> </message> <message> - <source>Choose a color for the selected central color role.</source> - <translation>Виберіть колір для вказаної головної кольорової ролі.</translation> + <source>&Select Color:</source> + <translation>&Оберіть колір:</translation> </message> <message> <source>3-D shadow &effects</source> <translation>3-D &ефекти тіні</translation> </message> <message> - <source>Build &from button color</source> - <translation>Будувати &з кольору кнопки</translation> - </message> - <message> <source>Generate shadings</source> <translation>Генерувати тіні</translation> </message> @@ -614,6 +587,10 @@ p, li { white-space: pre-wrap; } <translation>Увімкніть, щоб кольори 3D-ефектів розраховувались з кольору кнопки.</translation> </message> <message> + <source>Build &from button color</source> + <translation>Будувати &з кольору кнопки</translation> + </message> + <message> <source>Choose 3D-effect color role</source> <translation>Оберіть роль для 3D-ефектів</translation> </message> @@ -646,24 +623,16 @@ p, li { white-space: pre-wrap; } <translation>Оберіть &колір:</translation> </message> <message> - <source>Choose a color for the selected effect color role.</source> - <translation>Оберіть колір для вказаної кольорової ролі ефектів.</translation> - </message> - <message> - <source>OK</source> - <translation>OK</translation> - </message> - <message> - <source>Close dialog and apply all changes.</source> - <translation>Закрити діалог та застосувати усі зміни.</translation> + <source>Choose a color</source> + <translation>Оберіть колір</translation> </message> <message> - <source>Cancel</source> - <translation>Скасувати</translation> + <source>Choose a color for the selected central color role.</source> + <translation>Виберіть колір для вказаної головної кольорової ролі.</translation> </message> <message> - <source>Close dialog and discard all changes.</source> - <translation>Закрити діалог та відкинути усі зміни.</translation> + <source>Choose a color for the selected effect color role.</source> + <translation>Оберіть колір для вказаної кольорової ролі ефектів.</translation> </message> </context> <context> @@ -674,14 +643,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PreviewWidgetBase</name> + <name>PreviewWidget</name> <message> <source>Preview Window</source> <translation>Вікно попереднього перегляду</translation> </message> <message> - <source>ButtonGroup</source> - <translation>Група кнопок</translation> + <source>GroupBox</source> + <translation>Контейнер</translation> </message> <message> <source>RadioButton1</source> @@ -696,8 +665,8 @@ p, li { white-space: pre-wrap; } <translation>Перемикач 3</translation> </message> <message> - <source>ButtonGroup2</source> - <translation>Група кнопок 2</translation> + <source>GroupBox2</source> + <translation>Контейнер 2</translation> </message> <message> <source>CheckBox1</source> @@ -720,18 +689,9 @@ p, li { white-space: pre-wrap; } <translation>Кнопка</translation> </message> <message> - <source><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></source> - <translation><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></translation> + <source><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></source> + <translation></translation> </message> </context> </TS> diff --git a/translations/qvfb_pl.ts b/translations/qvfb_pl.ts index 7c18a5bb4f..0d2db1dd6a 100644 --- a/translations/qvfb_pl.ts +++ b/translations/qvfb_pl.ts @@ -262,11 +262,11 @@ <name>QVFb</name> <message> <source>&File</source> - <translation type="unfinished"></translation> + <translation>&Plik</translation> </message> <message> <source>&Configure...</source> - <translation type="unfinished"></translation> + <translation>&Konfiguruj...</translation> </message> <message> <source>&Save image...</source> @@ -274,19 +274,19 @@ </message> <message> <source>&Animation...</source> - <translation type="unfinished"></translation> + <translation>&Animacja...</translation> </message> <message> <source>&Quit</source> - <translation type="unfinished"></translation> + <translation>Za&kończ</translation> </message> <message> <source>&View</source> - <translation type="unfinished"></translation> + <translation>&Widok</translation> </message> <message> <source>Show &Cursor</source> - <translation type="unfinished"></translation> + <translation>Pokaż ku&rsor</translation> </message> <message> <source>&Refresh Rate...</source> @@ -294,55 +294,55 @@ </message> <message> <source>&No rotation</source> - <translation type="unfinished"></translation> + <translation>&Brak rotacji</translation> </message> <message> <source>&90° rotation</source> - <translation type="unfinished"></translation> + <translation>Rotacja &90°</translation> </message> <message> <source>1&80° rotation</source> - <translation type="unfinished"></translation> + <translation>Rotacja 1&80°</translation> </message> <message> <source>2&70° rotation</source> - <translation type="unfinished"></translation> + <translation>Rotacja 2&70°</translation> </message> <message> <source>Zoom scale &0.5</source> - <translation type="unfinished"></translation> + <translation>Powiększenie &0.5</translation> </message> <message> <source>Zoom scale 0.7&5</source> - <translation type="unfinished"></translation> + <translation>Powiększenie 0.7&5</translation> </message> <message> <source>Zoom scale &1</source> - <translation type="unfinished"></translation> + <translation>Powiększenie &1</translation> </message> <message> <source>Zoom scale &2</source> - <translation type="unfinished"></translation> + <translation>Powiększenie &2</translation> </message> <message> <source>Zoom scale &3</source> - <translation type="unfinished"></translation> + <translation>Powiększenie &3</translation> </message> <message> <source>Zoom scale &4</source> - <translation type="unfinished"></translation> + <translation>Powiększenie &4</translation> </message> <message> <source>Zoom &scale...</source> - <translation type="unfinished"></translation> + <translation>&Powiększenie...</translation> </message> <message> <source>&Help</source> - <translation type="unfinished"></translation> + <translation>&Pomoc</translation> </message> <message> <source>&About...</source> - <translation type="unfinished"></translation> + <translation>&Informacje o...</translation> </message> <message> <source>Save Main Screen image</source> @@ -397,19 +397,19 @@ <name>QVFbRateDialog</name> <message> <source>Target frame rate:</source> - <translation type="unfinished"></translation> + <translation>Docelowa częstotliwość:</translation> </message> <message> <source>%1fps</source> - <translation type="unfinished"></translation> + <translation>%1fps</translation> </message> <message> <source>OK</source> - <translation type="unfinished"></translation> + <translation>OK</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>Anuluj</translation> </message> </context> </TS> |