summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/createpackage.pl64
-rwxr-xr-xbin/syncqt2
-rw-r--r--configure.exebin1178112 -> 1180160 bytes
-rw-r--r--demos/embedded/fluidlauncher/fluidlauncher.pro2
-rw-r--r--dist/changes-4.6.2117
-rw-r--r--doc/src/deployment/deployment.qdoc34
-rw-r--r--doc/src/development/qmake-manual.qdoc12
-rw-r--r--doc/src/images/qpainter-text.pngbin791 -> 1391 bytes
-rw-r--r--doc/src/snippets/code/doc_src_deployment.qdoc13
-rw-r--r--doc/src/snippets/code/doc_src_qmake-manual.qdoc10
-rw-r--r--mkspecs/features/symbian/def_files.prf48
-rw-r--r--mkspecs/features/symbian/def_files_disabled.prf12
-rw-r--r--qmake/generators/makefile.cpp13
-rw-r--r--qmake/generators/symbian/symmake.cpp86
-rw-r--r--src/3rdparty/phonon/mmf/environmentalreverb.cpp53
-rw-r--r--src/3rdparty/s60/eiksoftkeyimage.h112
-rw-r--r--src/corelib/corelib.pro2
-rw-r--r--src/corelib/tools/qdatetime.cpp60
-rw-r--r--src/corelib/tools/qstringbuilder.h2
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp1
-rw-r--r--src/gui/kernel/qapplication_s60.cpp3
-rw-r--r--src/gui/kernel/qcocoapanel_mac.mm3
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h20
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm9
-rw-r--r--src/gui/kernel/qcocoawindow_mac_p.h3
-rw-r--r--src/gui/kernel/qdesktopwidget_s60.cpp18
-rw-r--r--src/gui/kernel/qsoftkeymanager_s60.cpp89
-rw-r--r--src/gui/kernel/qsoftkeymanager_s60_p.h4
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm2
-rw-r--r--src/gui/kernel/qwidget.cpp27
-rw-r--r--src/gui/kernel/qwidget_mac.mm19
-rw-r--r--src/gui/kernel/qwidget_s60.cpp4
-rw-r--r--src/gui/kernel/qwidget_x11.cpp77
-rw-r--r--src/gui/painting/qwindowsurface_raster.cpp4
-rw-r--r--src/gui/styles/qcommonstyle.cpp4
-rw-r--r--src/gui/styles/qmacstyle_mac.mm10
-rw-r--r--src/gui/text/qzip.cpp9
-rw-r--r--src/gui/text/qzipreader_p.h2
-rw-r--r--src/gui/text/qzipwriter_p.h2
-rw-r--r--src/gui/widgets/qtoolbar.cpp3
-rw-r--r--src/plugins/imageformats/gif/qgifhandler.cpp115
-rw-r--r--src/plugins/imageformats/gif/qgifhandler.h4
-rw-r--r--src/plugins/kbddrivers/linuxinput/main.cpp2
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp5
-rw-r--r--tests/auto/qdatetime/tst_qdatetime.cpp7
-rw-r--r--tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp8
-rw-r--r--tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp26
-rw-r--r--tests/auto/qimagereader/images/qt-gif-anim.gifbin0 -> 1661 bytes
-rw-r--r--tests/auto/qimagereader/images/qt-gif-noanim.gifbin0 -> 1642 bytes
-rw-r--r--tests/auto/qimagereader/qimagereader.qrc4
-rw-r--r--tests/auto/qimagereader/tst_qimagereader.cpp15
-rw-r--r--tools/configure/configureapp.cpp4
-rw-r--r--tools/linguist/linguist/mainwindow.cpp29
-rw-r--r--tools/linguist/linguist/messageeditor.cpp8
-rw-r--r--tools/linguist/linguist/messageeditorwidgets.cpp6
-rw-r--r--translations/designer_de.ts45
-rw-r--r--translations/qt_de.ts533
57 files changed, 1296 insertions, 470 deletions
diff --git a/bin/createpackage.pl b/bin/createpackage.pl
index 197dffe..460df31 100755
--- a/bin/createpackage.pl
+++ b/bin/createpackage.pl
@@ -64,7 +64,7 @@ sub Usage() {
==============================================================================================
Convenience script for creating signed packages you can install on your phone.
-Usage: createpackage.pl [options] templatepkg target-platform [certificate key [passphrase]]
+Usage: createpackage.pl [options] templatepkg [target]-[platform] [certificate key [passphrase]]
Where supported optiobns are as follows:
[-i|install] = Install the package right away using PC suite
@@ -72,9 +72,10 @@ Where supported optiobns are as follows:
[-c|certfile=<file>] = The file containing certificate information for signing.
The file can have several certificates, each specified in
separate line. The certificate, key and passphrase in line
- must be ';' separated. Lines starting with '#' are treated
- as a comments. Also empty lines are ignored. The paths in
+ must be ';' separated. Lines starting with '#' are treated
+ as a comments. Also empty lines are ignored. The paths in
<file> can be absolute or relative to <file>.
+ [-u|unsigned] = Preserves the unsigned package
Where parameters are as follows:
templatepkg = Name of .pkg file template
target = Either debug or release
@@ -86,10 +87,10 @@ Where parameters are as follows:
Example:
createpackage.pl fluidlauncher_template.pkg release-armv5
-
+
Example with certfile:
createpackage.pl -c=mycerts.txt fluidlauncher_template.pkg release-armv5
-
+
Content of 'mycerts.txt' must be something like this:
# This is comment line, also the empty lines are ignored
rd.cer;rd-key.pem
@@ -109,8 +110,12 @@ ENDUSAGESTRING
my $install = "";
my $preprocessonly = "";
my $certfile = "";
+my $preserveUnsigned = "";
-unless (GetOptions('i|install' => \$install, 'p|preprocess' => \$preprocessonly, 'c|certfile=s' => \$certfile)){
+unless (GetOptions('i|install' => \$install,
+ 'p|preprocess' => \$preprocessonly,
+ 'c|certfile=s' => \$certfile,
+ 'u|unsigned' => \$preserveUnsigned,)){
Usage();
}
@@ -134,7 +139,12 @@ my $passphrase = $ARGV[4];
# Generate output pkg basename (i.e. file name without extension)
my $pkgoutputbasename = $templatepkg;
-$pkgoutputbasename =~ s/_template\.pkg/_$targetplatform/g;
+my $preservePkgOutput = "";
+$pkgoutputbasename =~ s/_template/_$targetplatform/g;
+if ($pkgoutputbasename eq $templatepkg) {
+ $preservePkgOutput = "1";
+}
+$pkgoutputbasename =~ s/\.pkg//g;
$pkgoutputbasename = lc($pkgoutputbasename);
# Store output file names to variables
@@ -150,12 +160,20 @@ $certpath =~ s-^(.*[^\\])$-$1\\-o; # ensure path ends with a backslash
$certpath =~ s-/-\\-go; # for those working with UNIX shells
$certpath =~ s-bin\\$-src\\s60installs\\-; # certificates are one step up in hierarcy
-# Check some pre-conditions and print error messages if needed
-unless (length($templatepkg) && length($platform) && length($target)) {
- print "\nError: Template PKG filename, platform or target is not defined!\n";
+# Check some pre-conditions and print error messages if needed.
+unless (length($templatepkg)) {
+ print "\nError: Template PKG filename is not defined!\n";
Usage();
}
+# If the pkg file is not actually a template, there is no need for plaform or target.
+if ($templatepkg =~ m/_template\.pkg/i) {
+ unless (length($platform) && length($target)) {
+ print "\nError: Platform or target is not defined!\n";
+ Usage();
+ }
+}
+
# Check template exist
stat($templatepkg);
unless( -e _ ) {
@@ -192,18 +210,18 @@ if (length($certfile)) {
next if /^(\s)*$/; # skip blank lines
chomp; # remove trailing newline characters
my @certinfo = split(';', $_); # split row to certinfo
-
+
# Trim spaces
for(@certinfo) {
s/^\s+//;
s/\s+$//;
- }
-
+ }
+
# Do some validation
- unless(scalar(@certinfo) >= 2 && scalar(@certinfo) <= 3 && length($certinfo[0]) && length($certinfo[1]) ) {
+ unless(scalar(@certinfo) >= 2 && scalar(@certinfo) <= 3 && length($certinfo[0]) && length($certinfo[1]) ) {
print "\nError: $certfile line '$_' does not contain valid information!\n";
- Usage();
- }
+ Usage();
+ }
push @certificates, [@certinfo]; # push data to two dimensional array
}
@@ -212,7 +230,9 @@ if (length($certfile)) {
# Remove any existing .sis packages
unlink $unsigned_sis_name;
unlink $signed_sis_name;
-unlink $pkgoutput;
+if (!$preservePkgOutput) {
+ unlink $pkgoutput;
+}
# Preprocess PKG
local $/;
@@ -254,10 +274,14 @@ if( -e _ ) {
system ("signsis $signed_sis_name $signed_sis_name $abscert $abskey $row->[2]");
print ("\tAdditionally signed the SIS with certificate: $row->[0]!\n");
}
-
+
# remove temporary pkg and unsigned sis
- unlink $pkgoutput;
- unlink $unsigned_sis_name;
+ if (!$preservePkgOutput) {
+ unlink $pkgoutput;
+ }
+ if (!$preserveUnsigned) {
+ unlink $unsigned_sis_name;
+ }
# Install the sis if requested
if ($install) {
diff --git a/bin/syncqt b/bin/syncqt
index 1fb5304..db6dce6 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -194,6 +194,8 @@ sub classNames {
push @ret, "QtConcurrentFilter"
} elsif(basename($iheader) eq "qtconcurrentrun.h") {
push @ret, "QtConcurrentRun"
+ } elsif(basename($iheader) eq "qaudio.h") {
+ push @ret, "QAudio"
}
my $parsable = "";
diff --git a/configure.exe b/configure.exe
index 21fdcfa..8913de1 100644
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro
index 92d6e1e..f71388c 100644
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro
@@ -213,5 +213,7 @@ symbian {
DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \
mifs desktopservices_music desktopservices_images fluidbackup
+ DEPLOYMENT.installer_header = 0xA000D7CD
+
TARGET.EPOCHEAPSIZE = 100000 20000000
}
diff --git a/dist/changes-4.6.2 b/dist/changes-4.6.2
index c679ce6..b1c0159 100644
--- a/dist/changes-4.6.2
+++ b/dist/changes-4.6.2
@@ -1,7 +1,7 @@
Qt 4.6.2 is a bug-fix release. It maintains both forward and backward
-compatibility (source and binary) with Qt 4.6.0. For more details,
-refer to the online documentation included in this distribution. The
-documentation is also available online:
+compatibility (source and binary) with Qt 4.6.0 and 4.6.1. For more
+details, refer to the online documentation included in this
+distribution. The documentation is also available online:
http://qt.nokia.com/doc/4.6
@@ -40,6 +40,26 @@ Optimizations
QtCore
------
+ - QAtomicPointer
+ * [QTBUG-7356] Fixed a compilation failure when using the Intel
+ compiler on IA-64
+
+ - QFile
+ * Fixed double-buffering issue when opening files in buffered mode.
+ * [QTBUG-7285] QFile::remove would fail if an unrelated operation on the
+ same instance had been previously failed. This manisfested itself in
+ QTemporaryFile failing to auto-remove files and QFile::copy leaving
+ temporary files behind in certain situations.
+
+ - QFSFileEngine
+ * Fix typo that made realpath() not being used
+
+ - QIODevice
+ * Optimized readAll()
+
+ - QReadWriteLock
+ * [MR 426] Fixed documentation
+
- QXmlStreamWriter
* [QTBUG-6893] Fixed adding extra Byte Order Marks when writing to a xml file.
@@ -62,20 +82,44 @@ QtGui
- QPDFEngine
* [QTBUG-7249] Fixed the encoding of the Tile and Creator tags in the PDF engine.
+ - QApplication
+ * [QTBUG-6098] Added a flag to avoid construction of application panes.
+ - QInputContext
+ * [QTBUG-7439] Avoided the loss of preedit text when losing focus on Symbian.
+
+ * [QT-2629] Implemented event filter functions for Symbian.
* [QTBUG-7029] Fixed a crash when re-creating QApplication object due to a
dangling gesture manager pointer.
+ * [QTBUG-7198] Setting a style sheet could break the checkbox position in item views.
+ * [QTBUG-7253] Fixed wrong stroke clipping with the raster engine when using a QPen
+ with a style other than SolidLine.
+
+
+ * [MR 2077] Integrated merge request 2077
QtDBus
------
- - foo
- * bar
+ - QDBusConnection
+ * [QT-2307] Fixed sending of D-Bus method calls with QDBus::BlockWithGui
QtNetwork
---------
- - foo
- * bar
+ - QNetworkAccessManager
+ * Optimizations
+ * HTTP: Get rid of QAbstractSocket warnings that were sometimes displayed
+ * HTTP: setReadBufferSize() of the QNetworkReply finally is working on all layers
+ * [QTBUG-7713] HTTP: Fix bug related to re-sending a request
+ * [QTBUG-7060] Fixed an issue with parsing of HTTP headers like
+ "private, max-age=300"
+
+ - QSslCertificate
+ * [QTBUG-6466] Fix issuerInfo() and subjectInfo()
+
+ - QTcpSocket
+ * [QTBUG-7344] Fix performance degredation with write() on Windows
+ * [QTBUG-7316,QTBUG-7317] Also handle unknown errors from socket engine
QtOpenGL
--------
@@ -127,6 +171,15 @@ Qt Plugins
- foo
* bar
+Examples
+--------
+
+ - QtMultimedia
+ * [MR 418] Fixed the example for QAudioOutput
+
+ - WebKit
+ * [MR 2235] Added the framecapture example to the default build
+
Third party components
----------------------
@@ -142,7 +195,7 @@ Third party components
Qt for Unix (X11 and Mac OS X)
------------------------------
- -
+ -
Qt for Linux/X11
----------------
@@ -152,19 +205,26 @@ Qt for Linux/X11
* Fixed a crash when an input method tries to create a widget after the
application is destroyed.
+ - [QTBUG-6952] Fixed a problem using NoButtons in spinbox with QGtkStyle
+ - [QTBUG-7504] Fixed missing focus rect on check- and radiobutton with
+ some GTK+ themes.
+ - [QTBUG-6522] Fixed missing menu separator in some GTK+ themes.
+
Qt for Windows
--------------
- -
-
Qt for Mac OS X
---------------
- - QPrintPreviewDialog
- * [QTBUG-7312]: Menubar and dock disappear after hiding a fullscreen widget on Cocoa.
- * [QTBUG-7481]: Re-added the Close button in QPrintPreviewDialog for Mac/Carbon.
- * [QTBUG-7522]: Drawing fake buttons using QMacStyle+QStyleOptionViewItemV4 lead to crash.
- * [QTBUG-7625]: Calling showFullScreen() then showNormal() on a widget results in top menu hiding.
+ - [QTBUG-7832]: Restored missing margins around non-unified toolbars.
+ - [QTBUG-7312]: Menubar and dock disappear after hiding a fullscreen widget on Cocoa.
+ - [QTBUG-7481]: Re-added the Close button in QPrintPreviewDialog for Mac/Carbon.
+ - [QTBUG-7522]: Drawing fake buttons using QMacStyle+QStyleOptionViewItemV4 lead to crash.
+ - [QTBUG-7625]: Calling showFullScreen() then showNormal() on a widget results in top menu hiding.
+ - [QTBUG-7086]: QFileDialog now correctly responds to fileMode & acceptMode changes.
+ - [QTBUG-7162]: Fixed a crash in Designer when previewing a QMainWindow with native toolbar.
+ - [QTBUG-7305]: Fixed a crash when deleting QMainWindow with native toolbar on Cocoa.
+ - [QTBUG-6882]: Fixed a text layout issue with QHeaderView in right-to-left mode.
Qt for Embedded Linux
@@ -188,6 +248,24 @@ Qt for Windows CE
-
+Qt for Symbian
+--------------
+
+- QProcess
+ * [QTBUG-7667] Fixed no-timeout case for QProcess::waitForFinished.
+
+- qmake
+ * [QTBUG-7695] Added support for ifdeffing for manufacturer in generated
+ pkg files.
+ * [QTBUG-7908] Smart installer package generation support
+
+- Patch_capabilities script
+ * Added support for embedded sis name/uid patching.
+
+- Qt deployment
+ * [QTBUG-7518] Backup and restore support for Qt libs
+
+
****************************************************************************
* Tools *
****************************************************************************
@@ -210,5 +288,12 @@ Qt for Windows CE
* Important Behavior Changes *
****************************************************************************
- -
+ - QNetworkAccessManager cache
+ * QNetworkAccessManager will no longer return expired pages, as
+ stated in the documentation
+ * The behaviour of PreferCache and PreferNetwork modes now match
+ the documentation more closely
+ - QUrl
+ * QUrl will now accept hostnames ending in dot and will not treat
+ those as invalid hostnames
diff --git a/doc/src/deployment/deployment.qdoc b/doc/src/deployment/deployment.qdoc
index 8ba106c..575a6dc 100644
--- a/doc/src/deployment/deployment.qdoc
+++ b/doc/src/deployment/deployment.qdoc
@@ -1573,18 +1573,13 @@
By default \c .pkg file generated by \c qmake adds support for all
S60 3rd edition FP1, S60 3rd edition FP2 and S60 5th edition devices.
- As a last step we will embed the \c qt_installer.sis file to the Wiggly
- deployment file:
+ As a last step we will instruct qmake to generate smart installer \c .pkg file by defining
+ the UID of the installation package. The UID needs to be different than the application UID,
+ and should be reserved via normal Symbian mechanisms. You can use a random UID starting with
+ \c 0xE for testing purposes:
\snippet doc/src/snippets/code/doc_src_deployment.qdoc 58
- When \c qt_installer.sis is embedded to the application deployment file, the
- end-user does not need to download and install all dependencies separately.
- The drawback of \c .sis embedding is that the application \c .sis file size becomes
- big. To address these problems Forum Nokia is planning to release a smart installer
- which will take care of downloading and installing the necessary dependencies
- over-the-air. The expected availability of smart installer is 1Q 2010.
-
Now we are ready to compile the application and create the application
deployment file. Run \c qmake to create Symbian specific makefiles, resources (\.rss)
and deployment packaging files (\c .pkg). And do build to create the
@@ -1593,13 +1588,26 @@
\snippet doc/src/snippets/code/doc_src_deployment.qdoc 59
If everything compiled and linked without any errors, we are now ready to create
- an application installation file:
+ an application package (\c wiggly.sis):
\snippet doc/src/snippets/code/doc_src_deployment.qdoc 60
- If all binaries and dependencies were found, we should now have a self-signed
- \c wiggly_release-gcce.sis ready to be installed on a device. For more information
- about creating a \c .sis file and installing it to device see also
+ Now you can create the smart installer package for the application:
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 61
+
+ If all binaries and dependencies were found, you should now have a self signed
+ \c wiggly_installer.sis ready to be installed on a device. The smart installer
+ contained in the in the installer package will download the necessary dependencies
+ such as Qt libraries to the device.
+
+ \note If you want to have your application properly Symbian Signed for distribution,
+ you will have to properly sign both the application and the application installer packages.
+ Please see
+ \l{http://developer.symbian.org/wiki/index.php/Category:Symbian_Signed}
+ {Symbian Signed wiki} for more information about Symbian Signed.
+
+ For more information about creating a \c .sis file and installing it to device see also
\l {The Symbian platform - Introduction to Qt#Installing your own applications}{here}.
*/
diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index d7aa0db..49e1e71 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -1431,6 +1431,18 @@ is the application private directory on the drive it is installed to.
\snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 141
+ On the Symbian platform, you can use \c{DEPLOYMENT.installer_header}
+ variable to generate smart installer wrapper for your application.
+ If you specify just UID of the installer package as the value, then
+ installer package name and version will be autogenerated:
+
+ \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 146
+
+ If autogenerated values are not suitable, you can also specify the sis
+ header yourself using this variable:
+
+ \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 147
+
\target DEPLOYMENT_PLUGIN
\section1 DEPLOYMENT_PLUGIN
diff --git a/doc/src/images/qpainter-text.png b/doc/src/images/qpainter-text.png
index af7821c..e95c965 100644
--- a/doc/src/images/qpainter-text.png
+++ b/doc/src/images/qpainter-text.png
Binary files differ
diff --git a/doc/src/snippets/code/doc_src_deployment.qdoc b/doc/src/snippets/code/doc_src_deployment.qdoc
index 7eb8808..9c00681 100644
--- a/doc/src/snippets/code/doc_src_deployment.qdoc
+++ b/doc/src/snippets/code/doc_src_deployment.qdoc
@@ -475,11 +475,7 @@ default_deployment.pkg_prerules += supported_platforms
//! [57]
//! [58]
-embedded_deployments = \
- "; Embed Qt dependencies" \
- "@\"$$[QT_INSTALL_PREFIX]/qt_installer.sis\",(0x2001E62D)"
-
-default_deployment.pkg_prerules += embedded_deployments
+DEPLOYMENT.installer_header = 0xE2345678
//! [58]
//! [59]
@@ -489,4 +485,9 @@ make release-gcce
//! [60]
make sis
-//! [60] \ No newline at end of file
+ren wiggly_release-gcce.sis wiggly.sis
+//! [60]
+
+//! [61]
+createpackage wiggly_installer.pkg
+//! [61] \ No newline at end of file
diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
index b1cbc72..a48b53f 100644
--- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc
+++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
@@ -963,9 +963,9 @@ RSS_RULES += myrssrules
//! [145]
//! [146]
-BLD_INF_RULES.prj_exports += \
- "$${LITERAL_HASH}include <platform_paths.hrh>" \
- "rom/my.iby APP_LAYER_PUBLIC_EXPORT_PATH(my.iby)" \
- "inc/myheader.h mycomp/myheader.h" \
- ":zip my_api.zip my_api"
+DEPLOYMENT.installer_header = 0x12345678
//! [146]
+
+//! [147]
+DEPLOYMENT.installer_header = "$${LITERAL_HASH}{\"My Application Installer\"},(0x12345678),1,0,0"
+//! [147]
diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf
index c29d4ec..48d91aa 100644
--- a/mkspecs/features/symbian/def_files.prf
+++ b/mkspecs/features/symbian/def_files.prf
@@ -3,24 +3,32 @@
CONFIG -= def_files_disabled
-!isEmpty(defFilePath) {
- defBlock = \
- "$${LITERAL_HASH}ifdef WINSCW" \
- "DEFFILE $$defFilePath/bwins/$${TARGET}.def" \
- "$${LITERAL_HASH}elif defined EABI" \
- "DEFFILE $$defFilePath/eabi/$${TARGET}.def" \
- "$${LITERAL_HASH}endif"
-
- MMP_RULES += defBlock
-} else {
- # If defFilePath is not defined, then put the folders containing the DEF files at the
- # same level as the .pro (and generated MMP) file(s)
- defBlock = \
- "$${LITERAL_HASH}ifdef WINSCW" \
- "DEFFILE ./bwins/$${TARGET}.def" \
- "$${LITERAL_HASH}elif defined EABI" \
- "DEFFILE ./eabi/$${TARGET}.def" \
- "$${LITERAL_HASH}endif"
-
- MMP_RULES += defBlock
+# Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one
+# (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements
+# in a defBlock variable; but otherwise we have to expand MMP_RULES then scan for the DEFFILE keyword)
+!contains(MMP_RULES, defBlock) {
+ # Apps are executables on Symbian, so don't have exports, and therefore don't have DEF files
+ # Plugins use standard DEF files, which qmake generates, so shouldn't be using these DEFFILE
+ # statements - they use the qmake generated statements instead
+ # Static libraries obviously don't have DEF files, as they don't take part in dynamic linkage
+ !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): {
+ !isEmpty(defFilePath) {
+ defBlock = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "DEFFILE $$defFilePath/bwins/$${TARGET}.def" \
+ "$${LITERAL_HASH}elif defined EABI" \
+ "DEFFILE $$defFilePath/eabi/$${TARGET}.def" \
+ "$${LITERAL_HASH}endif"
+ } else {
+ # If defFilePath is not defined, then put the folders containing the DEF files at the
+ # same level as the .pro (and generated MMP) file(s)
+ defBlock = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "DEFFILE ./bwins/$${TARGET}.def" \
+ "$${LITERAL_HASH}elif defined EABI" \
+ "DEFFILE ./eabi/$${TARGET}.def" \
+ "$${LITERAL_HASH}endif"
+ }
+ MMP_RULES += defBlock
+ }
}
diff --git a/mkspecs/features/symbian/def_files_disabled.prf b/mkspecs/features/symbian/def_files_disabled.prf
index d5c9505..557c5e3 100644
--- a/mkspecs/features/symbian/def_files_disabled.prf
+++ b/mkspecs/features/symbian/def_files_disabled.prf
@@ -2,6 +2,12 @@
CONFIG -= def_files
-# with EXPORTUNFROZEN enabled, new exports are included in the dll without
-# needing to run abld/sbs freeze
-MMP_RULES += EXPORTUNFROZEN
+# See def_files.prf for reasoning on the slight nastiness of this
+!contains(MMP_RULES, defBlock) {
+ # See def_files.prf for reasoning for excluding target types and configs below
+ !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): {
+ # with EXPORTUNFROZEN enabled, new exports are included in the dll and dso/lib without
+ # needing to run abld/sbs freeze
+ MMP_RULES += EXPORTUNFROZEN
+ }
+}
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 69e1d8a..db2737b 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1513,6 +1513,19 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
base = fi.fileName();
val += base;
}
+ } else if(var == QLatin1String("QMAKE_FILE_EXT")) {
+ filePath = true;
+ for(int i = 0; i < in.size(); ++i) {
+ QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i))));
+ QString ext;
+ // Ensure complementarity with QMAKE_FILE_BASE
+ int baseLen = fi.completeBaseName().length();
+ if(baseLen == 0)
+ ext = fi.fileName();
+ else
+ ext = fi.fileName().remove(0, baseLen);
+ val += ext;
+ }
} else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) {
filePath = true;
for(int i = 0; i < in.size(); ++i)
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 8f712d8..6c44f0b 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -292,12 +292,23 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
}
generatedFiles << pkgFile.fileName();
+ QTextStream t(&pkgFile);
+
+ QString installerSisHeader = project->values("DEPLOYMENT.installer_header").join("\n");
+ QString wrapperStreamBuffer;
+ QTextStream tw(&wrapperStreamBuffer);
+
+ QString dateStr = QDateTime::currentDateTime().toString(Qt::ISODate);
// Header info
- QTextStream t(&pkgFile);
- t << QString("; %1 generated by qmake at %2").arg(pkgFilename).arg(QDateTime::currentDateTime().toString(Qt::ISODate)) << endl;
- t << "; This file is generated by qmake and should not be modified by the user" << endl;
- t << ";" << endl << endl;
+ QString wrapperPkgFilename = QString("%1_installer.%2")
+ .arg(fixedTarget)
+ .arg("pkg");
+ QString headerComment = "; %1 generated by qmake at %2\n"
+ "; This file is generated by qmake and should not be modified by the user\n"
+ ";\n\n";
+ t << headerComment.arg(pkgFilename).arg(dateStr);
+ tw << headerComment.arg(wrapperPkgFilename).arg(dateStr);
// Construct QStringList from pkg_prerules since we need search it before printed to file
QStringList rawPkgPreRules;
@@ -320,8 +331,9 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
if (!containsStartWithItem('&', rawPkgPreRules)) {
// language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS)
- t << "; Language" << endl;
- t << "&EN" << endl << endl;
+ QString languageCode = "; Language\n&EN\n\n";
+ t << languageCode;
+ tw << languageCode;
} else {
// In case user defines langs, he must take care also about SIS header
if (!containsStartWithItem('#', rawPkgPreRules))
@@ -330,34 +342,51 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
// name of application, UID and version
QString applicationVersion = project->first("VERSION").isEmpty() ? "1,0,0" : project->first("VERSION").replace('.', ',');
+ QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
+ QString visualTarget = escapeFilePath(fileFixify(project->first("TARGET")));
+ visualTarget = removePathSeparators(visualTarget);
+ QString wrapperTarget = visualTarget + " installer";
- if (!containsStartWithItem('#', rawPkgPreRules)) {
- QString visualTarget = escapeFilePath(fileFixify(project->first("TARGET")));
- visualTarget = removePathSeparators(visualTarget);
+ if (installerSisHeader.startsWith("0x", Qt::CaseInsensitive)) {
+ tw << sisHeader.arg(wrapperTarget).arg(installerSisHeader).arg(applicationVersion);
+ } else {
+ tw << installerSisHeader << endl;
+ }
- t << "; SIS header: name, uid, version" << endl;
- t << QString("#{\"%1\"},(%2),%3").arg(visualTarget).arg(uid3).arg(applicationVersion) << endl << endl;
+ if (!containsStartWithItem('#', rawPkgPreRules)) {
+ t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion);
}
// Localized vendor name
+ QString vendorName;
if (!containsStartWithItem('%', rawPkgPreRules)) {
- t << "; Localised Vendor name" << endl;
- t << "%{\"Vendor\"}" << endl << endl;
+ vendorName += "; Localised Vendor name\n%{\"Vendor\"}\n\n";
}
// Unique vendor name
if (!containsStartWithItem(':', rawPkgPreRules)) {
- t << "; Unique Vendor name" << endl;
- t << ":\"Vendor\"" << endl << endl;
+ vendorName += "; Unique Vendor name\n:\"Vendor\"\n\n";
}
+ t << vendorName;
+ tw << vendorName;
+
// PKG pre-rules - these are added before actual file installations i.e. SIS package body
if (rawPkgPreRules.size()) {
- t << "; Manual PKG pre-rules from PRO files" << endl;
+ QString comment = "\n; Manual PKG pre-rules from PRO files\n";
+ t << comment;
+ tw << comment;
+
foreach(QString item, rawPkgPreRules) {
+ // Only regular pkg file should have package dependencies or pkg header if that is
+ // defined using prerules.
+ if (!item.startsWith("(") && !item.startsWith("#")) {
+ tw << item << endl;
+ }
t << item << endl;
}
t << endl;
+ tw << endl;
}
// Begin Manufacturer block
@@ -380,7 +409,6 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
QString epocReleasePath = QString("%1epoc32/release/$(PLATFORM)/$(TARGET)")
.arg(epocRoot());
-
if (targetType == TypeExe) {
// deploy .exe file
t << "; Executable and default resource files" << endl;
@@ -469,6 +497,30 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
<< " - \"\", FILETEXT, TEXTEXIT" << endl
<< "ENDIF ; MANUFACTURER" << endl;
}
+
+ // Write wrapper pkg
+ if (!installerSisHeader.isEmpty()) {
+ QFile wrapperPkgFile(wrapperPkgFilename);
+ if (!wrapperPkgFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ PRINT_FILE_CREATE_ERROR(wrapperPkgFilename);
+ return;
+ }
+
+ generatedFiles << wrapperPkgFile.fileName();
+ QTextStream twf(&wrapperPkgFile);
+
+ twf << wrapperStreamBuffer << endl;
+
+ // Wrapped files deployment
+ QString currentPath = qmake_getpwd();
+ QString sisName = QString("%1.sis").arg(fixedTarget);
+ twf << "\"" << currentPath << "/" << sisName << "\" - \"c:\\adm\\" << sisName << "\"" << endl;
+
+ QString bootStrapPath = QLibraryInfo::location(QLibraryInfo::PrefixPath);
+ bootStrapPath.append("/bootstrap.sis");
+ QFileInfo fi(fileInfo(bootStrapPath));
+ twf << "@\"" << fi.absoluteFilePath() << "\",(0x2002CCCD)" << endl;
+ }
}
bool SymbianMakefileGenerator::containsStartWithItem(const QChar &c, const QStringList& src)
diff --git a/src/3rdparty/phonon/mmf/environmentalreverb.cpp b/src/3rdparty/phonon/mmf/environmentalreverb.cpp
index 4a6ce29..d4f5223 100644
--- a/src/3rdparty/phonon/mmf/environmentalreverb.cpp
+++ b/src/3rdparty/phonon/mmf/environmentalreverb.cpp
@@ -139,77 +139,68 @@ bool EnvironmentalReverb::getParameters(CMdaAudioOutputStream *stream,
TInt32 min, max;
TUint32 umin, umax;
- // DecayHFRatio
- // Ratio of high-frequency decay time to the value specified by
- // DecayTime.
effect->DecayHFRatioRange(umin, umax);
+ //: DecayHFRatio: Ratio of high-frequency decay time to the value specified by
+ //: DecayTime.
parameters.append(createParameter(
DecayHFRatio, tr("Decay HF ratio (%)"), effect->DecayHFRatio(),
umin, umax));
- // DecayTime
- // Time over which reverberation is diminished.
effect->DecayTimeRange(umin, umax);
+ //: DecayTime: Time over which reverberation is diminished.
parameters.append(createParameter(
DecayTime, tr("Decay time (ms)"), effect->DecayTime(),
umin, umax));
- // Density
- // Delay between first and subsequent reflections.
- // Note that the S60 platform documentation does not make clear
- // the distinction between this value and the Diffusion value.
+ //: Density Delay between first and subsequent reflections.
+ //: Note that the S60 platform documentation does not make clear
+ //: the distinction between this value and the Diffusion value.
parameters.append(createParameter(
Density, tr("Density (%)"), effect->Density(), 0, 100));
- // Diffusion
- // Delay between first and subsequent reflections.
- // Note that the S60 platform documentation does not make clear
- // the distinction between this value and the Density value.
+ //: Diffusion: Delay between first and subsequent reflections.
+ //: Note that the S60 platform documentation does not make clear
+ //: the distinction between this value and the Density value.
parameters.append(createParameter(
Diffusion, tr("Diffusion (%)"), effect->Diffusion(), 0, 100));
- // ReflectionsDelay
- // Amount of delay between the arrival the direct path from the
- // source and the arrival of the first reflection.
+ //: ReflectionsDelay: Amount of delay between the arrival the direct
+ //: path from the source and the arrival of the first reflection.
parameters.append(createParameter(
ReflectionsDelay, tr("Reflections delay (ms)"),
effect->ReflectionsDelay(), 0, effect->ReflectionsDelayMax()));
- // ReflectionsLevel
- // Amplitude of reflections. This value is corrected by the RoomLevel
- // to give the final reflection amplitude.
- effect->ReflectionLevelRange(min, max);
+ effect->ReflectionLevelRange(min, max);
+ //: ReflectionsLevel: Amplitude of reflections. This value is
+ //: corrected by the RoomLevel to give the final reflection amplitude.
parameters.append(createParameter(
ReflectionsLevel, tr("Reflections level (mB)"),
effect->ReflectionsLevel(),
min, max, EffectParameter::LogarithmicHint));
- // ReverbDelay
- // Amount of time between arrival of the first reflection and start of
- // the late reverberation.
+ //: ReverbDelay: Amount of time between arrival of the first
+ //: reflection and start of the late reverberation.
parameters.append(createParameter(
ReverbDelay, tr("Reverb delay (ms)"), effect->ReverbDelay(),
0, effect->ReverbDelayMax()));
- // ReverbLevel
- // Amplitude of reverberations. This value is corrected by the
- // RoomLevel to give the final reverberation amplitude.
effect->ReverbLevelRange(min, max);
+ //: ReverbLevel Amplitude of reverberations. This value is
+ //: corrected by the RoomLevel to give the final reverberation
+ //: amplitude.
parameters.append(createParameter(
ReverbLevel, tr("Reverb level (mB)"), effect->ReverbLevel(),
min, max, EffectParameter::LogarithmicHint));
- // RoomHFLevel
- // Amplitude of low-pass filter used to attenuate the high frequency
- // component of reflected sound.
effect->RoomHFLevelRange(min, max);
+ //: RoomHFLevel: Amplitude of low-pass filter used to attenuate the
+ //: high frequency component of reflected sound.
parameters.append(createParameter(
RoomHFLevel, tr("Room HF level"), effect->RoomHFLevel(),
min, max));
- // RoomLevel
- // Master volume control for all reflected sound.
effect->RoomLevelRange(min, max);
+ //: RoomLevel: Master volume control for all reflected sound.
parameters.append(createParameter(
RoomLevel, tr("Room level (mB)"), effect->RoomLevel(),
min, max, EffectParameter::LogarithmicHint));
diff --git a/src/3rdparty/s60/eiksoftkeyimage.h b/src/3rdparty/s60/eiksoftkeyimage.h
new file mode 100644
index 0000000..84f6108a
--- /dev/null
+++ b/src/3rdparty/s60/eiksoftkeyimage.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Changes cba button's label to image.
+*
+*/
+
+#ifndef EIKSOFTKEYIMAGE_H
+#define EIKSOFTKEYIMAGE_H
+
+// FORWARD DECLARATIONS
+class CEikButtonGroupContainer;
+
+// CLASS DECLARATION
+
+/**
+* Changes cba button's label to image.
+*
+* @lib EIKCOCTL
+* @since 2.0
+*/
+class EikSoftkeyImage
+ {
+ public:
+
+ /**
+ * Set image to cba button by replacing label
+ * @since 2.0
+ * @param aButtonGroupContainer Button container
+ * @param aImage Image to button,
+ * Takes Images ownership
+ * @param aLeft Boolean: left or right button.
+ * If true, then change left,
+ * if false, change right
+ */
+ IMPORT_C static void SetImage(CEikButtonGroupContainer* aButtonGroupContainer, CEikImage& aImage, TBool aLeft);
+
+ /**
+ * Change to cba button image back to label
+ * @since 2.0
+ * @param aButtonGroupContainer Button container
+ * @param aLeft Boolean: left or right button.
+ * If true, then change left,
+ * if false, change right
+ */
+ IMPORT_C static void SetLabel(CEikButtonGroupContainer* aButtonGroupContainer, TBool aLeft);
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ EikSoftkeyImage() {};
+
+
+ };
+
+#endif // EIKSOFTKEYIMAGE_H
+
+// End of File
+
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index 7f33791..9a15bf1 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -35,6 +35,4 @@ symbian: {
# Workaroud for problems with paging this dll
MMP_RULES -= PAGED
MMP_RULES *= UNPAGED
- # Timezone server
- LIBS += -ltzclient
}
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index 9a361c0..c1027ed 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -75,7 +75,6 @@
#if defined(Q_OS_SYMBIAN)
#include <e32std.h>
-#include <tz.h>
#endif
QT_BEGIN_NAMESPACE
@@ -3722,32 +3721,23 @@ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time)
#elif defined(Q_OS_SYMBIAN)
// months and days are zero index based
_LIT(KUnixEpoch, "19700000:000000.000000");
+ TTimeIntervalSeconds utcOffset = User::UTCOffset();
TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC);
TTime epochTTime;
TInt err = epochTTime.Set(KUnixEpoch);
tm res;
if(err == KErrNone) {
TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC;
- TRAP(err,
- RTz tz;
- User::LeaveIfError(tz.Connect());
- CleanupClosePushL(tz);
- res.tm_isdst = tz.IsDaylightSavingOnL(*tz.GetTimeZoneIdL(),utcTTime);
- User::LeaveIfError(tz.ConvertToLocalTime(utcTTime));
- CleanupStack::PopAndDestroy(&tz));
- if (KErrNone == err) {
- TDateTime localDateTime = utcTTime.DateTime();
- res.tm_sec = localDateTime.Second();
- res.tm_min = localDateTime.Minute();
- res.tm_hour = localDateTime.Hour();
- res.tm_mday = localDateTime.Day() + 1; // non-zero based index for tm struct
- res.tm_mon = localDateTime.Month();
- res.tm_year = localDateTime.Year() - 1900;
- // Symbian's timezone server doesn't know how to handle DST before year 1997
- if (res.tm_year < 97)
- res.tm_isdst = -1;
- brokenDown = &res;
- }
+ utcTTime = utcTTime + utcOffset;
+ TDateTime utcDateTime = utcTTime.DateTime();
+ res.tm_sec = utcDateTime.Second();
+ res.tm_min = utcDateTime.Minute();
+ res.tm_hour = utcDateTime.Hour();
+ res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct
+ res.tm_mon = utcDateTime.Month();
+ res.tm_year = utcDateTime.Year() - 1900;
+ res.tm_isdst = 0;
+ brokenDown = &res;
}
#elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS)
// use the reentrant version of localtime() where available
@@ -3822,27 +3812,23 @@ static void localToUtc(QDate &date, QTime &time, int isdst)
#elif defined(Q_OS_SYMBIAN)
// months and days are zero index based
_LIT(KUnixEpoch, "19700000:000000.000000");
+ TTimeIntervalSeconds utcOffset = TTimeIntervalSeconds(0 - User::UTCOffset().Int());
TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC);
TTime epochTTime;
TInt err = epochTTime.Set(KUnixEpoch);
tm res;
if(err == KErrNone) {
- TTime localTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC;
- RTz tz;
- if (KErrNone == tz.Connect()) {
- if (KErrNone == tz.ConvertToUniversalTime(localTTime)) {
- TDateTime utcDateTime = localTTime.DateTime();
- res.tm_sec = utcDateTime.Second();
- res.tm_min = utcDateTime.Minute();
- res.tm_hour = utcDateTime.Hour();
- res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct
- res.tm_mon = utcDateTime.Month();
- res.tm_year = utcDateTime.Year() - 1900;
- res.tm_isdst = (int)isdst;
- brokenDown = &res;
- }
- tz.Close();
- }
+ TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC;
+ utcTTime = utcTTime + utcOffset;
+ TDateTime utcDateTime = utcTTime.DateTime();
+ res.tm_sec = utcDateTime.Second();
+ res.tm_min = utcDateTime.Minute();
+ res.tm_hour = utcDateTime.Hour();
+ res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct
+ res.tm_mon = utcDateTime.Month();
+ res.tm_year = utcDateTime.Year() - 1900;
+ res.tm_isdst = (int)isdst;
+ brokenDown = &res;
}
#elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS)
// use the reentrant version of gmtime() where available
diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h
index ddb5c7d..74661c2 100644
--- a/src/corelib/tools/qstringbuilder.h
+++ b/src/corelib/tools/qstringbuilder.h
@@ -71,7 +71,7 @@ public:
private:
const int m_size;
- const char *m_data;
+ const char * const m_data;
};
struct Q_CORE_EXPORT QAbstractConcatenable
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 451f183..96b9373 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -2748,7 +2748,6 @@ bool QGraphicsView::viewportEvent(QEvent *event)
}
}
}
- d->scene->d_func()->updateAll = false;
}
break;
case QEvent::TouchBegin:
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 6caac9f..6e03d7c 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1647,6 +1647,9 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent
if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::ENotVisible) {
delete w->d_func()->topData()->backingStore;
w->d_func()->topData()->backingStore = 0;
+ // In order to ensure that any resources used by the window surface
+ // are immediately freed, we flush the WSERV command buffer.
+ S60->wsSession().Flush();
} else if ((visChangedEvent->iFlags & TWsVisibilityChangedEvent::EPartiallyVisible)
&& !w->d_func()->maybeBackingStore()) {
w->d_func()->topData()->backingStore = new QWidgetBackingStore(w);
diff --git a/src/gui/kernel/qcocoapanel_mac.mm b/src/gui/kernel/qcocoapanel_mac.mm
index e535aac..5e24c84 100644
--- a/src/gui/kernel/qcocoapanel_mac.mm
+++ b/src/gui/kernel/qcocoapanel_mac.mm
@@ -46,6 +46,9 @@
#import <private/qcocoawindowdelegate_mac_p.h>
#import <private/qcocoaview_mac_p.h>
#import <private/qcocoawindowcustomthemeframe_mac_p.h>
+#include <private/qapplication_p.h>
+#include <private/qbackingstore_p.h>
+
#include <QtGui/QWidget>
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index 1a265d0..d2b74d7 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -51,6 +51,9 @@
NSPanel, while QCocoaWindow needs to inherit NSWindow rather than NSPanel).
****************************************************************************/
+// WARNING: Don't include any header files from within this file. Put them
+// directly into qcocoawindow_mac_p.h and qcocoapanel_mac_p.h
+
QT_BEGIN_NAMESPACE
extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
@@ -185,3 +188,20 @@ QT_END_NAMESPACE
return [super frameViewClassForStyleMask:styleMask];
}
+- (void)displayIfNeeded
+{
+
+ QWidget *qwidget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
+ if (qwidget == 0) {
+ [super displayIfNeeded];
+ return;
+ }
+
+ if (QApplicationPrivate::graphicsSystem() != 0) {
+ if (QWidgetBackingStore *bs = qt_widget_private(qwidget)->maybeBackingStore())
+ bs->sync(qwidget, qwidget->rect());
+ }
+ [super displayIfNeeded];
+}
+
+
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index d255604..2c35be2 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -520,10 +520,11 @@ extern "C" {
- (void)drawRect:(NSRect)aRect
{
if (QApplicationPrivate::graphicsSystem() != 0) {
- if (QWidgetBackingStore *bs = qwidgetprivate->maybeBackingStore())
- bs->markDirty(qwidget->rect(), qwidget);
- qwidgetprivate->syncBackingStore(qwidget->rect());
- return;
+ if (QWidgetBackingStore *bs = qwidgetprivate->maybeBackingStore()) {
+ // Drawing is handled on the window level
+ // See qcocoasharedwindowmethods_mac_p.
+ return;
+ }
}
CGContextRef cg = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
qwidgetprivate->hd = cg;
diff --git a/src/gui/kernel/qcocoawindow_mac_p.h b/src/gui/kernel/qcocoawindow_mac_p.h
index c0d8252..0474882 100644
--- a/src/gui/kernel/qcocoawindow_mac_p.h
+++ b/src/gui/kernel/qcocoawindow_mac_p.h
@@ -53,6 +53,9 @@
#ifdef QT_MAC_USE_COCOA
#include "qmacdefines_mac.h"
#import <Cocoa/Cocoa.h>
+#include <private/qapplication_p.h>
+#include <private/qbackingstore_p.h>
+
enum { QtMacCustomizeWindow = 1 << 21 }; // This will one day be run over by
diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp
index 77745ea..84e3c5d 100644
--- a/src/gui/kernel/qdesktopwidget_s60.cpp
+++ b/src/gui/kernel/qdesktopwidget_s60.cpp
@@ -88,24 +88,20 @@ QDesktopWidgetPrivate::~QDesktopWidgetPrivate()
void QDesktopWidgetPrivate::init(QDesktopWidget *that)
{
- int screenCount=0;
+// int screenCount=0;
- if (HAL::Get(0, HALData::EDisplayNumberOfScreens, screenCount) == KErrNone)
- QDesktopWidgetPrivate::screenCount = screenCount;
- else
- QDesktopWidgetPrivate::screenCount = 0;
+ // ### TODO: Implement proper multi-display support
+ QDesktopWidgetPrivate::screenCount = 1;
+// if (HAL::Get(0, HALData::EDisplayNumberOfScreens, screenCount) == KErrNone)
+// QDesktopWidgetPrivate::screenCount = screenCount;
+// else
+// QDesktopWidgetPrivate::screenCount = 0;
rects = new QVector<QRect>();
workrects = new QVector<QRect>();
rects->resize(QDesktopWidgetPrivate::screenCount);
workrects->resize(QDesktopWidgetPrivate::screenCount);
-
- // ### TODO: Implement proper multi-display support
- rects->resize(1);
- rects->replace(0, that->rect());
- workrects->resize(1);
- workrects->replace(0, that->rect());
}
void QDesktopWidgetPrivate::cleanup()
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp
index 67ed8b0..a72d16c 100644
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp
@@ -49,7 +49,7 @@
#include "private/qsoftkeymanager_p.h"
#include "private/qsoftkeymanager_s60_p.h"
#include "private/qobject_p.h"
-//#include <eiksoftkeyimage.h>
+#include <eiksoftkeyimage.h>
#include <eikcmbut.h>
#ifndef QT_NO_SOFTKEYMANAGER
@@ -64,6 +64,8 @@ QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60()
{
cachedCbaIconSize[0] = QSize(0,0);
cachedCbaIconSize[1] = QSize(0,0);
+ cachedCbaIconSize[2] = QSize(0,0);
+ cachedCbaIconSize[3] = QSize(0,0);
skipNextUpdate = false;
}
@@ -149,6 +151,39 @@ void QSoftKeyManagerPrivateS60::setNativeSoftkey(CEikButtonGroupContainer &cba,
QT_TRAP_THROWING(cba.SetCommandL(position, command, text));
}
+QPoint QSoftKeyManagerPrivateS60::softkeyIconPosition(int position, QSize sourceSize, QSize targetSize)
+{
+ QPoint iconPosition(0,0);
+ switch( AknLayoutUtils::CbaLocation() )
+ {
+ case AknLayoutUtils::EAknCbaLocationBottom:
+ // RSK must be moved to right, LSK in on correct position by default
+ if (position == RSK_POSITION)
+ iconPosition.setX(targetSize.width() - sourceSize.width());
+ break;
+ case AknLayoutUtils::EAknCbaLocationRight:
+ case AknLayoutUtils::EAknCbaLocationLeft:
+ // Already in correct position
+ default:
+ break;
+ }
+
+ // Align horizontally to center
+ iconPosition.setY((targetSize.height() - sourceSize.height()) >> 1);
+ return iconPosition;
+}
+
+QPixmap QSoftKeyManagerPrivateS60::prepareSoftkeyPixmap(QPixmap src, int position, QSize targetSize)
+{
+ QPixmap target(targetSize);
+ target.fill(Qt::transparent);
+ QPainter p;
+ p.begin(&target);
+ p.drawPixmap(softkeyIconPosition(position, src.size(), targetSize), src);
+ p.end();
+ return target;
+}
+
bool QSoftKeyManagerPrivateS60::isOrientationLandscape()
{
// Hard to believe that there is no public API in S60 to
@@ -158,15 +193,11 @@ bool QSoftKeyManagerPrivateS60::isOrientationLandscape()
QSize QSoftKeyManagerPrivateS60::cbaIconSize(CEikButtonGroupContainer *cba, int position)
{
- Q_UNUSED(cba);
- Q_UNUSED(position);
- // Will be implemented when EikSoftkeyImage usage license wise is OK
-/*
- const int index = isOrientationLandscape() ? 0 : 1;
+ int index = position;
+ index += isOrientationLandscape() ? 0 : 1;
if(cachedCbaIconSize[index].isNull()) {
// Only way I figured out to get CBA icon size without RnD SDK, was
- // Only way I figured out to get CBA icon size without RnD SDK, was
// to set some dummy icon to CBA first and then ask CBA button CCoeControl::Size()
// The returned value is cached to avoid unnecessary icon setting every time.
const bool left = (position == LSK_POSITION);
@@ -178,38 +209,49 @@ QSize QSoftKeyManagerPrivateS60::cbaIconSize(CEikButtonGroupContainer *cba, int
setNativeSoftkey(*cba, position, command, KNullDesC());
cachedCbaIconSize[index] = qt_TSize2QSize(cba->ControlOrNull(command)->Size());
EikSoftkeyImage::SetLabel(cba, left);
+
+ if(cachedCbaIconSize[index] == QSize(138,72)) {
+ // Hack for S60 5.0 (5800) landscape orientation, which return wrong icon size
+ cachedCbaIconSize[index] = QSize(60,60);
+ }
}
}
return cachedCbaIconSize[index];
-*/
- return QSize();
}
bool QSoftKeyManagerPrivateS60::setSoftkeyImage(CEikButtonGroupContainer *cba,
QAction &action, int position)
{
bool ret = false;
- Q_UNUSED(cba);
- Q_UNUSED(action);
- Q_UNUSED(position);
- // Will be implemented when EikSoftkeyImage usage license wise is OK
- /*
const bool left = (position == LSK_POSITION);
if(position == LSK_POSITION || position == RSK_POSITION) {
QIcon icon = action.icon();
if (!icon.isNull()) {
- QPixmap pm = icon.pixmap(cbaIconSize(cba, position));
- pm = pm.scaled(cbaIconSize(cba, position));
- QBitmap mask = pm.mask();
- if (mask.isNull()) {
- mask = QBitmap(pm.size());
- mask.fill(Qt::color1);
+ // Get size of CBA icon area based on button position and orientation
+ QSize requiredIconSize = cbaIconSize(cba, position);
+ // Get pixmap out of icon based on preferred size, the aspect ratio is kept
+ QPixmap pmWihtAspectRatio = icon.pixmap(requiredIconSize);
+ // Native softkeys require that pixmap size is exactly the same as requiredIconSize
+ // prepareSoftkeyPixmap creates a new pixmap with requiredIconSize and blits the 'pmWihtAspectRatio'
+ // to correct location of it
+ QPixmap softkeyPixmap = prepareSoftkeyPixmap(pmWihtAspectRatio, position, requiredIconSize);
+ QBitmap softkeyMask = softkeyPixmap.mask();
+ if (softkeyMask.isNull()) {
+ softkeyMask = QBitmap(softkeyPixmap.size());
+ softkeyMask.fill(Qt::color1);
+ }
+
+ // Softkey mask in > SV_S60_5_1 has to be inverted
+ if(QSysInfo::s60Version() > QSysInfo::SV_S60_5_1) {
+ QImage maskImage = softkeyMask.toImage();
+ maskImage.invertPixels();
+ softkeyMask = QPixmap::fromImage(maskImage);
}
- CFbsBitmap* nBitmap = pm.toSymbianCFbsBitmap();
- CFbsBitmap* nMask = mask.toSymbianCFbsBitmap();
+ CFbsBitmap* nBitmap = softkeyPixmap.toSymbianCFbsBitmap();
+ CFbsBitmap* nMask = softkeyMask.toSymbianCFbsBitmap();
CEikImage* myimage = new (ELeave) CEikImage;
myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transfered
@@ -221,7 +263,6 @@ bool QSoftKeyManagerPrivateS60::setSoftkeyImage(CEikButtonGroupContainer *cba,
EikSoftkeyImage::SetLabel(cba, left);
}
}
- */
return ret;
}
@@ -272,6 +313,7 @@ bool QSoftKeyManagerPrivateS60::setRightSoftkey(CEikButtonGroupContainer &cba)
if (windowType != Qt::Dialog && windowType != Qt::Popup) {
QString text(QSoftKeyManager::tr("Exit"));
TPtrC nativeText = qt_QString2TPtrC(text);
+ EikSoftkeyImage::SetLabel(&cba, false);
setNativeSoftkey(cba, RSK_POSITION, EAknSoftkeyExit, nativeText);
return true;
}
@@ -303,7 +345,6 @@ void QSoftKeyManagerPrivateS60::setSoftkeys(CEikButtonGroupContainer &cba)
void QSoftKeyManagerPrivateS60::updateSoftKeys_sys()
{
- //bool status = CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog();
if (skipCbaUpdate())
return;
diff --git a/src/gui/kernel/qsoftkeymanager_s60_p.h b/src/gui/kernel/qsoftkeymanager_s60_p.h
index 46e3596..f8bd6d9 100644
--- a/src/gui/kernel/qsoftkeymanager_s60_p.h
+++ b/src/gui/kernel/qsoftkeymanager_s60_p.h
@@ -84,6 +84,8 @@ private:
QAction *highestPrioritySoftkey(QAction::SoftKeyRole role);
static bool actionPriorityMoreThan(const QAction* item1, const QAction* item2);
void setNativeSoftkey(CEikButtonGroupContainer &cba, TInt position, TInt command, const TDesC& text);
+ QPoint softkeyIconPosition(int position, QSize sourceSize, QSize targetSize);
+ QPixmap prepareSoftkeyPixmap(QPixmap src, int position, QSize targetSize);
bool isOrientationLandscape();
QSize cbaIconSize(CEikButtonGroupContainer *cba, int position);
bool setSoftkeyImage(CEikButtonGroupContainer *cba, QAction &action, int position);
@@ -95,7 +97,7 @@ private:
private:
QHash<int, QAction*> realSoftKeyActions;
- QSize cachedCbaIconSize[2];
+ QSize cachedCbaIconSize[4];
bool skipNextUpdate;
};
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index e06a810..65c04e5 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -1162,7 +1162,7 @@ CGContextRef qt_mac_graphicsContextFor(QWidget *widget)
CGrafPtr port = GetWindowPort(qt_mac_window_for(widget));
QDBeginCGContext(port, &context);
#else
- CGContextRef context = (CGContextRef)[[NSGraphicsContext graphicsContextWithWindow:qt_mac_window_for(widget)] graphicsPort];
+ CGContextRef context = reinterpret_cast<CGContextRef>([[qt_mac_window_for(widget) graphicsContext] graphicsPort]);
#endif
return context;
}
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 4054d2a..c072d9d 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -1439,6 +1439,18 @@ QWidget::~QWidget()
}
#endif
+#ifdef Q_OS_SYMBIAN
+ if (d->extra && d->extra->topextra && d->extra->topextra->backingStore) {
+ // Okay, we are about to destroy the top-level window that owns
+ // the backing store. Make sure we delete the backing store right away
+ // before the window handle is invalid. This is important because
+ // the backing store will delete its window surface, which may or may
+ // not have a reference to this widget that will be used later to
+ // notify the window it no longer has a surface.
+ delete d->extra->topextra->backingStore;
+ d->extra->topextra->backingStore = 0;
+ }
+#endif
if (QWidgetBackingStore *bs = d->maybeBackingStore()) {
bs->removeDirtyWidget(this);
if (testAttribute(Qt::WA_StaticContents))
@@ -1660,7 +1672,13 @@ void QWidgetPrivate::syncBackingStore()
repaint_sys(dirty);
dirty = QRegion();
} else if (QWidgetBackingStore *bs = maybeBackingStore()) {
+#ifdef QT_MAC_USE_COCOA
+ Q_UNUSED(bs);
+ void qt_mac_set_needs_display(QWidget *, QRegion);
+ qt_mac_set_needs_display(q_func(), QRegion());
+#else
bs->sync();
+#endif
}
}
@@ -1668,8 +1686,15 @@ void QWidgetPrivate::syncBackingStore(const QRegion &region)
{
if (paintOnScreen())
repaint_sys(region);
- else if (QWidgetBackingStore *bs = maybeBackingStore())
+ else if (QWidgetBackingStore *bs = maybeBackingStore()) {
+#ifdef QT_MAC_USE_COCOA
+ Q_UNUSED(bs);
+ void qt_mac_set_needs_display(QWidget *, QRegion);
+ qt_mac_set_needs_display(q_func(), region);
+#else
bs->sync(q_func(), region);
+#endif
+ }
}
void QWidgetPrivate::setUpdatesEnabled_helper(bool enable)
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 78c1562..9e7517f 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -565,6 +565,25 @@ inline static void qt_mac_set_window_group_to_popup(OSWindowRef window)
}
#endif
+#ifdef QT_MAC_USE_COCOA
+void qt_mac_set_needs_display(QWidget *widget, QRegion region)
+{
+ NSView *theNSView = qt_mac_nativeview_for(widget);
+ if (region.isEmpty()) {
+ [theNSView setNeedsDisplay:YES];
+ return;
+ }
+
+ QVector<QRect> rects = region.rects();
+ for (int i = 0; i<rects.count(); ++i) {
+ const QRect &rect = rects.at(i);
+ NSRect nsrect = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height());
+ [theNSView setNeedsDisplayInRect:nsrect];
+ }
+
+}
+#endif
+
inline static bool updateRedirectedToGraphicsProxyWidget(QWidget *widget, const QRect &rect)
{
if (!widget)
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 00f2213..0ce7534 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -1195,6 +1195,10 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
if (destroyWindow) {
delete id;
+ // At this point the backing store should already be destroyed
+ // so we flush the command buffer to ensure that the freeing of
+ // those resources and deleting the window can happen "atomically"
+ S60->wsSession().Flush();
}
}
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
index 4684bc1..10fb009 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -346,11 +346,6 @@ Q_GUI_EXPORT void qt_x11_enforce_cursor(QWidget * w)
qt_x11_enforce_cursor(w, false);
}
-static Bool checkForConfigureAndExpose(Display *, XEvent *e, XPointer)
-{
- return e->type == ConfigureNotify || e->type == Expose;
-}
-
Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w)
{
if (!w || (!w->isWindow() && !w->internalWinId()))
@@ -363,38 +358,60 @@ Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w)
if (!w->testAttribute(Qt::WA_WState_Created))
return;
- if (!(w->windowFlags() & Qt::X11BypassWindowManagerHint)) {
- // if the window is not override-redirect, then the window manager
- // will reparent us to the frame decoration window.
- while (!XCheckTypedWindowEvent(X11->display, w->effectiveWinId(), ReparentNotify, &ev)) {
- if (t.elapsed() > maximumWaitTime)
- return;
- qApp->syncX(); // non-busy wait
- }
- }
+ WId winid = w->internalWinId();
- while (!XCheckTypedWindowEvent(X11->display, w->effectiveWinId(), MapNotify, &ev)) {
- if (t.elapsed() > maximumWaitTime)
- return;
- qApp->syncX(); // non-busy wait
- }
+ // first deliver events that are already in the local queue
+ QApplication::sendPostedEvents();
- qApp->x11ProcessEvent(&ev);
+ // the normal sequence is:
+ // ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose
+ // with X11BypassWindowManagerHint:
+ // ConfigureNotify ... MapNotify ... Expose
- // ok, seems like the window manager successfully reparented us, we'll wait
- // for the first paint event to arrive, while handling ConfigureNotify in
- // the arrival order
- while(1)
- {
- if (XCheckIfEvent(X11->display, &ev, checkForConfigureAndExpose, 0)) {
+ enum State {
+ Initial, Reparented, Mapped
+ } state = Initial;
+
+ do {
+ if (XEventsQueued(X11->display, QueuedAlready)) {
+ XNextEvent(X11->display, &ev);
qApp->x11ProcessEvent(&ev);
- if (ev.type == Expose)
- return;
+
+ if (w->windowFlags() & Qt::X11BypassWindowManagerHint) {
+ switch (state) {
+ case Initial:
+ case Reparented:
+ if (ev.type == MapNotify && ev.xany.window == winid)
+ state = Mapped;
+ break;
+ case Mapped:
+ if (ev.type == Expose && ev.xany.window == winid)
+ return;
+ break;
+ }
+ } else {
+ switch (state) {
+ case Initial:
+ if (ev.type == ReparentNotify && ev.xany.window == winid)
+ state = Reparented;
+ break;
+ case Reparented:
+ if (ev.type == MapNotify && ev.xany.window == winid)
+ state = Mapped;
+ break;
+ case Mapped:
+ if (ev.type == Expose && ev.xany.window == winid)
+ return;
+ break;
+ }
+ }
+ } else {
+ if (!XEventsQueued(X11->display, QueuedAfterFlush))
+ qApp->syncX(); // non-busy wait
}
if (t.elapsed() > maximumWaitTime)
return;
- qApp->syncX(); // non-busy wait
- }
+ } while(1);
}
void qt_change_net_wm_state(const QWidget* w, bool set, Atom one, Atom two = 0)
diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp
index a0d2b9b..eee6bef 100644
--- a/src/gui/painting/qwindowsurface_raster.cpp
+++ b/src/gui/painting/qwindowsurface_raster.cpp
@@ -295,10 +295,8 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi
CGContextRestoreGState(context);
#ifndef QT_MAC_USE_COCOA
QDEndCGContext(port, &context);
-#else
- CGContextFlush(context);
-#endif
#endif
+#endif // Q_WS_MAC
#ifdef Q_OS_SYMBIAN
Q_UNUSED(widget);
diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index 74d3ec3..b1924e7 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -1149,10 +1149,10 @@ void QCommonStylePrivate::tabLayout(const QStyleOptionTabV3 *opt, const QWidget
int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2;
if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth)
verticalShift = -verticalShift;
- tr.adjust(hpadding, vpadding, horizontalShift - hpadding, verticalShift - vpadding);
+ tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding);
bool selected = opt->state & QStyle::State_Selected;
if (selected) {
- tr.setBottom(tr.bottom() - verticalShift);
+ tr.setTop(tr.top() - verticalShift);
tr.setRight(tr.right() - horizontalShift);
}
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index aab16cb..78074c7 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -3380,8 +3380,14 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (tb->toolButtonStyle != Qt::ToolButtonIconOnly) {
needText = true;
if (tb->toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
- pr.setHeight(pixmap.size().height());
- cr.adjust(0, pr.bottom() + 1, 0, 1);
+ QMainWindow *mw = qobject_cast<QMainWindow *>(w->window());
+ if (mw && mw->unifiedTitleAndToolBarOnMac()) {
+ pr.setHeight(pixmap.size().height());
+ cr.adjust(0, pr.bottom() + 1, 0, 1);
+ } else {
+ pr.setHeight(pixmap.size().height() + 6);
+ cr.adjust(0, pr.bottom(), 0, -3);
+ }
alignment |= Qt::AlignCenter;
} else {
pr.setWidth(pixmap.width() + 8);
diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp
index 2fc1940..d30c996 100644
--- a/src/gui/text/qzip.cpp
+++ b/src/gui/text/qzip.cpp
@@ -54,10 +54,13 @@
#include <zlib.h>
#if defined(Q_OS_WIN)
-#undef S_IFREG
-#define S_IFREG 0100000
+# undef S_IFREG
+# define S_IFREG 0100000
+# ifndef S_IFDIR
+# define S_IFDIR 0040000
+# endif
# ifndef S_ISDIR
-# define S_ISDIR(x) ((x) & 0040000) > 0
+# define S_ISDIR(x) ((x) & S_IFDIR) > 0
# endif
# ifndef S_ISREG
# define S_ISREG(x) ((x) & 0170000) == S_IFREG
diff --git a/src/gui/text/qzipreader_p.h b/src/gui/text/qzipreader_p.h
index 1086464..67a2ace 100644
--- a/src/gui/text/qzipreader_p.h
+++ b/src/gui/text/qzipreader_p.h
@@ -49,7 +49,7 @@
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
-// of the QLibrary class. This header file may change from
+// of the QZipReader class. This header file may change from
// version to version without notice, or even be removed.
//
// We mean it.
diff --git a/src/gui/text/qzipwriter_p.h b/src/gui/text/qzipwriter_p.h
index 7b97937..9322f4a 100644
--- a/src/gui/text/qzipwriter_p.h
+++ b/src/gui/text/qzipwriter_p.h
@@ -47,7 +47,7 @@
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
-// of the QLibrary class. This header file may change from
+// of the QZipWriter class. This header file may change from
// version to version without notice, or even be removed.
//
// We mean it.
diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp
index 53050ac..8beda55 100644
--- a/src/gui/widgets/qtoolbar.cpp
+++ b/src/gui/widgets/qtoolbar.cpp
@@ -441,8 +441,7 @@ void QToolBarPrivate::plug(const QRect &r)
When a QToolBar is not a child of a QMainWindow, it looses 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. This is a known
- issue which will be fixed in a future release.
+ and implementing QWidgetAction::createWidget() instead.
\sa QToolButton, QMenu, QAction, {Application Example}
*/
diff --git a/src/plugins/imageformats/gif/qgifhandler.cpp b/src/plugins/imageformats/gif/qgifhandler.cpp
index 6cd7841..25d3dfa 100644
--- a/src/plugins/imageformats/gif/qgifhandler.cpp
+++ b/src/plugins/imageformats/gif/qgifhandler.cpp
@@ -71,8 +71,8 @@ public:
~QGIFFormat();
int decode(QImage *image, const uchar* buffer, int length,
- int *nextFrameDelay, int *loopCount, QSize *nextSize);
- static int imageCount(QIODevice *device);
+ int *nextFrameDelay, int *loopCount);
+ static void scan(QIODevice *device, QVector<QSize> *imageSizes, int *loopCount);
bool newFrame;
bool partialNewFrame;
@@ -230,7 +230,7 @@ void QGIFFormat::disposePrevious(QImage *image)
Returns the number of bytes consumed.
*/
int QGIFFormat::decode(QImage *image, const uchar *buffer, int length,
- int *nextFrameDelay, int *loopCount, QSize *nextSize)
+ int *nextFrameDelay, int *loopCount)
{
// We are required to state that
// "The Graphics Interchange Format(c) is the Copyright property of
@@ -347,10 +347,6 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length,
bpl = image->bytesPerLine();
bits = image->bits();
memset(bits, 0, image->byteCount());
-
- // ### size of the upcoming frame, should rather
- // be known before decoding it.
- *nextSize = QSize(swidth, sheight);
}
disposePrevious(image);
@@ -647,17 +643,17 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length,
}
/*!
- Returns the number of images that can be read from \a device.
+ Scans through the data stream defined by \a device and returns the image
+ sizes found in the stream in the \a imageSizes vector.
*/
-
-int QGIFFormat::imageCount(QIODevice *device)
+void QGIFFormat::scan(QIODevice *device, QVector<QSize> *imageSizes, int *loopCount)
{
if (!device)
- return 0;
+ return;
qint64 oldPos = device->pos();
if (!device->seek(0))
- return 0;
+ return;
int colorCount = 0;
int localColorCount = 0;
@@ -667,18 +663,21 @@ int QGIFFormat::imageCount(QIODevice *device)
bool globalColormap = false;
int count = 0;
int blockSize = 0;
+ int imageWidth = 0;
+ int imageHeight = 0;
bool done = false;
uchar hold[16];
- int imageCount = 0;
State state = Header;
const int readBufferSize = 40960; // 40k read buffer
QByteArray readBuffer(device->read(readBufferSize));
- if (readBuffer.isEmpty())
- return 0;
+ if (readBuffer.isEmpty()) {
+ device->seek(oldPos);
+ return;
+ }
- // this is a specialized version of the state machine from decode(),
+ // This is a specialized version of the state machine from decode(),
// which doesn't do any image decoding or mallocing, and has an
// optimized way of skipping SkipBlocks, ImageDataBlocks and
// Global/LocalColorMaps.
@@ -700,6 +699,8 @@ int QGIFFormat::imageCount(QIODevice *device)
case LogicalScreenDescriptor:
hold[count++] = ch;
if (count == 7) {
+ imageWidth = LM(hold[0], hold[1]);
+ imageHeight = LM(hold[2], hold[3]);
globalColormap = !!(hold[4] & 0x80);
globalColorCount = 2 << (hold[4] & 0x7);
count = 0;
@@ -753,13 +754,29 @@ int QGIFFormat::imageCount(QIODevice *device)
case ImageDescriptor:
hold[count++] = ch;
if (count == 10) {
+ int newLeft = LM(hold[1], hold[2]);
+ int newTop = LM(hold[3], hold[4]);
+ int newWidth = LM(hold[5], hold[6]);
+ int newHeight = LM(hold[7], hold[8]);
+
+ if (imageWidth/10 > qMax(newWidth,200))
+ imageWidth = -1;
+ if (imageHeight/10 > qMax(newHeight,200))
+ imageHeight = -1;
+
+ if (imageWidth <= 0)
+ imageWidth = newLeft + newWidth;
+ if (imageHeight <= 0)
+ imageHeight = newTop + newHeight;
+
+ *imageSizes << QSize(imageWidth, imageHeight);
+
localColormap = !!(hold[9] & 0x80);
localColorCount = localColormap ? (2 << (hold[9] & 0x7)) : 0;
if (localColorCount)
colorCount = localColorCount;
else
colorCount = globalColorCount;
- imageCount++;
count = 0;
if (localColormap) {
@@ -825,7 +842,10 @@ int QGIFFormat::imageCount(QIODevice *device)
hold[count] = ch;
++count;
if (count == hold[0] + 1) {
- state = SkipBlockSize;
+ if (qstrncmp((char*)(hold+1), "NETSCAPE", 8) == 0)
+ state=NetscapeExtensionBlockSize;
+ else
+ state=SkipBlockSize;
count = 0;
}
break;
@@ -838,7 +858,23 @@ int QGIFFormat::imageCount(QIODevice *device)
state = SkipBlockSize;
}
break;
- case NetscapeExtensionBlockSize: // fallthrough
+ case NetscapeExtensionBlockSize:
+ blockSize = ch;
+ count = 0;
+ if (blockSize)
+ state = NetscapeExtensionBlock;
+ else
+ state = Introducer;
+ break;
+ case NetscapeExtensionBlock:
+ if (count < 3)
+ hold[count] = ch;
+ count++;
+ if (count == blockSize) {
+ *loopCount = LM(hold[1], hold[2]);
+ state = SkipBlockSize;
+ }
+ break;
case SkipBlockSize:
blockSize = ch;
count = 0;
@@ -854,7 +890,6 @@ int QGIFFormat::imageCount(QIODevice *device)
state = Introducer;
}
break;
- case NetscapeExtensionBlock: // fallthrough
case SkipBlock:
++count;
if (count == blockSize)
@@ -865,13 +900,13 @@ int QGIFFormat::imageCount(QIODevice *device)
break;
case Error:
device->seek(oldPos);
- return 0;
+ return;
}
}
readBuffer = device->read(readBufferSize);
}
device->seek(oldPos);
- return imageCount;
+ return;
}
void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, QRgb color)
@@ -992,10 +1027,9 @@ QGifHandler::QGifHandler()
{
gifFormat = new QGIFFormat;
nextDelay = 0;
- loopCnt = 0;
+ loopCnt = 1;
frameNumber = -1;
- nextSize = QSize();
- imageCnt = -1;
+ scanIsCached = false;
}
QGifHandler::~QGifHandler()
@@ -1017,7 +1051,7 @@ bool QGifHandler::imageIsComing() const
}
int decoded = gifFormat->decode(&lastImage, (const uchar *)buffer.constData(), buffer.size(),
- &nextDelay, &loopCnt, &nextSize);
+ &nextDelay, &loopCnt);
if (decoded == -1)
break;
buffer.remove(0, decoded);
@@ -1061,7 +1095,7 @@ bool QGifHandler::read(QImage *image)
}
int decoded = gifFormat->decode(&lastImage, (const uchar *)buffer.constData(), buffer.size(),
- &nextDelay, &loopCnt, &nextSize);
+ &nextDelay, &loopCnt);
if (decoded == -1)
break;
buffer.remove(0, decoded);
@@ -1092,8 +1126,18 @@ bool QGifHandler::supportsOption(ImageOption option) const
QVariant QGifHandler::option(ImageOption option) const
{
if (option == Size) {
- if (imageIsComing())
- return nextSize;
+ if (!scanIsCached) {
+ QGIFFormat::scan(device(), &imageSizes, &loopCnt);
+ scanIsCached = true;
+ }
+ // before the first frame is read, or we have an empty data stream
+ if (frameNumber == -1)
+ return (imageSizes.count() > 0) ? QVariant(imageSizes.at(0)) : QVariant();
+ // after the last frame has been read, the next size is undefined
+ if (frameNumber >= imageSizes.count() - 1)
+ return QVariant();
+ // and the last case: the size of the next frame
+ return imageSizes.at(frameNumber + 1);
} else if (option == Animation) {
return true;
}
@@ -1113,14 +1157,19 @@ int QGifHandler::nextImageDelay() const
int QGifHandler::imageCount() const
{
- if (imageCnt != -1)
- return imageCnt;
- imageCnt = QGIFFormat::imageCount(device());
- return imageCnt;
+ if (!scanIsCached) {
+ QGIFFormat::scan(device(), &imageSizes, &loopCnt);
+ scanIsCached = true;
+ }
+ return imageSizes.count();
}
int QGifHandler::loopCount() const
{
+ if (!scanIsCached) {
+ QGIFFormat::scan(device(), &imageSizes, &loopCnt);
+ scanIsCached = true;
+ }
return loopCnt-1; // In GIF, loop count is iteration count, so subtract one
}
diff --git a/src/plugins/imageformats/gif/qgifhandler.h b/src/plugins/imageformats/gif/qgifhandler.h
index 830cd38..8e07aff 100644
--- a/src/plugins/imageformats/gif/qgifhandler.h
+++ b/src/plugins/imageformats/gif/qgifhandler.h
@@ -87,8 +87,8 @@ private:
mutable int nextDelay;
mutable int loopCnt;
int frameNumber;
- mutable QSize nextSize;
- mutable int imageCnt;
+ mutable QVector<QSize> imageSizes;
+ mutable bool scanIsCached;
};
QT_END_NAMESPACE
diff --git a/src/plugins/kbddrivers/linuxinput/main.cpp b/src/plugins/kbddrivers/linuxinput/main.cpp
index 19a3145..db5167e 100644
--- a/src/plugins/kbddrivers/linuxinput/main.cpp
+++ b/src/plugins/kbddrivers/linuxinput/main.cpp
@@ -69,7 +69,7 @@ QWSKeyboardHandler* QLinuxInputKbdDriver::create(const QString &driver,
Q_UNUSED(device);
if (driver.compare(QLatin1String("LinuxInput"), Qt::CaseInsensitive))
return 0;
- return new QWSLinuxInputKeyboardHandler(driver, device);
+ return new QWSLinuxInputKeyboardHandler(device);
}
Q_EXPORT_PLUGIN2(qwslinuxinputkbddriver, QLinuxInputKbdDriver)
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 8099ffa..dc1d181 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -721,8 +721,9 @@ void WriteInitialization::acceptWidget(DomWidget *node)
m_output << m_indent << parentWidget << "->addDockWidget(" << area << varName << ");\n";
} else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) {
m_output << m_indent << parentWidget << "->setStatusBar(" << varName << ");\n";
- } else {
- m_output << m_indent << parentWidget << "->setCentralWidget(" << varName << ");\n";
+ } else if (!m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DockWindow"))
+ && !m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ToolBar"))) {
+ m_output << m_indent << parentWidget << "->setCentralWidget(" << varName << ");\n";
}
}
diff --git a/tests/auto/qdatetime/tst_qdatetime.cpp b/tests/auto/qdatetime/tst_qdatetime.cpp
index b9d1d7c..86a4c80 100644
--- a/tests/auto/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/qdatetime/tst_qdatetime.cpp
@@ -147,16 +147,9 @@ Q_DECLARE_METATYPE(QTime)
tst_QDateTime::tst_QDateTime()
{
-#ifdef Q_OS_SYMBIAN
- // Symbian's timezone server cannot handle DST correctly for dates before year 1997
- uint x1 = QDateTime(QDate(2000, 1, 1), QTime()).toTime_t();
- uint x2 = QDateTime(QDate(2000, 6, 1), QTime()).toTime_t();
- europeanTimeZone = (x1 == 946681200 && x2 == 959810400);
-#else
uint x1 = QDateTime(QDate(1990, 1, 1), QTime()).toTime_t();
uint x2 = QDateTime(QDate(1990, 6, 1), QTime()).toTime_t();
europeanTimeZone = (x1 == 631148400 && x2 == 644191200);
-#endif
}
tst_QDateTime::~tst_QDateTime()
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index 6743fbe..469ded0 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -2806,14 +2806,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations()
{
QPoint pos(50, 50);
- QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos));
+ QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore();
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(event.isAccepted());
}
{
QPoint pos(150, 150);
- QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos));
+ QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore();
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(!event.isAccepted());
@@ -2821,14 +2821,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations()
view.scale(1.5, 1.5);
{
QPoint pos(25, 25);
- QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos));
+ QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore();
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(event.isAccepted());
}
{
QPoint pos(55, 55);
- QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos));
+ QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore();
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(!event.isAccepted());
diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
index 526486e..00bf144 100644
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -2892,6 +2892,24 @@ void tst_QGraphicsWidget::initialShow2()
void polishEvent() { update(); }
};
+ // Don't let paint events triggered by the windowing system
+ // influence our test case. We're only interested in knowing
+ // whether a QGraphicsWidget generates an additional repaint
+ // on the inital show. Hence create a dummy scenario to find out
+ // how many repaints we should expect.
+ QGraphicsScene dummyScene(0, 0, 200, 200);
+ dummyScene.addItem(new QGraphicsRectItem(0, 0, 100, 100));
+
+ QGraphicsView *dummyView = new QGraphicsView(&dummyScene);
+ dummyView->setWindowFlags(Qt::X11BypassWindowManagerHint);
+ EventSpy paintSpy(dummyView->viewport(), QEvent::Paint);
+ dummyView->show();
+ QTest::qWaitForWindowShown(dummyView);
+ const int expectedRepaintCount = paintSpy.count();
+ delete dummyView;
+ dummyView = 0;
+ QTest::qWait(200);
+
MyGraphicsWidget *widget = new MyGraphicsWidget;
widget->resize(100, 100);
@@ -2899,13 +2917,11 @@ void tst_QGraphicsWidget::initialShow2()
scene.addItem(widget);
QGraphicsView view(&scene);
+ view.setWindowFlags(Qt::X11BypassWindowManagerHint);
view.show();
- // Not using QTest::qWaitForWindowShown(&view); on purpose, because there's
- // a bug in qt_x11_wait_for_window_manager that prevents this test
- // to pass. Denis is looking into it.
- QTest::qWait(300);
+ QTest::qWaitForWindowShown(&view);
- QCOMPARE(widget->repaints, 1);
+ QCOMPARE(widget->repaints, expectedRepaintCount);
}
void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems()
diff --git a/tests/auto/qimagereader/images/qt-gif-anim.gif b/tests/auto/qimagereader/images/qt-gif-anim.gif
new file mode 100644
index 0000000..8bca4a8
--- /dev/null
+++ b/tests/auto/qimagereader/images/qt-gif-anim.gif
Binary files differ
diff --git a/tests/auto/qimagereader/images/qt-gif-noanim.gif b/tests/auto/qimagereader/images/qt-gif-noanim.gif
new file mode 100644
index 0000000..b6a8540
--- /dev/null
+++ b/tests/auto/qimagereader/images/qt-gif-noanim.gif
Binary files differ
diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc
index 58f2f74..bc48244 100644
--- a/tests/auto/qimagereader/qimagereader.qrc
+++ b/tests/auto/qimagereader/qimagereader.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/" >
+ <qresource prefix="/">
<file>images/16bpp.bmp</file>
<file>images/4bpp-rle.bmp</file>
<file>images/YCbCr_cmyk.jpg</file>
@@ -59,5 +59,7 @@
<file>images/qt8.gif</file>
<file>images/endless-anim.gif</file>
<file>images/four-frames.gif</file>
+ <file>images/qt-gif-anim.gif</file>
+ <file>images/qt-gif-noanim.gif</file>
</qresource>
</RCC>
diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp
index debc090..121a8fa 100644
--- a/tests/auto/qimagereader/tst_qimagereader.cpp
+++ b/tests/auto/qimagereader/tst_qimagereader.cpp
@@ -142,6 +142,7 @@ private slots:
void gifHandlerBugs();
void animatedGif();
void gifImageCount();
+ void gifLoopCount();
#endif
void readCorruptImage_data();
@@ -881,8 +882,22 @@ void tst_QImageReader::gifImageCount()
{
QImageReader io(":images/trolltech.gif");
QVERIFY(io.imageCount() == 34);
+ QVERIFY(io.size() == QSize(128,64));
}
}
+
+void tst_QImageReader::gifLoopCount()
+{
+ {
+ QImageReader io(":images/qt-gif-anim.gif");
+ QCOMPARE(io.loopCount(), -1); // infinite loop
+ }
+ {
+ QImageReader io(":images/qt-gif-noanim.gif");
+ QCOMPARE(io.loopCount(), 0); // no loop
+ }
+}
+
#endif
class Server : public QObject
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 8d1b640..83b4d9c 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -482,7 +482,9 @@ void Configure::parseCmdLine()
dictionary[ "BUILDNOKIA" ] = "yes";
dictionary[ "BUILDDEV" ] = "yes";
dictionary["LICENSE_CONFIRMED"] = "yes";
- dictionary[ "SYMBIAN_DEFFILES" ] = "no";
+ if (dictionary.contains("XQMAKESPEC") && dictionary["XQMAKESPEC"].startsWith("symbian")) {
+ dictionary[ "SYMBIAN_DEFFILES" ] = "no";
+ }
}
else if( configCmdLine.at(i) == "-opensource" ) {
dictionary[ "BUILDTYPE" ] = "opensource";
diff --git a/tools/linguist/linguist/mainwindow.cpp b/tools/linguist/linguist/mainwindow.cpp
index 008ebb1..6e5c656 100644
--- a/tools/linguist/linguist/mainwindow.cpp
+++ b/tools/linguist/linguist/mainwindow.cpp
@@ -94,6 +94,8 @@
#include <QUrl>
#include <QWhatsThis>
+#include <ctype.h>
+
QT_BEGIN_NAMESPACE
static const int MessageMS = 2500;
@@ -2356,13 +2358,28 @@ void MainWindow::updatePhraseDicts()
static bool haveMnemonic(const QString &str)
{
- QString mnemonic = QKeySequence::mnemonic(str);
- if (mnemonic == QLatin1String("Alt+Space")) {
- // "Nobody" ever really uses these, and they are highly annoying
- // because we get a lot of false positives.
- return false;
+ for (const ushort *p = (ushort *)str.constData();; ) { // Assume null-termination
+ ushort c = *p++;
+ if (!c)
+ break;
+ if (c == '&') {
+ c = *p++;
+ if (!c)
+ return false;
+ // "Nobody" ever really uses these alt-space, and they are highly annoying
+ // because we get a lot of false positives.
+ if (c != '&' && c != ' ' && QChar(c).isPrint()) {
+ const ushort *pp = p;
+ for (; ::isalpha(*p); p++) ;
+ if (pp == p || *p != ';')
+ return true;
+ // This looks like a HTML &entity;, so ignore it. As a HTML string
+ // won't contain accels anyway, we can stop scanning here.
+ break;
+ }
+ }
}
- return !mnemonic.isEmpty();
+ return false;
}
void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
diff --git a/tools/linguist/linguist/messageeditor.cpp b/tools/linguist/linguist/messageeditor.cpp
index 91c88da..b6c1688 100644
--- a/tools/linguist/linguist/messageeditor.cpp
+++ b/tools/linguist/linguist/messageeditor.cpp
@@ -135,14 +135,6 @@ MessageEditor::MessageEditor(MultiDataModel *dataModel, QMainWindow *parent)
void MessageEditor::setupEditorPage()
{
QFrame *editorPage = new QFrame;
- editorPage->setObjectName(QLatin1String("editorPage"));
-
- editorPage->setStyleSheet(QLatin1String(
- "QFrame#editorPage { border-image: url(:/images/transbox.png) 12 16 16 12 repeat;"
- " border-width: 12px 16px 16px 12px; }"
- "QFrame#editorPage { background-color: white; }"
- "QLabel { font-weight: bold; }"
- ));
editorPage->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
m_source = new FormWidget(tr("Source text"), false);
diff --git a/tools/linguist/linguist/messageeditorwidgets.cpp b/tools/linguist/linguist/messageeditorwidgets.cpp
index 8b4fa62..4d31db2 100644
--- a/tools/linguist/linguist/messageeditorwidgets.cpp
+++ b/tools/linguist/linguist/messageeditorwidgets.cpp
@@ -171,6 +171,9 @@ FormWidget::FormWidget(const QString &label, bool isEditable, QWidget *parent)
layout->setMargin(0);
m_label = new QLabel(this);
+ QFont fnt;
+ fnt.setBold(true);
+ m_label->setFont(fnt);
m_label->setText(label);
layout->addWidget(m_label);
@@ -249,6 +252,9 @@ FormMultiWidget::FormMultiWidget(const QString &label, QWidget *parent)
m_minusIcon(QIcon(QLatin1String(":/images/minus.png")))
{
m_label = new QLabel(this);
+ QFont fnt;
+ fnt.setBold(true);
+ m_label->setFont(fnt);
m_label->setText(label);
m_plusButtons.append(
diff --git a/translations/designer_de.ts b/translations/designer_de.ts
index b731595..8c1ba68 100644
--- a/translations/designer_de.ts
+++ b/translations/designer_de.ts
@@ -517,12 +517,12 @@
</message>
<message>
<location line="+89"/>
- <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+907"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+915"/>
<source>Move action</source>
<translation>Aktion verschieben</translation>
</message>
<message>
- <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-424"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-432"/>
<source>Change Title</source>
<translation>Titel ändern</translation>
</message>
@@ -1027,7 +1027,7 @@
<context>
<name>FormBuilder</name>
<message>
- <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+359"/>
+ <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+375"/>
<source>Invalid stretch value for &apos;%1&apos;: &apos;%2&apos;</source>
<extracomment>Parsing layout stretch values</extracomment>
<translation>Ungültiger Stretch-Wert für &apos;%1&apos;: &apos;%2&apos;</translation>
@@ -1412,7 +1412,7 @@
<translation>Fehler beim Lesen der ui-Datei: Das Wurzelelement &lt;ui&gt; fehlt.</translation>
</message>
<message>
- <location line="+119"/>
+ <location line="+104"/>
<source>The creation of a widget of the class &apos;%1&apos; failed.</source>
<translation>Es konnte kein Widget der Klasse &apos;%1&apos; erzeugt werden.</translation>
</message>
@@ -2273,7 +2273,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QFormBuilder</name>
<message>
- <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+163"/>
+ <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+168"/>
<source>An empty class name was passed on to %1 (object name: &apos;%2&apos;).</source>
<extracomment>Empty class name passed to widget factory method</extracomment>
<translation>Der Methode %1 wurde ein leerer Klassennamen übergeben (Name &apos;%2&apos;).</translation>
@@ -2313,6 +2313,16 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<source>The property %1 could not be written. The type %2 is not supported yet.</source>
<translation>Die Eigenschaft %1 konnte nicht geschrieben werden, da der Typ %2 nicht unterstützt wird.</translation>
</message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/properties_p.h" line="+132"/>
+ <source>The enumeration-value &apos;%1&apos; is invalid. The default value &apos;%2&apos; will be used instead.</source>
+ <translation>Der Aufzählungswert &apos;%1&apos; ist ungültig. Es wird der Vorgabewert &apos;%2&apos; verwendet.</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>The flag-value &apos;%1&apos; is invalid. Zero will be used instead.</source>
+ <translation>Der Flag-Wert &apos;%1&apos; ist ungültig. Es wird der Wert 0 verwendet.</translation>
+ </message>
</context>
<context>
<name>QStackedWidgetEventFilter</name>
@@ -2446,7 +2456,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtBoolEdit</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+226"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+247"/>
<location line="+10"/>
<location line="+25"/>
<source>True</source>
@@ -2475,7 +2485,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtCharEdit</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1581"/>
+ <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1584"/>
<source>Clear Char</source>
<translation>Zeichen löschen</translation>
</message>
@@ -2491,7 +2501,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtColorPropertyManager</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4743"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4750"/>
<source>Red</source>
<translation>Rot</translation>
</message>
@@ -2514,7 +2524,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtCursorDatabase</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-206"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-226"/>
<source>Arrow</source>
<translation>Pfeil</translation>
</message>
@@ -3062,6 +3072,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<name>QtGradientViewDialog</name>
<message>
<location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.h" line="+62"/>
<source>Select Gradient</source>
<translation>Gradienten auswählen</translation>
</message>
@@ -3069,7 +3080,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtKeySequenceEdit</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+221"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+241"/>
<source>Clear Shortcut</source>
<translation>Tastenkürzel löschen</translation>
</message>
@@ -3131,7 +3142,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<context>
<name>QtPropertyBrowserUtils</name>
<message>
- <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-136"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-156"/>
<source>[%1, %2, %3] (%4)</source>
<translation>[%1, %2, %3] (%4)</translation>
</message>
@@ -3904,7 +3915,7 @@ Möchten Sie sie überschreiben?</translation>
<context>
<name>VersionDialog</name>
<message>
- <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+171"/>
+ <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+170"/>
<source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</source>
<translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</translation>
</message>
@@ -4742,7 +4753,7 @@ Möchten Sie sie überschreiben?</translation>
<translation>Fehler beim Einfügen</translation>
</message>
<message>
- <location line="+445"/>
+ <location line="+450"/>
<source>Lay out</source>
<translation>Layout</translation>
</message>
@@ -4753,7 +4764,7 @@ Möchten Sie sie überschreiben?</translation>
<translation>Widget einfügen</translation>
</message>
<message numerus="yes">
- <location line="-1058"/>
+ <location line="-1063"/>
<source>Paste %n action(s)</source>
<translation>
<numerusform>Eine Aktion einfügen</numerusform>
@@ -4794,12 +4805,12 @@ Möchten Sie sie überschreiben?</translation>
<translation>Übergeordnetes Widget auswählen</translation>
</message>
<message>
- <location line="+576"/>
+ <location line="+581"/>
<source>A QMainWindow-based form does not contain a central widget.</source>
<translation>Ein auf QMainWindow basierendes Formular enthält kein zentrales Widget.</translation>
</message>
<message>
- <location line="-797"/>
+ <location line="-802"/>
<source>Raise widgets</source>
<translation>Widgets nach vorn bringen</translation>
</message>
@@ -4825,7 +4836,7 @@ Möchten Sie sie überschreiben?</translation>
<context>
<name>qdesigner_internal::FormWindowManager</name>
<message>
- <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+364"/>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+365"/>
<source>Cu&amp;t</source>
<translation>&amp;Ausschneiden</translation>
</message>
diff --git a/translations/qt_de.ts b/translations/qt_de.ts
index d916733..8cbf402 100644
--- a/translations/qt_de.ts
+++ b/translations/qt_de.ts
@@ -4,7 +4,7 @@
<context>
<name>CloseButton</name>
<message>
- <location filename="../src/gui/widgets/qtabbar.cpp" line="+2262"/>
+ <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/>
<source>Close Tab</source>
<translation>Schließen</translation>
</message>
@@ -12,7 +12,7 @@
<context>
<name>FakeReply</name>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2198"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2200"/>
<source>Fake error !</source>
<translation>Fake error !</translation>
</message>
@@ -143,7 +143,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<context>
<name>Phonon::MMF</name>
<message>
- <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/>
+ <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+103"/>
<source>Audio Output</source>
<translation>Audio-Ausgabe</translation>
</message>
@@ -152,60 +152,333 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<source>The audio output device</source>
<translation>Audio-Ausgabegerät</translation>
</message>
-</context>
-<context>
- <name>Phonon::MMF::AudioEqualizer</name>
<message>
- <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+75"/>
- <source>Frequency band, %1 Hz</source>
- <translation>Frequenzband, %1 Hz</translation>
+ <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+87"/>
+ <source>No error</source>
+ <translation>Kein Fehler</translation>
</message>
-</context>
-<context>
- <name>Phonon::MMF::EffectFactory</name>
<message>
- <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/>
- <source>Audio Equalizer</source>
- <translation>Audio-Equalizer</translation>
+ <location line="+2"/>
+ <source>Not found</source>
+ <translation>Nicht gefunden</translation>
</message>
<message>
<location line="+2"/>
- <source>Bass Boost</source>
- <translation>Bass-Boost</translation>
+ <source>Out of memory</source>
+ <translation>Es ist kein Speicher mehr verfügbar</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Not supported</source>
+ <translation>Nicht unterstützt</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Overflow</source>
+ <translation>Überlauf</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Underflow</source>
+ <translation>Unterlauf</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Already exists</source>
+ <translation>Existiert bereits</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Path not found</source>
+ <translation>Pfad konnte nicht gefunden werden</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>In use</source>
+ <translation>Bereits in Verwendung</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Not ready</source>
+ <translation>Nicht bereit</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Access denied</source>
+ <translation>Zugriff verweigert</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Could not connect</source>
+ <translation>Es konnte keine Verbindung hergestellt werden</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Disconnected</source>
+ <translation>Getrennt</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Permission denied</source>
+ <translation>Zugriff verweigert</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Insufficient bandwidth</source>
+ <translation>Unzureichende Bandweite</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Network unavailable</source>
+ <translation>Netzwerk nicht verfügbar</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Network communication error</source>
+ <translation>Fehler bei der Kommunikation über das Netzwerk</translation>
</message>
<message>
<location line="+2"/>
- <source>Distance Attenuation</source>
- <translation>Abschwächung in Abhängigkeit von der Entfernung</translation>
+ <source>Streaming not supported</source>
+ <translation>Streaming nicht unterstützt</translation>
</message>
<message>
<location line="+2"/>
+ <source>Server alert</source>
+ <translation>Server alert</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Invalid protocol</source>
+ <translation>Ungültiges Protokoll</translation>
+ </message>
+ <message>
<location line="+2"/>
- <source>Environmental Reverb</source>
- <translation>Hall-Effekt der Umgebung</translation>
+ <source>Invalid URL</source>
+ <translation>Ungültige URL</translation>
</message>
<message>
<location line="+2"/>
- <source>Loudness</source>
- <translation>Lautstärke</translation>
+ <source>Multicast error</source>
+ <translation>Multicast-Fehler</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>Proxy server error</source>
+ <translation>Fehler bei Proxy-Server-Kommunikation</translation>
</message>
<message>
<location line="+2"/>
- <source>Source Orientation</source>
- <translation>Ausrichtung der Quelle</translation>
+ <source>Proxy server not supported</source>
+ <translation>Proxy-Server nicht unterstützt</translation>
</message>
<message>
<location line="+2"/>
- <source>Stereo Widening</source>
- <translation>Stereo-Basisverbreiterung</translation>
+ <source>Audio output error</source>
+ <translation>Fehler bei Audio-Ausgabe</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Video output error</source>
+ <translation>Fehler bei Video-Ausgabe</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Decoder error</source>
+ <translation>Fehler im Decoder</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Audio or video components could not be played</source>
+ <translation>Audio- oder Videokomponenten konnten nicht abgespielt werden</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>DRM error</source>
+ <translation>DRM-Fehler</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Unknown error (%1)</source>
+ <translation>Unbekannter Fehler (%1)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractMediaPlayer</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/abstractmediaplayer.cpp" line="+73"/>
+ <source>Not ready to play</source>
+ <translation>Das Abspielen ist im Grundzustand nicht möglich</translation>
+ </message>
+ <message>
+ <location line="+161"/>
+ <location line="+10"/>
+ <source>Error opening file</source>
+ <translation>Die Datei konnte nicht geöffnet werden</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Error opening URL</source>
+ <translation>Der URL konnte nicht geöffnet werden</translation>
+ </message>
+ <message>
+ <location line="+83"/>
+ <source>Setting volume failed</source>
+ <translation>Die Lautstärke konnte nicht eingestellt werden</translation>
+ </message>
+ <message>
+ <location line="+50"/>
+ <source>Playback complete</source>
+ <translation>Abspielen beendet</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioEqualizer</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/>
+ <source>%1 Hz</source>
+ <translation>%1 Hz</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioPlayer</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/audioplayer.cpp" line="+173"/>
+ <source>Getting position failed</source>
+ <translation>Die Position konnte nicht bestimmt werden</translation>
+ </message>
+ <message>
+ <location line="+36"/>
+ <source>Opening clip failed</source>
+ <translation>Der Clip konnte nicht geöffnet werden</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EffectFactory</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/>
+ <source>Enabled</source>
+ <translation>Aktiviert</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EnvironmentalReverb</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/environmentalreverb.cpp" line="+146"/>
+ <source>Decay HF ratio (%)</source>
+ <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
+ <translation>Hochfrequenz-Abklingverhältnis (%)</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Decay time (ms)</source>
+ <translation>Abklingzeit (ms)</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Density (%)</source>
+ <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment>
+ <translation>Dichte (%)</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Diffusion (%)</source>
+ <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment>
+ <translation>Diffusion (%)</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <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>
+ <translation>Verzögerung des Echos (ms)</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Reflections level (mB)</source>
+ <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment>
+ <translation>Stärke des Echos (mB)</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Reverb delay (ms)</source>
+ <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment>
+ <translation>Verzögerung des Nachhalls (ms)</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Reverb level (mB)</source>
+ <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment>
+ <translation>Stärke des Nachhalls (mB)</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Room HF level</source>
+ <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment>
+ <translation>Hochfrequenz-Pegel des Raums</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Room level (mB)</source>
+ <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+ <translation>Pegel des Raums (mB)</translation>
</message>
</context>
<context>
<name>Phonon::MMF::MediaObject</name>
<message>
- <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+291"/>
- <source>Media type could not be determined</source>
- <translation>Der Typ des Mediums konnte nicht bestimmt werden</translation>
+ <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+270"/>
+ <source>Error opening source: type not supported</source>
+ <translation>Die Quelle konnte nicht geöffnet werden: Dieser Typ wird nicht unterstützt</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>Error opening source: media type could not be determined</source>
+ <translation>Die Quelle konnte nicht geöffnet werden: Der Medientyp konnte nicht bestimmt werden</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::StereoWidening</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/stereowidening.cpp" line="+79"/>
+ <source>Level (%)</source>
+ <translation>Stärke (%)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::VideoPlayer</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/mmf_videoplayer.cpp" line="+125"/>
+ <source>Pause failed</source>
+ <translation>Fehler bei Pause-Funktion</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Seek failed</source>
+ <translation>Suchoperation fehlgeschlagen</translation>
+ </message>
+ <message>
+ <location line="+54"/>
+ <source>Getting position failed</source>
+ <translation>Die Position konnte nicht bestimmt werden</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Opening clip failed</source>
+ <translation>Der Clip konnte nicht geöffnet werden</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Buffering clip failed</source>
+ <translation>Fehler beim Puffern des Clips</translation>
+ </message>
+ <message>
+ <location line="+174"/>
+ <location line="+12"/>
+ <location line="+176"/>
+ <location line="+15"/>
+ <location line="+6"/>
+ <source>Video display error</source>
+ <translation>Fehler bei der Video-Anzeige</translation>
</message>
</context>
<context>
@@ -275,7 +548,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<context>
<name>Q3FileDialog</name>
<message>
- <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+829"/>
+ <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+827"/>
<source>Copy or Move a File</source>
<translation>Datei kopieren oder verschieben</translation>
</message>
@@ -300,7 +573,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<location line="-157"/>
<location line="+49"/>
<location line="+2149"/>
- <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+112"/>
+ <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+133"/>
<source>All Files (*)</source>
<translation>Alle Dateien (*)</translation>
</message>
@@ -912,8 +1185,8 @@ nach
<context>
<name>QAbstractSocket</name>
<message>
- <location filename="../src/network/socket/qabstractsocket.cpp" line="+899"/>
- <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+643"/>
+ <location filename="../src/network/socket/qabstractsocket.cpp" line="+903"/>
+ <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+629"/>
<location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/>
<location line="+26"/>
<source>Host not found</source>
@@ -932,19 +1205,20 @@ nach
<translation>Das Zeitlimit für die Verbindung wurde überschritten</translation>
</message>
<message>
- <location line="-555"/>
- <location line="+805"/>
+ <location line="-559"/>
+ <location line="+809"/>
<location line="+208"/>
<source>Operation on socket is not supported</source>
<translation>Diese Socket-Operation wird nicht unterstützt</translation>
</message>
<message>
- <location line="+200"/>
+ <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+585"/>
+ <location filename="../src/network/socket/qabstractsocket.cpp" line="+200"/>
<source>Socket operation timed out</source>
<translation>Das Zeitlimit für die Operation wurde überschritten</translation>
</message>
<message>
- <location line="+380"/>
+ <location filename="../src/network/socket/qabstractsocket.cpp" line="+380"/>
<source>Socket is not connected</source>
<translation>Nicht verbunden</translation>
</message>
@@ -957,7 +1231,7 @@ nach
<context>
<name>QAbstractSpinBox</name>
<message>
- <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1217"/>
+ <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1260"/>
<source>&amp;Step up</source>
<translation>&amp;Inkrementieren</translation>
</message>
@@ -983,7 +1257,7 @@ nach
<context>
<name>QApplication</name>
<message>
- <location filename="../src/gui/kernel/qapplication.cpp" line="+2279"/>
+ <location filename="../src/gui/kernel/qapplication.cpp" line="+2287"/>
<source>QT_LAYOUT_DIRECTION</source>
<comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
<translation>LTR</translation>
@@ -1053,7 +1327,7 @@ nach
<context>
<name>QColorDialog</name>
<message>
- <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1349"/>
+ <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1356"/>
<source>Hu&amp;e:</source>
<translation>Farb&amp;ton:</translation>
</message>
@@ -1093,7 +1367,7 @@ nach
<translation>Farbauswahl</translation>
</message>
<message>
- <location line="+180"/>
+ <location line="+184"/>
<source>&amp;Basic colors</source>
<translation>Grundfar&amp;ben</translation>
</message>
@@ -1180,7 +1454,7 @@ nach
<context>
<name>QDB2Driver</name>
<message>
- <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1254"/>
+ <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/>
<source>Unable to connect</source>
<translation>Es kann keine Verbindung aufgebaut werden</translation>
</message>
@@ -1203,7 +1477,7 @@ nach
<context>
<name>QDB2Result</name>
<message>
- <location line="-1031"/>
+ <location line="-1030"/>
<location line="+240"/>
<source>Unable to execute statement</source>
<translation>Der Befehl kann nicht ausgeführt werden</translation>
@@ -1278,7 +1552,7 @@ nach
<context>
<name>QDialog</name>
<message>
- <location filename="../src/gui/dialogs/qdialog.cpp" line="+636"/>
+ <location filename="../src/gui/dialogs/qdialog.cpp" line="+652"/>
<source>What&apos;s This?</source>
<translation>Direkthilfe</translation>
</message>
@@ -1291,9 +1565,9 @@ nach
<context>
<name>QDialogButtonBox</name>
<message>
- <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/>
+ <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1876"/>
<location line="+464"/>
- <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+622"/>
+ <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/>
<source>OK</source>
<translation>OK</translation>
</message>
@@ -1505,7 +1779,7 @@ nach
<context>
<name>QFile</name>
<message>
- <location filename="../src/corelib/io/qfile.cpp" line="+697"/>
+ <location filename="../src/corelib/io/qfile.cpp" line="+698"/>
<location line="+155"/>
<source>Destination file exists</source>
<translation>Die Zieldatei existiert bereits</translation>
@@ -1545,7 +1819,7 @@ nach
<name>QFileDialog</name>
<message>
<location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/>
- <location line="+450"/>
+ <location line="+471"/>
<source>All Files (*)</source>
<translation>Alle Dateien (*)</translation>
</message>
@@ -1568,13 +1842,13 @@ nach
<translation>Details</translation>
</message>
<message>
- <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+464"/>
+ <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+465"/>
<location line="+1"/>
<source>File</source>
<translation>Datei</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-467"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-488"/>
<source>Open</source>
<translation>Öffnen</translation>
</message>
@@ -1584,25 +1858,25 @@ nach
<translation>Speichern unter</translation>
</message>
<message>
- <location line="+689"/>
- <location line="+50"/>
- <location line="+1528"/>
+ <location line="+699"/>
+ <location line="+55"/>
+ <location line="+1532"/>
<source>&amp;Open</source>
<translation>&amp;Öffnen</translation>
</message>
<message>
- <location line="-1578"/>
- <location line="+50"/>
+ <location line="-1587"/>
+ <location line="+55"/>
<source>&amp;Save</source>
<translation>S&amp;peichern</translation>
</message>
<message>
- <location line="+1801"/>
+ <location line="+1805"/>
<source>Recent Places</source>
<translation>Zuletzt besucht</translation>
</message>
<message>
- <location line="-2511"/>
+ <location line="-2530"/>
<source>&amp;Rename</source>
<translation>&amp;Umbenennen</translation>
</message>
@@ -1617,17 +1891,17 @@ nach
<translation>&amp;Versteckte Dateien anzeigen</translation>
</message>
<message>
- <location line="+1957"/>
+ <location line="+1976"/>
<source>New Folder</source>
<translation>Neues Verzeichnis</translation>
</message>
<message>
- <location line="-1992"/>
+ <location line="-2011"/>
<source>Find Directory</source>
<translation>Verzeichnis suchen</translation>
</message>
<message>
- <location line="+696"/>
+ <location line="+706"/>
<source>Directories</source>
<translation>Verzeichnisse</translation>
</message>
@@ -1637,13 +1911,13 @@ nach
<translation>Alle Dateien (*.*)</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-655"/>
- <location line="+659"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-665"/>
+ <location line="+669"/>
<source>Directory:</source>
<translation>Verzeichnis:</translation>
</message>
<message>
- <location line="+810"/>
+ <location line="+819"/>
<source>%1 already exists.
Do you want to replace it?</source>
<translation>Die Datei %1 existiert bereits.
@@ -1737,7 +2011,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Unbekannt</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2111"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2130"/>
<source>Show </source>
<translation>Anzeigen </translation>
</message>
@@ -1753,8 +2027,8 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>&amp;Neues Verzeichnis</translation>
</message>
<message>
- <location line="+667"/>
- <location line="+38"/>
+ <location line="+677"/>
+ <location line="+43"/>
<source>&amp;Choose</source>
<translation>&amp;Auswählen</translation>
</message>
@@ -1764,8 +2038,8 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Löschen</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-698"/>
- <location line="+663"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-713"/>
+ <location line="+673"/>
<source>File &amp;name:</source>
<translation>Datei&amp;name:</translation>
</message>
@@ -2286,7 +2560,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QHostInfo</name>
<message>
- <location filename="../src/network/kernel/qhostinfo_p.h" line="+185"/>
+ <location filename="../src/network/kernel/qhostinfo_p.h" line="+101"/>
<source>Unknown error</source>
<translation>Unbekannter Fehler</translation>
</message>
@@ -2296,7 +2570,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<message>
<location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/>
<location line="+32"/>
- <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+220"/>
+ <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/>
<location line="+27"/>
<source>Host not found</source>
<translation>Rechner konnte nicht gefunden werden</translation>
@@ -2330,7 +2604,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QHttp</name>
<message>
- <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+578"/>
+ <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/>
<location filename="../src/qt3support/network/q3http.cpp" line="+1835"/>
<source>Connection refused</source>
<translation>Verbindung verweigert</translation>
@@ -2350,8 +2624,6 @@ Möchten Sie die Datei trotzdem löschen?</translation>
</message>
<message>
<location line="+82"/>
- <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+10"/>
- <location line="+19"/>
<location filename="../src/qt3support/network/q3http.cpp" line="+48"/>
<source>HTTP request failed</source>
<translation>HTTP-Anfrage fehlgeschlagen</translation>
@@ -2382,7 +2654,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Verbindung mit %1 beendet</translation>
</message>
<message>
- <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/>
+ <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/>
<location filename="../src/qt3support/network/q3http.cpp" line="+14"/>
<source>Connection closed</source>
<translation>Verbindung beendet</translation>
@@ -2647,7 +2919,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QIODevice</name>
<message>
- <location filename="../src/corelib/global/qglobal.cpp" line="+2072"/>
+ <location filename="../src/corelib/global/qglobal.cpp" line="+2096"/>
<source>Permission denied</source>
<translation>Zugriff verweigert</translation>
</message>
@@ -2667,7 +2939,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Kein freier Speicherplatz auf dem Gerät vorhanden</translation>
</message>
<message>
- <location filename="../src/corelib/io/qiodevice.cpp" line="+1561"/>
+ <location filename="../src/corelib/io/qiodevice.cpp" line="+1565"/>
<source>Unknown error</source>
<translation>Unbekannter Fehler</translation>
</message>
@@ -2731,7 +3003,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Operation unmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
</message>
<message>
- <location line="+344"/>
+ <location line="+345"/>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
<translation>Das Plugin &apos;%1&apos; verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation>
</message>
@@ -2783,12 +3055,12 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QLineEdit</name>
<message>
- <location filename="../src/gui/widgets/qlineedit.cpp" line="+2035"/>
+ <location filename="../src/gui/widgets/qlineedit.cpp" line="+2112"/>
<source>Select All</source>
<translation>Alles auswählen</translation>
</message>
<message>
- <location line="-32"/>
+ <location line="-40"/>
<source>&amp;Undo</source>
<translation>&amp;Rückgängig</translation>
</message>
@@ -2798,22 +3070,22 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Wieder&amp;herstellen</translation>
</message>
<message>
- <location line="+7"/>
+ <location line="+9"/>
<source>Cu&amp;t</source>
<translation>&amp;Ausschneiden</translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+6"/>
<source>&amp;Copy</source>
<translation>&amp;Kopieren</translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+6"/>
<source>&amp;Paste</source>
<translation>Einf&amp;ügen</translation>
</message>
<message>
- <location line="+5"/>
+ <location line="+7"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
@@ -2916,7 +3188,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QMYSQLDriver</name>
<message>
- <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1261"/>
+ <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1270"/>
<source>Unable to open database &apos;</source>
<translation>Die Datenbankverbindung kann nicht geöffnet werden &apos;</translation>
</message>
@@ -2926,7 +3198,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Es kann keine Verbindung aufgebaut werden</translation>
</message>
<message>
- <location line="+151"/>
+ <location line="+150"/>
<source>Unable to begin transaction</source>
<translation>Es kann keine Transaktion gestartet werden</translation>
</message>
@@ -2944,12 +3216,13 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QMYSQLResult</name>
<message>
- <location line="-969"/>
+ <location line="-977"/>
+ <location line="+31"/>
<source>Unable to fetch data</source>
<translation>Es konnten keine Daten abgeholt werden</translation>
</message>
<message>
- <location line="+183"/>
+ <location line="+161"/>
<source>Unable to execute query</source>
<translation>Die Abfrage konnte nicht ausgeführt werden</translation>
</message>
@@ -3127,7 +3400,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QMenuBar</name>
<message>
- <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+410"/>
+ <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+436"/>
<source>Actions</source>
<translation>Optionen</translation>
</message>
@@ -3163,7 +3436,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Hilfe</translation>
</message>
<message>
- <location line="-1099"/>
+ <location line="-1102"/>
<source>Show Details...</source>
<translation>Details einblenden...</translation>
</message>
@@ -3346,13 +3619,13 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkAccessFileBackend</name>
<message>
- <location filename="../src/network/access/qfilenetworkreply.cpp" line="+83"/>
+ <location filename="../src/network/access/qfilenetworkreply.cpp" line="+85"/>
<location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/>
<source>Request for opening non-local file %1</source>
<translation>Anforderung zum Öffnen einer Datei über Netzwerk %1</translation>
</message>
<message>
- <location line="+31"/>
+ <location line="+33"/>
<location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/>
<source>Error opening %1: %2</source>
<translation>%1 konnte nicht geöffnet werden: %2</translation>
@@ -3363,7 +3636,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Fehler beim Schreiben zur Datei %1: %2</translation>
</message>
<message>
- <location filename="../src/network/access/qfilenetworkreply.cpp" line="-11"/>
+ <location filename="../src/network/access/qfilenetworkreply.cpp" line="-13"/>
<location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/>
<source>Cannot open %1: Path is a directory</source>
<translation>%1 kann nicht geöffnet werden: Der Pfad spezifiziert ein Verzeichnis</translation>
@@ -3405,7 +3678,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkAccessHttpBackend</name>
<message>
- <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/>
+ <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+599"/>
<source>No suitable proxy found</source>
<translation>Es konnte kein geeigneter Proxy-Server gefunden werden</translation>
</message>
@@ -3413,12 +3686,12 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkReply</name>
<message>
- <location line="+95"/>
+ <location line="+101"/>
<source>Error downloading %1 - server replied: %2</source>
<translation>Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2</translation>
</message>
<message>
- <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+77"/>
+ <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+80"/>
<source>Protocol &quot;%1&quot; is unknown</source>
<translation>Das Protokoll &quot;%1&quot; ist unbekannt</translation>
</message>
@@ -3426,7 +3699,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkReplyImpl</name>
<message>
- <location line="+519"/>
+ <location line="+525"/>
<location line="+28"/>
<source>Operation canceled</source>
<translation>Operation abgebrochen</translation>
@@ -3509,7 +3782,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QODBCDriver</name>
<message>
- <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1790"/>
+ <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1806"/>
<source>Unable to connect</source>
<translation>Es kann keine Verbindung aufgebaut werden</translation>
</message>
@@ -3542,14 +3815,14 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QODBCResult</name>
<message>
- <location line="-932"/>
- <location line="+346"/>
+ <location line="-937"/>
+ <location line="+351"/>
<source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
<translation>QODBCResult::reset: &apos;SQL_CURSOR_STATIC&apos; konnte nicht als Attribut des Befehls gesetzt werden. Bitte prüfen Sie die Konfiguration Ihres ODBC-Treibers</translation>
</message>
<message>
- <location line="-329"/>
- <location line="+623"/>
+ <location line="-334"/>
+ <location line="+628"/>
<source>Unable to execute statement</source>
<translation>Der Befehl konnte nicht ausgeführt werden</translation>
</message>
@@ -3569,7 +3842,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Die Variable konnte nicht gebunden werden</translation>
</message>
<message>
- <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+190"/>
+ <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/>
<location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/>
<location line="+576"/>
<source>Unable to fetch last</source>
@@ -3619,7 +3892,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Der entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet</translation>
</message>
<message>
- <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/>
+ <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/>
<location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/>
<source>No host name given</source>
<translation>Es wurde kein Hostname angegeben</translation>
@@ -3803,7 +4076,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QPrintDialog</name>
<message>
- <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+108"/>
+ <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+110"/>
<source>locally connected</source>
<translation>direkt verbunden</translation>
</message>
@@ -4232,12 +4505,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QPrintPreviewDialog</name>
<message>
- <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+246"/>
+ <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+249"/>
<source>%1%</source>
<translation>%1%</translation>
</message>
<message>
- <location line="+68"/>
+ <location line="+71"/>
<source>Print Preview</source>
<translation>Druckvorschau</translation>
</message>
@@ -4317,7 +4590,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Seite einrichten</translation>
</message>
<message>
- <location line="+150"/>
+ <location line="+6"/>
+ <source>Close</source>
+ <translation>Schließen</translation>
+ </message>
+ <message>
+ <location line="+148"/>
<source>Export to PDF</source>
<translation>PDF exportieren</translation>
</message>
@@ -4530,7 +4808,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Zeitüberschreitung</translation>
</message>
<message>
- <location filename="../src/corelib/io/qprocess.cpp" line="+855"/>
+ <location filename="../src/corelib/io/qprocess.cpp" line="+856"/>
<location line="+52"/>
<location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
<location line="+50"/>
@@ -4645,7 +4923,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QSQLite2Driver</name>
<message>
- <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+391"/>
+ <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+399"/>
<source>Error opening database</source>
<translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation>
</message>
@@ -4668,12 +4946,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QSQLite2Result</name>
<message>
- <location line="-319"/>
+ <location line="-326"/>
<source>Unable to fetch results</source>
<translation>Das Ergebnis konnte nicht abgeholt werden</translation>
</message>
<message>
- <location line="+143"/>
+ <location line="+150"/>
<source>Unable to execute statement</source>
<translation>Der Befehl konnte nicht ausgeführt werden</translation>
</message>
@@ -4681,7 +4959,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QSQLiteDriver</name>
<message>
- <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+540"/>
+ <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+547"/>
<source>Error opening database</source>
<translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation>
</message>
@@ -5184,7 +5462,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
</message>
<message>
<location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/>
- <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+79"/>
+ <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+81"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/>
<source>%1: permission denied</source>
<translation>%1: Zugriff verweigert</translation>
@@ -6150,7 +6428,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Umdrehen</translation>
</message>
<message>
- <location line="+573"/>
+ <location line="+575"/>
<location line="+135"/>
<source>Ctrl</source>
<translation>Strg</translation>
@@ -6184,7 +6462,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>F%1</translation>
</message>
<message>
- <location line="-869"/>
+ <location line="-871"/>
<source>Home Page</source>
<translation>Startseite</translation>
</message>
@@ -6293,7 +6571,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QSoftKeyManager</name>
<message>
- <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+79"/>
+ <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+63"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
@@ -6318,7 +6596,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Abbrechen</translation>
</message>
<message>
- <location line="+172"/>
+ <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+273"/>
<source>Exit</source>
<translation>Beenden</translation>
</message>
@@ -6401,7 +6679,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Die Daten konnten nicht geschrieben werden: %1</translation>
</message>
<message>
- <location line="+119"/>
+ <location line="+63"/>
+ <source>Unable to decrypt data: %1</source>
+ <translation>Die Daten konnten nicht entschlüsselt werden: %1</translation>
+ </message>
+ <message>
+ <location line="+76"/>
<source>Error while reading: %1</source>
<translation>Beim Lesen ist ein Fehler aufgetreten: %1</translation>
</message>
@@ -6411,7 +6694,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Im Ablauf des SSL-Protokolls ist ein Fehler aufgetreten: %1</translation>
</message>
<message>
- <location line="-501"/>
+ <location line="-521"/>
<source>Error creating SSL context (%1)</source>
<translation>Es konnte keine SSL-Kontextstruktur erzeugt werden (%1)</translation>
</message>
@@ -6657,7 +6940,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QTextControl</name>
<message>
- <location filename="../src/gui/text/qtextcontrol.cpp" line="+2024"/>
+ <location filename="../src/gui/text/qtextcontrol.cpp" line="+2027"/>
<source>&amp;Undo</source>
<translation>&amp;Rückgängig</translation>
</message>
@@ -7375,7 +7658,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>%1 (%2x%3 Pixel)</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+412"/>
+ <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/>
<source>Bad HTTP request</source>
<translation>Ungültige HTTP-Anforderung</translation>
</message>
@@ -7460,7 +7743,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1822"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1833"/>
<source>JavaScript Alert - %1</source>
<translation>JavaScript-Hinweis - %1</translation>
</message>
@@ -7470,7 +7753,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>JavaScript-Bestätigung - %1</translation>
</message>
<message>
- <location line="+18"/>
+ <location line="+19"/>
<source>JavaScript Prompt - %1</source>
<translation>JavaScript-Eingabeaufforderung - %1</translation>
</message>
@@ -7706,7 +7989,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QWidget</name>
<message>
- <location filename="../src/gui/kernel/qwidget.cpp" line="+5720"/>
+ <location filename="../src/gui/kernel/qwidget.cpp" line="+5728"/>
<source>*</source>
<translation>*</translation>
</message>