Index: /trunk/.tag
===================================================================
--- /trunk/.tag	(revision 768)
+++ /trunk/.tag	(revision 769)
@@ -1,3 +1,3 @@
-Source revision: 244b440f11a519bbd0f6a2c5cde90edb1732f2ea
-Mkdist revision: d08f1bea58770dc2f677afedc45d7d657d5e6069
+Source revision: 76353f177cd84327c692ea31ec644df683643194
+Mkdist revision: fb495242f30476d783a52b9f01ca2ec9c00fdcb8
 
Index: /trunk/INSTALL
===================================================================
--- /trunk/INSTALL	(revision 768)
+++ /trunk/INSTALL	(revision 769)
@@ -1,3 +1,3 @@
-        INSTALLING Qt Source Package Version 4.6.2.
+        INSTALLING Qt Source Package Version 4.6.3.
 
 For full installation instructions for each supported platform, please
Index: /trunk/README
===================================================================
--- /trunk/README	(revision 768)
+++ /trunk/README	(revision 769)
@@ -1,3 +1,3 @@
-This is Qt version 4.6.2.
+This is Qt version 4.6.3.
 
 Qt is a comprehensive cross-platform C++ application framework. Qt 4
Index: /trunk/bin/createpackage.pl
===================================================================
--- /trunk/bin/createpackage.pl	(revision 768)
+++ /trunk/bin/createpackage.pl	(revision 769)
@@ -55,4 +55,6 @@
 # Use File::Spec services mainly rel2abs
 use File::Spec;
+# Use File::Path - to make stub sis target directory
+use File::Path;
 # use CWD abs_bath, which is exported only on request
 use Cwd 'abs_path';
@@ -112,9 +114,11 @@
 my $certfile = "";
 my $preserveUnsigned = "";
+my $stub = "";
 
 unless (GetOptions('i|install' => \$install,
                    'p|preprocess' => \$preprocessonly,
                    'c|certfile=s' => \$certfile,
-                   'u|unsigned' => \$preserveUnsigned,)){
+                   'u|unsigned' => \$preserveUnsigned,
+                   's|stub' => \$stub,)){
     Usage();
 }
@@ -154,4 +158,5 @@
 my $unsigned_sis_name = $sisoutputbasename."_unsigned.sis";
 my $signed_sis_name = $sisoutputbasename.".sis";
+my $stub_sis_name = $sisoutputbasename."_stub.sis";
 
 # Store some utility variables
@@ -257,47 +262,56 @@
 }
 
-# Create SIS.
-system ("makesis $pkgoutput $unsigned_sis_name");
-
-# Sign SIS with certificate info given as an argument.
-system ("signsis $unsigned_sis_name $signed_sis_name $certificate $key $passphrase");
-
-# Check if creating signed SIS Succeeded
-stat($signed_sis_name);
-if( -e _ ) {
-    my $targetInsert = "";
-    if ($targetplatform ne "-") {
-        $targetInsert = "for $targetplatform ";
-    }
-    print ("\nSuccessfully created $signed_sis_name ${targetInsert}using certificate: $certtext!\n");
-
-    # Sign with additional certificates & keys
-    for my $row ( @certificates ) {
-        # Get certificate absolute file names, relative paths are relative to certfilepath
-        my $abscert = File::Spec->rel2abs( $row->[0], $certfilepath);
-        my $abskey = File::Spec->rel2abs( $row->[1], $certfilepath);
-
-        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
-    if (!$preservePkgOutput) {
-        unlink $pkgoutput;
-    }
-    if (!$preserveUnsigned) {
-        unlink $unsigned_sis_name;
-    }
-
-    # Install the sis if requested
-    if ($install) {
-        print ("\nInstalling $signed_sis_name...\n");
-        system ("$signed_sis_name");
-    }
+if($stub) {
+    if(!($ENV{EPOCROOT})) { die("EPOCROOT must be set to create stub sis files"); }
+    my $systeminstall = "$ENV{EPOCROOT}epoc32/data/z/system/install";
+    mkpath($systeminstall);
+    my $stub_sis_name = $systeminstall."/".$stub_sis_name;
+    # Create stub SIS.
+    system ("makesis -s $pkgoutput $stub_sis_name");
 } else {
-    # Lets leave the generated PKG for problem solving purposes
-    print ("\nSIS creation failed!\n");
-}
-
+    # Create SIS.
+    system ("makesis $pkgoutput $unsigned_sis_name");
+    print("\n");
+
+    # Sign SIS with certificate info given as an argument.
+    system ("signsis $unsigned_sis_name $signed_sis_name $certificate $key $passphrase");
+
+    # Check if creating signed SIS Succeeded
+    stat($signed_sis_name);
+    if( -e _ ) {
+        my $targetInsert = "";
+        if ($targetplatform ne "-") {
+            $targetInsert = "for $targetplatform ";
+        }
+        print ("Successfully created $signed_sis_name ${targetInsert}using certificate: $certtext!\n");
+
+        # Sign with additional certificates & keys
+        for my $row ( @certificates ) {
+            # Get certificate absolute file names, relative paths are relative to certfilepath
+            my $abscert = File::Spec->rel2abs( $row->[0], $certfilepath);
+            my $abskey = File::Spec->rel2abs( $row->[1], $certfilepath);
+
+            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
+        if (!$preservePkgOutput) {
+            unlink $pkgoutput;
+        }
+        if (!$preserveUnsigned) {
+            unlink $unsigned_sis_name;
+        }
+
+        # Install the sis if requested
+        if ($install) {
+            print ("\nInstalling $signed_sis_name...\n");
+            system ("$signed_sis_name");
+        }
+    } else {
+        # Lets leave the generated PKG for problem solving purposes
+        print ("\nSIS creation failed!\n");
+    }
+}
 
 #end of file
Index: /trunk/bin/patch_capabilities.bat
===================================================================
--- /trunk/bin/patch_capabilities.bat	(revision 769)
+++ /trunk/bin/patch_capabilities.bat	(revision 769)
@@ -0,0 +1,1 @@
+@perl.exe -S %~dp0patch_capabilities.pl %*
Index: /trunk/bin/syncqt
===================================================================
--- /trunk/bin/syncqt	(revision 768)
+++ /trunk/bin/syncqt	(revision 769)
@@ -195,4 +195,6 @@
     } elsif(basename($iheader) eq "qtconcurrentrun.h") {
         push @ret, "QtConcurrentRun"
+    } elsif(basename($iheader) eq "qaudio.h") {
+        push @ret, "QAudio"
     }
 
Index: unk/changes-4.6.2
===================================================================
--- /trunk/changes-4.6.2	(revision 768)
+++ 	(revision )
@@ -1,227 +1,0 @@
-Qt 4.6.2 is a bug-fix release. It maintains both forward and backward
-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
-
-The Qt version 4.6 series is binary compatible with the 4.5.x series.
-Applications compiled for 4.5 will continue to run with 4.6.
-
-Some of the changes listed in this file include issue tracking numbers
-corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
-Tracker, or the Merge Request queue of the public source repository.
-
-Qt Bug Tracker: http://bugreports.qt.nokia.com
-Task Tracker:   http://qt.nokia.com/developer/task-tracker
-Merge Request:  http://qt.gitorious.org
-
-
-****************************************************************************
-*                          Library                                         *
-****************************************************************************
-
-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 manifested 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 be used.
- - QIODevice
-    * Optimized readAll().
- - QReadWriteLock
-    * [MR 426] Fixed documentation.
- - QXmlStreamWriter
-    * [QTBUG-6893] Fixed adding extra Byte Order Marks when writing to a
-      .xml file.
-
-QtGui
------
-
- - QApplication
-    * [QTBUG-6098] Added a flag to avoid construction of application panes.
-    * [QTBUG-7029] Fixed a crash when re-creating QApplication object due
-      to a dangling gesture manager pointer.
- - QAbstractScrollArea
-    * [QTBUG-1760] Reverted horizontal scrolling with mouse wheel when vertical
-      scrollbar is hidden
- - QBmpHandler
-    * [QTBUG-7530] Fixed an infinite loop that could occur when reading invalid
-      BMP images.
- - QGraphicsEffect
-    * [QTBUG-6901] Fixed performance problem when translating items with
-      graphics effects.
- - QImage
-    * [QTBUG-7231] Avoid an unnecessary copy in QImage::scaled().
- - QInputContext
-    * [QTBUG-7439] Avoided the loss of preedit text when losing focus on
-      Symbian.
- - QPDFEngine
-    * [QTBUG-7249] Fixed the encoding of the Tile and Creator tags in the PDF
-      engine.
- - [QT-2629] Implemented event filter functions for Symbian.
- - [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.
-
-QtDBus
-------
-
- - QDBusConnection
-    * [QT-2307] Fixed sending of D-Bus method calls with QDBus::BlockWithGui.
-
-QtNetwork
----------
-
- - 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] Handle unknown errors from socket engine.
-
-QtOpenGL
---------
-
- - [QTBUG-7490] Better support for user-generated binary shaders.
- - QGLPixelBuffer
-    * [QTBUG-7476] Fixed a crash under X11 when drawing QPixmaps to
-      QGLPixelBuffers.
- - QGL2PaintEngineEx
-    * [QTBUG-7203] Reset the GL stencil mask, op and function in resetGLState().
- - QGLWidget
-    * [QTBUG-7213] Fixed QGLWidget::renderPixmap() on Windows.
-
-
-QtOpenVG
---------
-
- - [QTBUG-7791] Optimize single-rect IntersectClip in OpenVG using the scissor.
- - [QTBUG-7864] Use OpenVG scissor on 90/180/270 rotations and simple clips.
-
-QtMultimedia
-------------
-
- - QAudioInput
-    * [QTBUG-7044]: QAudioInput stopped working correctly after
-      suspend()/resume() on linux.
-
-Examples
---------
-
- - QtMultimedia
-    * [MR 418] Fixed the example for QAudioOutput.
- - WebKit
-    * [MR 2235] Added the framecapture example to the default build.
-
-
-****************************************************************************
-*                      Platform Specific Changes                           *
-****************************************************************************
-
-Qt for Linux/X11
-----------------
- - Fix a bug where QPixmap::serialNumber was not set on a transformed pixmap
-   in Qt/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 Mac OS X
----------------
-
- - [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.
-
-DirectFB
---------
-
- - Fix a bug where QPixmap::serialNumber was not set on a transformed pixmap
-   in DirectFB.
- - Reimplement QPixmapData::scroll for QDirectFBPixmapData which optimizes
-   QPixmap::scroll.
- - Fix a rendering issue for semi-transparent top level windows in DirectFB.
- - Make it possible to fall back to the raster engine for stretch blits in
-   DirectFB using QT_NO_DIRECTFB_STRETCHBLIT.
-
-Qt for Symbian
---------------
-
- - [QTBUG-6556] Improve the DEF file handling scheme, to allow simple enable/
-   disable of DEF file usage (for use _during development only_ to decouple
-   the need to update the DEF files at the precise point that symbols are
-   removed, therefore allowing builds by CI systems to succeed even if symbols
-   have been removed.  This does not remove the need to update the DEF files
-   before release.  NOTE: Builds generated using this flag are not binary
-   compatible with previous versions of Qt.)
- - 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                                           *
-****************************************************************************
-
- - Designer
-   * [QTBUG-6965] Enabled editing seconds of QDateTime-type properties.
-   * [QTBUG-6757] Fixed bug where selection handles would be affected by
-     a style sheet set on the main form.
-
- - uic3
-   * [QTBUG-7404] Added option to preserve layout names set by Qt 3 Designer.
-
-****************************************************************************
-* 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
Index: /trunk/changes-4.6.3
===================================================================
--- /trunk/changes-4.6.3	(revision 769)
+++ /trunk/changes-4.6.3	(revision 769)
@@ -0,0 +1,394 @@
+Qt 4.6.3 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:
+
+  http://qt.nokia.com/doc/4.6
+
+The Qt version 4.6 series is binary compatible with the 4.5.x series.
+Applications compiled for 4.5 will continue to run with 4.6.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
+Tracker, or the Merge Request queue of the public source repository.
+
+Qt Bug Tracker: http://bugreports.qt.nokia.com
+Task Tracker:   http://qt.nokia.com/developer/task-tracker
+Merge Request:  http://qt.gitorious.org
+
+****************************************************************************
+*                           General                                        *
+****************************************************************************
+
+Examples and Demos
+------------------
+
+ - Added Spectrum analyzer demo application.
+ - Added exit softkey to Wiggly example.
+ - Added close button to Anomaly demo.
+ - [QTBUG-10635]: Fixed Anomaly demo controlstrip icon placement for very
+   small screens.
+
+
+****************************************************************************
+*                          Library                                         *
+****************************************************************************
+
+QtCore
+------
+
+ - QStateMachine
+    * [QTBUG-8842] Ensure history configuration is cleared when a state
+      machine is restarted.
+
+ - QXmlStreamReader
+    * [QTBUG-9196] Fixed crash when parsing.
+
+QtGui
+-----
+
+ - QComboBox
+    * [QTBUG-10403] Fixed QComboBox ignoring the item data background role 
+      for some styles.
+
+ - QCommonStyle
+    * [QTBUG-7137] Fixed a bug that led to missing text pixels in QTabBar when
+      using small font sizes.
+
+ - QCUPSSupport
+    * [QTBUG-10512] Fixed a potential crash with misconfigured CUPS printers.
+    * [QTBUG-6419] Make QCUPSSupport::printerHasPPD() release temporary file
+      handles.
+
+ - qDrawPixmaps()
+    * [QTBUG-8455] Fixed qDrawPixmaps() to draw on integer coordinates under
+      Mac OS X.
+
+ - QFontEngine
+    * [QTBUG-3976] Fixed a leak for QFont objects used in threads.
+
+ - QGifHandler
+    * [QTBUG-7037] Fixed QGifHandler::loopCount().
+    * [QTBUG-6696] Cache the sizes of images in an animated GIF.
+
+ - QGraphicsEffect
+    * [QTBUG-5358] Fixed warnings and crash when painting graphics effects
+      outside scene.
+
+ - QGraphicsItem
+    * [QTBUG-9391] Avoid a useless repaint when setting the cache mode to
+      DeviceCoordinateMode while already using that mode.
+    * [QTBUG-8475] Fixed crash and loss of focus when deleting a child of a
+      focus scope.
+
+ - QGraphicsProxyWidget
+    * [QTBUG-5349] Fixed tooltips not being shown for QGraphicsProxyWidget.
+    * [QTBUG-2883] Fixed tooltips appearing at wrong location.
+    * [QTBUG-7296] Fixed painting artifacts on a scaled proxy when the view
+      is scrolled.
+
+ - QGraphicsScene
+    * [QTBUG-7863] Fixed incorrect blending when using
+      QGraphicsItem::DeviceCoordinateCache and when the item is semi-
+      transparent. If the item is transformed, the cache is now always fully
+      repainted to avoid artifacts.
+
+ - QGraphicsView
+    * Item tooltips are not clipped by the view anymore.
+
+ - QImageReader
+    * [QTBUG-7980] Fixed QImageReader::setAutoDetectImageFormat() to work with
+      plugins.
+
+ - QPainter
+    * [QTBUG-8140] Speed up custom bitmap brushes under X11 without Xrender
+      support.
+    * [QTBUG-8032] Fixed drawing pixmaps onto bitmaps on X11 without Xrender
+      support.
+    * [QTBUG-10421] Fixed WebKit-specific justification bug for text containing
+      more than one script.
+
+ - QPDFBaseEngine
+    * [QTBUG-8451] Fixed line and point drawing in the PS and PDF generators.
+
+ - QPixmap
+    * [QTBUG-8606] Fixed QPixmap::load() to not modify referenced copies.
+
+ - QPSPrintEngine
+    * [QTBUG-10121] Fixed incorrect version setting for EPS files.
+    * [QTBUG-10140] Fixed generation of the %%BoundingBox operator to output
+      integer values instead of floating point values.
+
+ - QRasterPaintEngine
+    * [QTBUG-9036] Fixed ClearType text rendering on translucent surfaces under
+      Windows.
+
+ - QRegion
+    * [QTBUG-7699] Prevented crash on large x-coordinates.
+
+ - QTextDocument
+    * [QTBUG-10301] Fixed a leak in QTextDocument::print().
+
+ - QTextEdit
+    * [QTBUG-9599] Fixed crash when copying the current text cursor as a result
+      of deleting a character.
+
+ - QTextEngine
+    * [QTBUG-9374] Fixed possible crash in QTextEngine::boundingBox() when using
+      multiscripted text.
+
+ - QTextLayout
+    * [QTBUG-9074] Fixed performance regression that was introduced in Qt 4.6.0.
+
+ - QTransform
+    * [QTBUG-8557] Fixed bug in QTransform::type() potentially occuring
+      after using operator/ or operator* or their overloads.
+
+ - QTriangulatingStroker
+    * [QTBUG-9548] Fixed possible data corruption when certain paths were
+      triangulated.
+
+ - QWin32PrintEngine
+    * [QTBUG-9938] Fixed a crash on Windows 7 systems with invalid PrinterPorts
+      registry entries.
+
+ - Improved scrolling horizontally with a mouse wheel over sliders.
+ - [QTBUG-7451] Gestures respect panels on QGraphicsView.
+
+QtOpenGL
+--------
+
+ - QOpenGLPaintEngine
+    * [QTBUG-10529] Fixed an issue where bound pixmaps were not released
+      correctly in the GL 1 engine.
+
+ - QGL2PaintEngineEx
+    * [QTBUG-8681] Fixed an application exit crash that could occur in the GL2
+      engine under X11.
+
+ - QGLContext
+    * [QTBUG-5732] Fixed a GLX warning that occured with some Intel chipsets
+      under X11.
+
+ - QGLPixelBuffer
+    * [QTBUG-8047] Fixed usage of QGLPixelBuffer with share widgets on other
+      X11 screens.
+
+ - QGLWidget
+    * [QTBUG-7545] Fixed QGLWidget::grabFrameBuffer() to honor the 'withAlpha' flag.
+    * [QTBUG-8054] Fixed drawing QPixmaps onto QGLWidgets on different X11 screens.
+    * [QTBUG-7865] Fixed bug where GL widgets were not fully updated on
+      Windows Vista/7 with Aero disabled.
+    * [QTBUG-8753] Worked around driver bug causing clipping errors on the N900.
+    * [QTBUG-10510] Workaround ATI driver bug when using QGraphicsEffect with GL.
+
+QtScript
+--------
+
+ - [QTBUG-7066] Fixed regression introduced in 4.6.0 that made it impossible to
+   change the prototype of the global object.
+ - [QTBUG-8366] Fixed regression introduced in 4.6.0 that caused the instanceof
+   operator to throw an error when the right-hand-side is generated by
+   QScriptEngine::newQMetaObject().
+ - [QTBUG-8400] Fixed memory leak when lazily binding QScriptValue to an engine.
+ - [QTBUG-9775] Fixed regression introduced in 4.6.0 that caused the qsTr()
+   function not to resolve the translation context correctly when invoked in
+   the global scope.
+ - [QTBUG-8364] Fixed regression introduced in QScriptclass in 4.6.0 that could
+   cause the Callable extension to crash.
+ - [QTBUG-6437] Fixed regression introduced in QScriptEngine in 4.6.0 that made
+   installTranslatorFunctions() not work with custom global object.
+
+QtXml
+-----
+
+ - [QTBUG-8398] QDom: prevent infinite loop when cloning a DTD.
+
+QtXmlPatterns
+-------------
+  - [QTBUG-8920] fixed crash with anonymous types in XsdSchemaChecker.
+  - [QTBUG-8394] include/import/redefine schemas only once.
+  - QXmlSchema: fix crash with referencing elements.
+
+****************************************************************************
+*                      Platform Specific Changes                           *
+****************************************************************************
+
+Qt for Linux/X11
+----------------
+
+ - [MR 458] Improved handling of Shift-Tab with VNC on X11.
+ - [QTBUG-7063] Changed key bindings (XF86XK_MyComputer, Qt::Key_Launch0,
+   Key_Calculator) on X11 back to how it was in Qt 4.5 before MR 1742
+   accidentally changed it.
+ - [QTBUG-8666] Fixed a crash when using QIcon::fromTheme with icons declared 
+   static.
+ - QGtkStyle
+   * [QTBUG-9240] Fixed a potensial crash in QGtkStyle when the gtk 
+     theme engine is not unavaliable. 
+   * [QTBUG-8537] Fixed a Glib-GObject-WARNING on application startup with
+     certain versions of GTK+.
+   * [QTBUG-8226] Fixed an atk_object_set_name assertion warning with certain
+     versions of GTK+.
+
+Qt for Windows
+--------------
+
+ - [QTBUG-6007] On Windows we query if there is a touch screen and do not try
+   to enable gestures otherwise.
+ - QLocalSocket
+    * [QTBUG-7815] Pipe handle leak fixed, when closing a QLocalSocket that
+      still has unwritten data.
+    * [QTBUG-9681] Fixed closing state for local sockets with unwritten data.
+    * [QTBUG-8418] Detection of Windows Mobile 6.5 fixed.
+
+ - [QTBUG-7662] Fixed an issue with clipped icon text.
+ - [QTBUG-7663] QFileIconProvider now show overlays when fetching native 
+   filesystem icons.
+ - [QTBUG-8324] Fixed a potential crash when fetching native icons.
+
+Qt for Windows CE
+-----------------
+
+- Core changes
+   * [QTBUG-8754] Fixed menu handling on Windows mobile.
+   * [QTBUG-7943] Fixed a crash when receiving a certain type of
+     WM_SETTINGSCHANGE message.
+
+- QWindowsMobileStyle
+   * [QTBUG-8419] Huge performance penalty for QTabWidget fixed for
+     Windows Mobile 6.5.
+   * [QTBUG-8757] QTabBar scroll button size has been fixed.
+
+Qt for Mac
+-----------------
+
+ - [QTBUG-8461] Fixed incorrect text rendering with document mode tabs.
+
+
+Qt for Symbian
+--------------
+
+ - Multimedia
+   * [QT-567] Implementation of QtMultimedia QAudio* APIs.
+   * [QTBUG-8919] Modified Phonon MMF backend to support video playback on
+     platforms which use graphics surfaces (i.e. platforms using the
+     New Graphics Architecture a.k.a. ScreenPlay).
+
+ - mkspecs
+   * Changed pkg_prerules to not use default_deployment for vendor ID.
+   * Added forwarding headers for qplatformdefs.h in Symbian mkspecs.
+   * Added some missing IBY export paths to platform_path.prf.
+   * Fixed libstdcpp.dll version autodetection for Symbian.
+   * [QTBUG-7836]: Removed unnecessary dependency to moc.exe from Symbian
+     builds.
+   * [QT-1171]: Fixed libstdcpp.dll version autodetection.
+   * [QTBUG-8513]: Fixed misc FLM issues.
+   * [QT-2909]: Support for adding conditional MMP_RULES.
+   * [QT-3253]: Export .flm files always if they are different.
+   * [QTBUG-9279]: Made it possible to define more than one language using
+     pkg_prerules.
+   * [QTBUG-6795]: Made sure target path exists in qmake_extra_pre_targetdep.flm.
+   * [QTBUG-7883]: Only use unix-like tools when not building for Symbian
+     in Windows.
+
+ - configure
+   * [QTBUG-7942]: Fix QT_BUILD_KEY for Symbian in Windows builds.
+
+     IMPORTANT NOTE: The build key change causes all Qt for Symbian plugins
+                     made with Qt 4.6.2 or earlier version incompatible with
+                     Qt 4.6.3 and later.
+
+   * [QTBUG-9065]: Support for -qtlibinfix parameter in Symbian.
+
+ - qmake
+   * Changed canonical paths to absolute paths in symmake.
+   * Basic deployment support for ROM in Symbian.
+   * Add '.' dir as the first include directory in Symbian.
+   * [QT-3017]: Support for conditional subdirs.
+   * [QT-3083]: Expanded support for RSS_RULES.
+   * [QTBUG-8685]: RVCT 4 support to Symbian builds.
+   * [QT-3147]: Changed Symbian pkg files to deploy from under epoc32.
+   * [QT-2985]: Fix extensions section in bld.inf when CONFIG contains
+     symbian_test.
+
+ - S60installs
+   * Export qtdemoapps.iby to proper location.
+   * [QT-3163]: Removed QtDeclarative.dll deployment from qt.iby.
+
+ - QProcess
+   * [QTBUG-7735]: Fixed crash at application exit when QProcess was used in
+     Symbian.
+   * [QTBUG-8906]: Removed extra space from the command line passed to
+     QProcess in Symbian.
+
+ - QtGui
+   * QUnixPrintWidget is no longer declared in Symbian.
+   * [QTBUG-10207]: Fixed long menu item texts causing crash.
+   * [QTBUG-9910] Fixed incorrect dialog position when native AVKON combined
+     status-and-control pane is in use.
+   * [QTBUG-4875] Made QMessageBox match size with native Symbian messageBox.
+   * [QTBUG-5539] Fixed QMessageBox to stretch to screen width with very small
+     content.
+   * [QTBUG-7828] Fixed Virtual keyboard closing issue with Sym^3.
+   * [QTBUG-9480] Use focus widget palette colors to show T9 suggested or
+     autocompletion words in QCoeFepInputContext.
+   * [QTBUG-10006] Changed default supported text modes to all, instead of just
+     lower and upper cases in QCoeFepInputContext.
+   * [QT-3277] Support text selection in QCoeFepInputContext for Sym^3.
+   * [QT-3008] Fixed crash in QGraphicsScenePrivate::setFocusItemHelper.
+
+ - QS60Style
+    * [QTBUG-10697] Support native-like selection in item views.
+    * [QTBUG-10454] Made styled sliders match in size to native sliders.
+    * [QTBUG-10073] Fixed QMenu with a lot of menu items.
+    * [QTBUG-3102] Fixed QTabWidget icon size issue.
+    * [QTBUG-5001] Show combobox list as a popup instead of dropdown list.
+    * [QTBUG-7258] Fixed calculations of PM_FocusFrameVMargin and
+      PM_FocusFrameHMargin pixel metrics.
+    * [QTBUG-7996] Fixed squeezed scrollbar handle and groove ends.
+    * [QTBUG-8193] Fixed drag-n-drop drop area drawing issue.
+    * [QTBUG-8194] Removed scrollbar context menu support.
+    * [QTBUG-8704] Fixed palette issues when drawing highlighted text.
+    * [QTBUG-9212] Fixed itemview multiselection issues.
+    * [QTBUG-9321] Fixed very large spinboxes drawing issues.
+    * [QTBUG-9837] Fixed text cutting issues with narrow QComboBoxes.
+    * [QTBUG-9844] Fixed QTreeView branch drawing issues in right to left
+      UI layout.
+    * [QTBUG-9927] Fixed transparent list higlight to show up correctly for
+      S60 3rd edition FP1 devices.
+    * [QTBUG-10064] Removed focus frame drawing for context menus and popups.
+    * [QTBUG-10487] Fixed QToolButton to be drawn pressed when context menu
+      for that button is open.
+    * [QTBUG-10549] Fixed style to honor stylesheet when drawing focus frame
+      for QPushButtons.
+    * [QT-3295] Made QMenu to look more native-like.
+    * [QT-3185] Fixed border frames to be drawn transparent for Sym^3 devices.
+    * [QT-3148] Draw application background correctly when animated wallpaper
+      is used in Sym^3 device.
+    * [QT-3137] Launch virtual keyboard with single tap.
+    * [QT-3104] Re-locate QTabWidget's scrollbuttons to either side of widget.
+    * [QT-2179] Fixed QPushButton with text and QPushButton with standard icon
+      to be of same size.
+
+ - Examples & demos:
+   * Enabled more examples by default in Symbian builds.
+
+ - Documentation
+   * [QTBUG-9277]: Clarified pkg_prerules usage documentation.
+
+ - Plugins:
+   * Fixed sqlite3_v9.2.zip to export sqlite3.iby to correct location.
+
+ - General
+   * [QT-3055]: Fixed filename cases to support building Qt for Symbian in
+     Linux.
+
+
+****************************************************************************
+*                          Tools                                           *
+****************************************************************************
+
+ - qmake
+    * Fixed qmake.pro for using with mingw
+
Index: /trunk/configure
===================================================================
--- /trunk/configure	(revision 768)
+++ /trunk/configure	(revision 769)
@@ -174,4 +174,10 @@
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+# detect the "echo without newline" style. usage: echo $ECHO_N "<string>$ECHO_C"
+if echo '\c' | grep '\c' >/dev/null; then
+    ECHO_N=-n
+else
+    ECHO_C='\c'
+fi
 
 #-------------------------------------------------------------------------------
@@ -400,9 +406,5 @@
         if [ -z "$LicenseKeyExt" ]; then
             echo
-            if echo '\c' | grep '\c' >/dev/null; then
-                echo -n "Please enter your license key: "
-            else
-                echo "Please enter your license key: \c"
-            fi
+            echo $ECHO_N "Please enter your license key: $ECHO_C"
             read LicenseKeyExt
             Licensee="Unknown user"
@@ -3370,8 +3372,8 @@
                          debugging turned on (Mac only).
 
-    -developer-build.... Compile and link Qt with Qt developer options (including auto-tests exporting)
-
-    -opensource......... Compile and link the Open-Source Edition of Qt.
-    -commercial......... Compile and link the Commercial Edition of Qt.
+    -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting)
+
+    -opensource ........ Compile and link the Open-Source Edition of Qt.
+    -commercial ........ Compile and link the Commercial Edition of Qt.
 
 
@@ -3766,5 +3768,5 @@
                          freetype.h and libfreetype.
 
- $XIN  -no-xinput.......... Do not compile Xinput support.
+ $XIN  -no-xinput ......... Do not compile Xinput support.
  $XIY  -xinput ............ Compile Xinput support. This also enabled tablet support
                          which requires IRIX with wacom.h and libXi or
@@ -3967,9 +3969,5 @@
             echo "Type 'no' to decline this license offer."
             echo
-            if echo '\c' | grep '\c' >/dev/null; then
-                echo -n "Do you accept the terms of $affix license? "
-            else
-                echo "Do you accept the terms of $affix license? \c"
-            fi
+            echo $ECHO_N "Do you accept the terms of $affix license? $ECHO_C"
             read acceptance
         fi
@@ -4002,9 +4000,5 @@
             echo "Type 'no' to decline this license offer."
             echo
-            if echo '\c' | grep '\c' >/dev/null; then
-                echo -n "Do you accept the terms of the license? "
-            else
-                echo "Do you accept the terms of the license? \c"
-            fi
+            echo $ECHO_N "Do you accept the terms of the license? $ECHO_C"
             read acceptance
         fi
@@ -4092,9 +4086,5 @@
             echo "Type 'no' to decline this license offer."
             echo
-            if echo '\c' | grep '\c' >/dev/null; then
-                echo -n "Do you accept the terms of the $TheLicense? "
-            else
-                echo "Do you accept the terms of the $TheLicense? \c"
-            fi
+            echo $ECHO_N "Do you accept the terms of the $TheLicense? $ECHO_C"
             read acceptance
         fi
@@ -7391,9 +7381,5 @@
 
 if [ "$OPT_VERBOSE" = "yes" ]; then
-    if echo '\c' | grep '\c' >/dev/null; then
-        echo -n "qmake vars .......... "
-    else
-        echo "qmake vars .......... \c"
-    fi
+    echo $ECHO_N "qmake vars .......... $ECHO_C"
     cat "$QMAKE_VARS_FILE" | tr '\n' ' '
     echo "qmake switches ...... $QMAKE_SWITCHES"
@@ -7558,4 +7544,6 @@
 fi
 echo "OpenSSL support ..... $CFG_OPENSSL $OPENSSL_LINKAGE"
+echo "Alsa support ........ $CFG_ALSA"
+echo
 
 [ "$CFG_PTMALLOC" != "no" ] && echo "Use ptmalloc ........ $CFG_PTMALLOC"
@@ -7582,6 +7570,4 @@
     echo
 fi
-echo "alsa support ........ $CFG_ALSA"
-echo
 
 sepath=`echo "$relpath" | sed -e 's/\\./\\\\./g'`
@@ -7772,19 +7758,10 @@
         fi
         QMAKE_SPEC_ARGS="-spec $SPEC"
-        if echo '\c' | grep '\c' >/dev/null; then
-            echo -n "  for $a"
-        else
-            echo "  for $a\c"
-        fi
+        echo $ECHO_N "  for $a$ECHO_C"
 
         QMAKE="$outpath/bin/qmake"
 	QMAKE_ARGS="$QMAKE_SWITCHES $QMAKE_SPEC_ARGS"
         if [ "$file" = ".projects.3" ]; then
-            if echo '\c' | grep '\c' >/dev/null; then
-                echo -n " (fast)"
-            else
-                echo " (fast)\c"
-            fi
-            echo
+            echo " (fast)"
 
             cat >"${OUTDIR}/Makefile" <<EOF
Index: /trunk/demos/browser/browser.pro
===================================================================
--- /trunk/demos/browser/browser.pro	(revision 768)
+++ /trunk/demos/browser/browser.pro	(revision 769)
@@ -6,6 +6,4 @@
 contains(QT_BUILD_PARTS, tools):!embedded: CONFIG += uitools
 else: DEFINES += QT_NO_UITOOLS
-
-CONFIG(release,release|debug):DEFINES+=QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
 
 FORMS += \
Index: /trunk/demos/browser/networkaccessmanager.cpp
===================================================================
--- /trunk/demos/browser/networkaccessmanager.cpp	(revision 768)
+++ /trunk/demos/browser/networkaccessmanager.cpp	(revision 769)
@@ -113,6 +113,7 @@
     double pctPipelined = (double(requestFinishedPipelinedCount) * 100.0/ double(requestFinishedCount));
     double pctSecure = (double(requestFinishedSecureCount) * 100.0/ double(requestFinishedCount));
+#ifdef QT_DEBUG
     qDebug("STATS [%lli requests total] [%3.2f%% from cache] [%3.2f%% pipelined] [%3.2f%% SSL/TLS]", requestFinishedCount, pctCached, pctPipelined, pctSecure);
-
+#endif
 }
 
Index: /trunk/demos/browser/webview.cpp
===================================================================
--- /trunk/demos/browser/webview.cpp	(revision 768)
+++ /trunk/demos/browser/webview.cpp	(revision 769)
@@ -144,7 +144,15 @@
 void WebPage::handleUnsupportedContent(QNetworkReply *reply)
 {
-    if (reply->error() == QNetworkReply::NoError) {
-        BrowserApplication::downloadManager()->handleUnsupportedContent(reply);
+    QString errorString = reply->errorString();
+
+    if (m_loadingUrl != reply->url()) {
+        // sub resource of this page
+        qWarning() << "Resource" << reply->url().toEncoded() << "has unknown Content-Type, will be ignored.";
+        reply->deleteLater();
         return;
+    }
+
+    if (reply->error() == QNetworkReply::NoError && !reply->header(QNetworkRequest::ContentTypeHeader).isValid()) {
+        errorString = "Unknown Content-Type";
     }
 
@@ -157,5 +165,5 @@
     QString html = QString(QLatin1String(file.readAll()))
                         .arg(title)
-                        .arg(reply->errorString())
+                        .arg(errorString)
                         .arg(reply->url().toString());
 
Index: /trunk/demos/composition/composition.cpp
===================================================================
--- /trunk/demos/composition/composition.cpp	(revision 768)
+++ /trunk/demos/composition/composition.cpp	(revision 769)
@@ -48,4 +48,6 @@
 #include <QMouseEvent>
 #include <qmath.h>
+
+const int animationInterval = 15; // update every 16 ms = ~60FPS
 
 CompositionWidget::CompositionWidget(QWidget *parent)
@@ -237,4 +239,5 @@
 {
     m_animation_enabled = true;
+    m_animationTimer = startTimer(animationInterval);
 #ifdef Q_WS_QWS
     m_image = QPixmap(":res/composition/flower.jpg");
@@ -263,4 +266,18 @@
     rect.translate(-size.width()/2, -size.height()/2);
     return rect;
+}
+
+void CompositionRenderer::setAnimationEnabled(bool enabled)
+{
+    if (m_animation_enabled == enabled)
+        return;
+    m_animation_enabled = enabled;
+    if (enabled) {
+        Q_ASSERT(!m_animationTimer);
+        m_animationTimer = startTimer(animationInterval);
+    } else {
+        killTimer(m_animationTimer);
+        m_animationTimer = 0;
+    }
 }
 
@@ -472,8 +489,4 @@
 #endif
     }
-
-    if (m_animation_enabled && m_current_object == NoObject) {
-        updateCirclePos();
-    }
 }
 
@@ -490,4 +503,8 @@
         m_current_object = NoObject;
     }
+    if (m_animation_enabled) {
+        killTimer(m_animationTimer);
+        m_animationTimer = 0;
+    }
 }
 
@@ -501,5 +518,13 @@
     m_current_object = NoObject;
 
-    if (m_animation_enabled)
+    if (m_animation_enabled) {
+        Q_ASSERT(!m_animationTimer);
+        m_animationTimer = startTimer(animationInterval);
+    }
+}
+
+void CompositionRenderer::timerEvent(QTimerEvent *event)
+{
+    if (event->timerId() == m_animationTimer)
         updateCirclePos();
 }
Index: /trunk/demos/composition/composition.h
===================================================================
--- /trunk/demos/composition/composition.h	(revision 768)
+++ /trunk/demos/composition/composition.h	(revision 769)
@@ -110,8 +110,4 @@
     void paint(QPainter *);
 
-    void mousePressEvent(QMouseEvent *);
-    void mouseMoveEvent(QMouseEvent *);
-    void mouseReleaseEvent(QMouseEvent *);
-
     void setCirclePos(const QPointF &pos);
 
@@ -121,4 +117,10 @@
     int circleColor() const { return m_circle_hue; }
     int circleAlpha() const { return m_circle_alpha; }
+
+protected:
+    void mousePressEvent(QMouseEvent *);
+    void mouseMoveEvent(QMouseEvent *);
+    void mouseReleaseEvent(QMouseEvent *);
+    void timerEvent(QTimerEvent *);
 
 public slots:
@@ -151,5 +153,5 @@
     void setCircleAlpha(int alpha) { m_circle_alpha = alpha; update(); }
     void setCircleColor(int hue) { m_circle_hue = hue; update(); }
-    void setAnimationEnabled(bool enabled) { m_animation_enabled = enabled; update(); }
+    void setAnimationEnabled(bool enabled);
 
 private:
@@ -178,4 +180,5 @@
     ObjectType m_current_object;
     bool m_animation_enabled;
+    int m_animationTimer;
 
 #ifdef QT_OPENGL_SUPPORT
Index: /trunk/demos/demos.pro
===================================================================
--- /trunk/demos/demos.pro	(revision 768)
+++ /trunk/demos/demos.pro	(revision 769)
@@ -56,4 +56,5 @@
 contains(QT_CONFIG, phonon):!static:SUBDIRS += demos_mediaplayer
 contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):!symbian:SUBDIRS += demos_browser
+contains(QT_CONFIG, multimedia):SUBDIRS += demos_spectrum
 
 # install
@@ -88,4 +89,5 @@
 demos_boxes.subdir = boxes
 demos_sub-attaq.subdir = sub-attaq
+demos_spectrum.subdir = spectrum
 
 #CONFIG += ordered
Index: /trunk/demos/embedded/anomaly/anomaly.pro
===================================================================
--- /trunk/demos/embedded/anomaly/anomaly.pro	(revision 768)
+++ /trunk/demos/embedded/anomaly/anomaly.pro	(revision 769)
@@ -28,5 +28,5 @@
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock -linsock -lconnmon
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = NetworkServices
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
Index: /trunk/demos/embedded/anomaly/src/BrowserView.cpp
===================================================================
--- /trunk/demos/embedded/anomaly/src/BrowserView.cpp	(revision 768)
+++ /trunk/demos/embedded/anomaly/src/BrowserView.cpp	(revision 769)
@@ -83,4 +83,5 @@
     connect(m_controlStrip, SIGNAL(backClicked()), m_webView, SLOT(back()));
     connect(m_controlStrip, SIGNAL(forwardClicked()), m_webView, SLOT(forward()));
+    connect(m_controlStrip, SIGNAL(closeClicked()), qApp, SLOT(quit()));
 
     QPalette pal = m_webView->palette();
Index: /trunk/demos/embedded/anomaly/src/ControlStrip.cpp
===================================================================
--- /trunk/demos/embedded/anomaly/src/ControlStrip.cpp	(revision 768)
+++ /trunk/demos/embedded/anomaly/src/ControlStrip.cpp	(revision 769)
@@ -51,4 +51,5 @@
     backPixmap.load(":/images/go-previous.png");
     forwardPixmap.load(":/images/go-next.png");
+    closePixmap.load(":/images/button-close.png");
 }
 
@@ -66,4 +67,5 @@
 {
     int h = height();
+    int spacing = qMin(h, (width() - h * 4) / 3);
     int x = event->pos().x();
 
@@ -75,4 +77,10 @@
 
     if (x > width() - h) {
+        emit closeClicked();
+        event->accept();
+        return;
+    }
+
+    if ((x < width() - (h + spacing)) && (x > width() - (h * 2 + spacing))) {
         emit forwardClicked();
         event->accept();
@@ -80,5 +88,5 @@
     }
 
-    if ((x < width() - 2 * h) && (x > width() - 3 * h)) {
+    if ((x < width() - (h * 2 + spacing * 2)) && (x > width() - (h * 3 + spacing * 2))) {
         emit backClicked();
         event->accept();
@@ -90,5 +98,6 @@
 {
     int h = height();
-    int s = (h - menuPixmap.height()) / 2;
+    int spacing = qMin(h, (width() - h * 4) / 3);
+    int s = (height() - menuPixmap.height()) / 2;
 
     QPainter p(this);
@@ -96,6 +105,8 @@
     p.setCompositionMode(QPainter::CompositionMode_SourceOver);
     p.drawPixmap(s, s, menuPixmap);
-    p.drawPixmap(width() - 3 * h + s, s, backPixmap);
-    p.drawPixmap(width() - h + s, s, forwardPixmap);
+    p.drawPixmap(width() - h + s, s, closePixmap);
+    p.drawPixmap(width() - (h * 2 + spacing) + s, s, forwardPixmap);
+    p.drawPixmap(width() - (h * 3 + spacing * 2) + s, s, backPixmap);
+
     p.end();
 }
Index: /trunk/demos/embedded/anomaly/src/ControlStrip.h
===================================================================
--- /trunk/demos/embedded/anomaly/src/ControlStrip.h	(revision 768)
+++ /trunk/demos/embedded/anomaly/src/ControlStrip.h	(revision 769)
@@ -59,4 +59,5 @@
     void backClicked();
     void forwardClicked();
+    void closeClicked();
 
 protected:
@@ -68,4 +69,5 @@
     QPixmap backPixmap;
     QPixmap forwardPixmap;
+    QPixmap closePixmap;
 };
 
Index: /trunk/demos/embedded/anomaly/src/anomaly.qrc
===================================================================
--- /trunk/demos/embedded/anomaly/src/anomaly.qrc	(revision 768)
+++ /trunk/demos/embedded/anomaly/src/anomaly.qrc	(revision 769)
@@ -6,4 +6,5 @@
         <file>images/list-add.png</file>
         <file>images/list-remove.png</file>
+        <file>images/button-close.png</file>
     </qresource>
 </RCC>
Index: /trunk/demos/embedded/desktopservices/contenttab.cpp
===================================================================
--- /trunk/demos/embedded/desktopservices/contenttab.cpp	(revision 768)
+++ /trunk/demos/embedded/desktopservices/contenttab.cpp	(revision 769)
@@ -115,18 +115,4 @@
 {
     switch (event->key()) {
-    case Qt::Key_Up:
-        if (currentRow() == 0) {
-            setCurrentRow(count() - 1);
-        } else {
-            setCurrentRow(currentRow() - 1);
-        }
-        break;
-    case Qt::Key_Down:
-        if (currentRow() == (count() - 1)) {
-            setCurrentRow(0);
-        } else {
-            setCurrentRow(currentRow() + 1);
-        }
-        break;
     case Qt::Key_Select:
         openItem(currentItem());
Index: /trunk/demos/embedded/flightinfo/flightinfo.pro
===================================================================
--- /trunk/demos/embedded/flightinfo/flightinfo.pro	(revision 768)
+++ /trunk/demos/embedded/flightinfo/flightinfo.pro	(revision 769)
@@ -10,5 +10,5 @@
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock  -lconnmon -linsock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = NetworkServices
 }
Index: /trunk/demos/embedded/fluidlauncher/config_s60/config.xml
===================================================================
--- /trunk/demos/embedded/fluidlauncher/config_s60/config.xml	(revision 768)
+++ /trunk/demos/embedded/fluidlauncher/config_s60/config.xml	(revision 769)
@@ -21,4 +21,5 @@
     <example filename="digiflip" name="Flipping Clock" image="screenshots/digiflip.png"/>
     <example filename="qmediaplayer" name="Media Player" image="screenshots/mediaplayer.png" args="-small-screen"/>
+    <example filename="spectrum" name="Spectrum Analyzer" image="screenshots/spectrum.png" args="-small-screen"/>
   </demos>
   <slideshow timeout="60000" interval="10000">
Index: /trunk/demos/embedded/fluidlauncher/fluidlauncher.pro
===================================================================
--- /trunk/demos/embedded/fluidlauncher/fluidlauncher.pro	(revision 768)
+++ /trunk/demos/embedded/fluidlauncher/fluidlauncher.pro	(revision 769)
@@ -98,4 +98,8 @@
     contains(QT_CONFIG, phonon) {
         reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/qmediaplayer_reg.rsc
+    }
+
+    contains(QT_CONFIG, multimedia) {
+        reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/spectrum_reg.rsc
     }
 
@@ -165,8 +169,10 @@
             $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.mif
 
-        # Since Fluidlauncher itself doesn't link webkit, we won't get dependency automatically
-        executables.pkg_prerules += \
-            "; Dependency to Qt Webkit" \
-            "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+        isEmpty(QT_LIBINFIX) {
+            # Since Fluidlauncher itself doesn't link webkit, we won't get dependency automatically
+            executables.pkg_prerules += \
+                "; Dependency to Qt Webkit" \
+                "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+        }
     }
 
@@ -176,4 +182,11 @@
         mifs.sources += \
             $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.mif
+    }
+
+    contains(QT_CONFIG, multimedia) {
+        executables.sources += spectrum.exe fftreal.dll
+        resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/spectrum.rsc
+        mifs.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/spectrum.mif
     }
 
Index: /trunk/demos/embedded/lightmaps/lightmaps.pro
===================================================================
--- /trunk/demos/embedded/lightmaps/lightmaps.pro	(revision 768)
+++ /trunk/demos/embedded/lightmaps/lightmaps.pro	(revision 769)
@@ -7,5 +7,5 @@
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock  -lconnmon -linsock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = NetworkServices
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
Index: /trunk/demos/embedded/weatherinfo/weatherinfo.pro
===================================================================
--- /trunk/demos/embedded/weatherinfo/weatherinfo.pro	(revision 768)
+++ /trunk/demos/embedded/weatherinfo/weatherinfo.pro	(revision 769)
@@ -9,5 +9,5 @@
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock -lconnmon -linsock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = NetworkServices
 }
Index: /trunk/demos/qtdemo/xml/examples.xml
===================================================================
--- /trunk/demos/qtdemo/xml/examples.xml	(revision 768)
+++ /trunk/demos/qtdemo/xml/examples.xml	(revision 769)
@@ -20,4 +20,5 @@
     <example filename="boxes" name="Boxes" />
     <example filename="sub-attaq" name="Sub-attaq" />
+    <example filename="spectrum" name="Spectrum Analyzer" />
   </demos>
   <category dirname="animation" name="Animation Framework">
Index: /trunk/demos/spectrum/3rdparty/fftreal/Array.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/Array.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/Array.h	(revision 769)
@@ -0,0 +1,97 @@
+/*****************************************************************************
+
+        Array.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (Array_HEADER_INCLUDED)
+#define	Array_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T, long LEN>
+class Array
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	T	DataType;
+
+						Array ();
+
+	inline const DataType &
+						operator [] (long pos) const;
+	inline DataType &
+						operator [] (long pos);
+
+	static inline long
+						size ();
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	DataType			_data_arr [LEN];
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						Array (const Array &other);
+	Array &			operator = (const Array &other);
+	bool				operator == (const Array &other);
+	bool				operator != (const Array &other);
+
+};	// class Array
+
+
+
+#include	"Array.hpp"
+
+
+
+#endif	// Array_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/Array.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/Array.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/Array.hpp	(revision 769)
@@ -0,0 +1,98 @@
+/*****************************************************************************
+
+        Array.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (Array_CURRENT_CODEHEADER)
+	#error Recursive inclusion of Array code header.
+#endif
+#define	Array_CURRENT_CODEHEADER
+
+#if ! defined (Array_CODEHEADER_INCLUDED)
+#define	Array_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	<cassert>
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T, long LEN>
+Array <T, LEN>::Array ()
+{
+	// Nothing
+}
+
+
+
+template <class T, long LEN>
+const typename Array <T, LEN>::DataType &	Array <T, LEN>::operator [] (long pos) const
+{
+	assert (pos >= 0);
+	assert (pos < LEN);
+
+	return (_data_arr [pos]);
+}
+
+
+
+template <class T, long LEN>
+typename Array <T, LEN>::DataType &	Array <T, LEN>::operator [] (long pos)
+{
+	assert (pos >= 0);
+	assert (pos < LEN);
+
+	return (_data_arr [pos]);
+}
+
+
+
+template <class T, long LEN>
+long	Array <T, LEN>::size ()
+{
+	return (LEN);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// Array_CODEHEADER_INCLUDED
+
+#undef Array_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/DynArray.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/DynArray.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/DynArray.h	(revision 769)
@@ -0,0 +1,100 @@
+/*****************************************************************************
+
+        DynArray.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (DynArray_HEADER_INCLUDED)
+#define	DynArray_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T>
+class DynArray
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	T	DataType;
+
+						DynArray ();
+	explicit			DynArray (long size);
+						~DynArray ();
+
+	inline long		size () const;
+	inline void		resize (long size);
+
+	inline const DataType &
+						operator [] (long pos) const;
+	inline DataType &
+						operator [] (long pos);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	DataType *		_data_ptr;
+	long				_len;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						DynArray (const DynArray &other);
+	DynArray &		operator = (const DynArray &other);
+	bool				operator == (const DynArray &other);
+	bool				operator != (const DynArray &other);
+
+};	// class DynArray
+
+
+
+#include	"DynArray.hpp"
+
+
+
+#endif	// DynArray_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/DynArray.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/DynArray.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/DynArray.hpp	(revision 769)
@@ -0,0 +1,143 @@
+/*****************************************************************************
+
+        DynArray.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (DynArray_CURRENT_CODEHEADER)
+	#error Recursive inclusion of DynArray code header.
+#endif
+#define	DynArray_CURRENT_CODEHEADER
+
+#if ! defined (DynArray_CODEHEADER_INCLUDED)
+#define	DynArray_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	<cassert>
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T>
+DynArray <T>::DynArray ()
+:	_data_ptr (0)
+,	_len (0)
+{
+	// Nothing
+}
+
+
+
+template <class T>
+DynArray <T>::DynArray (long size)
+:	_data_ptr (0)
+,	_len (0)
+{
+	assert (size >= 0);
+	if (size > 0)
+	{
+		_data_ptr = new DataType [size];
+		_len = size;
+	}
+}
+
+
+
+template <class T>
+DynArray <T>::~DynArray ()
+{
+	delete [] _data_ptr;
+	_data_ptr = 0;
+	_len = 0;
+}
+
+
+
+template <class T>
+long	DynArray <T>::size () const
+{
+	return (_len);
+}
+
+
+
+template <class T>
+void	DynArray <T>::resize (long size)
+{
+	assert (size >= 0);
+	if (size > 0)
+	{
+		DataType *		old_data_ptr = _data_ptr;
+		DataType *		tmp_data_ptr = new DataType [size];
+
+		_data_ptr = tmp_data_ptr;
+		_len = size;
+
+		delete [] old_data_ptr;
+	}
+}
+
+
+
+template <class T>
+const typename DynArray <T>::DataType &	DynArray <T>::operator [] (long pos) const
+{
+	assert (pos >= 0);
+	assert (pos < _len);
+
+	return (_data_ptr [pos]);
+}
+
+
+
+template <class T>
+typename DynArray <T>::DataType &	DynArray <T>::operator [] (long pos)
+{
+	assert (pos >= 0);
+	assert (pos < _len);
+
+	return (_data_ptr [pos]);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// DynArray_CODEHEADER_INCLUDED
+
+#undef DynArray_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsp	(revision 769)
@@ -0,0 +1,273 @@
+# Microsoft Developer Studio Project File - Name="FFTReal" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=FFTReal - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "FFTReal.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "FFTReal.mak" CFG="FFTReal - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "FFTReal - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "FFTReal - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "FFTReal - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GR /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "FFTReal - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /G6 /MTd /W3 /Gm /GR /GX /Zi /Od /Gf /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "FFTReal - Win32 Release"
+# Name "FFTReal - Win32 Debug"
+# Begin Group "Library"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\Array.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Array.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\def.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DynArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DynArray.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTReal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTReal.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealFixLen.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealFixLen.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealFixLenParam.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealPassDirect.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealPassDirect.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealPassInverse.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealPassInverse.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealSelect.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealSelect.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealUseTrigo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FFTRealUseTrigo.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\OscSinCos.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OscSinCos.hpp
+# End Source File
+# End Group
+# Begin Group "Test"
+
+# PROP Default_Filter ""
+# Begin Group "stopwatch"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\stopwatch\ClockCycleCounter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\ClockCycleCounter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\ClockCycleCounter.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\def.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\fnc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\fnc.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\Int64.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\StopWatch.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\StopWatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\stopwatch\StopWatch.hpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\test.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\test_fnc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\test_fnc.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\test_settings.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestAccuracy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestAccuracy.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestHelperFixLen.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestHelperFixLen.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestHelperNormal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestHelperNormal.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestSpeed.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestSpeed.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestWhiteNoiseGen.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestWhiteNoiseGen.hpp
+# End Source File
+# End Group
+# End Target
+# End Project
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsw
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsw	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.dsw	(revision 769)
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "FFTReal"=.\FFTReal.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.h	(revision 769)
@@ -0,0 +1,142 @@
+/*****************************************************************************
+
+        FFTReal.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTReal_HEADER_INCLUDED)
+#define	FFTReal_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"DynArray.h"
+#include	"OscSinCos.h"
+
+
+
+template <class DT>
+class FFTReal
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	enum {			MAX_BIT_DEPTH	= 30	};	// So length can be represented as long int
+
+	typedef	DT	DataType;
+
+	explicit			FFTReal (long length);
+	virtual			~FFTReal () {}
+
+	long				get_length () const;
+	void				do_fft (DataType f [], const DataType x []) const;
+	void				do_ifft (const DataType f [], DataType x []) const;
+	void				rescale (DataType x []) const;
+	DataType *		use_buffer () const;
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+   // Over this bit depth, we use direct calculation for sin/cos
+   enum {	      TRIGO_BD_LIMIT	= 12  };
+
+	typedef	OscSinCos <DataType>	OscType;
+
+	void				init_br_lut ();
+	void				init_trigo_lut ();
+	void				init_trigo_osc ();
+
+	FORCEINLINE const long *
+						get_br_ptr () const;
+	FORCEINLINE const DataType	*
+						get_trigo_ptr (int level) const;
+	FORCEINLINE long
+						get_trigo_level_index (int level) const;
+
+	inline void		compute_fft_general (DataType f [], const DataType x []) const;
+	inline void		compute_direct_pass_1_2 (DataType df [], const DataType x []) const;
+	inline void		compute_direct_pass_3 (DataType df [], const DataType sf []) const;
+	inline void		compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const;
+	inline void		compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
+	inline void		compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
+
+	inline void		compute_ifft_general (const DataType f [], DataType x []) const;
+	inline void		compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const;
+	inline void		compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
+	inline void		compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
+	inline void		compute_inverse_pass_3 (DataType df [], const DataType sf []) const;
+	inline void		compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const;
+
+	const long		_length;
+	const int		_nbr_bits;
+	DynArray <long>
+						_br_lut;
+	DynArray <DataType>
+						_trigo_lut;
+	mutable DynArray <DataType>
+						_buffer;
+   mutable DynArray <OscType>
+						_trigo_osc;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTReal ();
+						FFTReal (const FFTReal &other);
+	FFTReal &		operator = (const FFTReal &other);
+	bool				operator == (const FFTReal &other);
+	bool				operator != (const FFTReal &other);
+
+};	// class FFTReal
+
+
+
+#include	"FFTReal.hpp"
+
+
+
+#endif	// FFTReal_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTReal.hpp	(revision 769)
@@ -0,0 +1,916 @@
+/*****************************************************************************
+
+        FFTReal.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTReal_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTReal code header.
+#endif
+#define	FFTReal_CURRENT_CODEHEADER
+
+#if ! defined (FFTReal_CODEHEADER_INCLUDED)
+#define	FFTReal_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	<cassert>
+#include	<cmath>
+
+
+
+static inline bool	FFTReal_is_pow2 (long x)
+{
+	assert (x > 0);
+
+	return  ((x & -x) == x);
+}
+
+
+
+static inline int	FFTReal_get_next_pow2 (long x)
+{
+	--x;
+
+	int				p = 0;
+	while ((x & ~0xFFFFL) != 0)
+	{
+		p += 16;
+		x >>= 16;
+	}
+	while ((x & ~0xFL) != 0)
+	{
+		p += 4;
+		x >>= 4;
+	}
+	while (x > 0)
+	{
+		++p;
+		x >>= 1;
+	}
+
+	return (p);
+}
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*
+==============================================================================
+Name: ctor
+Input parameters:
+	- length: length of the array on which we want to do a FFT. Range: power of
+		2 only, > 0.
+Throws: std::bad_alloc
+==============================================================================
+*/
+
+template <class DT>
+FFTReal <DT>::FFTReal (long length)
+:	_length (length)
+,	_nbr_bits (FFTReal_get_next_pow2 (length))
+,	_br_lut ()
+,	_trigo_lut ()
+,	_buffer (length)
+,	_trigo_osc ()
+{
+	assert (FFTReal_is_pow2 (length));
+	assert (_nbr_bits <= MAX_BIT_DEPTH);
+
+	init_br_lut ();
+	init_trigo_lut ();
+	init_trigo_osc ();
+}
+
+
+
+/*
+==============================================================================
+Name: get_length
+Description:
+	Returns the number of points processed by this FFT object.
+Returns: The number of points, power of 2, > 0.
+Throws: Nothing
+==============================================================================
+*/
+
+template <class DT>
+long	FFTReal <DT>::get_length () const
+{
+	return (_length);
+}
+
+
+
+/*
+==============================================================================
+Name: do_fft
+Description:
+	Compute the FFT of the array.
+Input parameters:
+	- x: pointer on the source array (time).
+Output parameters:
+	- f: pointer on the destination array (frequencies).
+		f [0...length(x)/2] = real values,
+		f [length(x)/2+1...length(x)-1] = negative imaginary values of
+		coefficents 1...length(x)/2-1.
+Throws: Nothing
+==============================================================================
+*/
+
+template <class DT>
+void	FFTReal <DT>::do_fft (DataType f [], const DataType x []) const
+{
+	assert (f != 0);
+	assert (f != use_buffer ());
+	assert (x != 0);
+	assert (x != use_buffer ());
+	assert (x != f);
+
+	// General case
+	if (_nbr_bits > 2)
+	{
+		compute_fft_general (f, x);
+	}
+
+	// 4-point FFT
+	else if (_nbr_bits == 2)
+	{
+		f [1] = x [0] - x [2];
+		f [3] = x [1] - x [3];
+
+		const DataType	b_0 = x [0] + x [2];
+		const DataType	b_2 = x [1] + x [3];
+		
+		f [0] = b_0 + b_2;
+		f [2] = b_0 - b_2;
+	}
+
+	// 2-point FFT
+	else if (_nbr_bits == 1)
+	{
+		f [0] = x [0] + x [1];
+		f [1] = x [0] - x [1];
+	}
+
+	// 1-point FFT
+	else
+	{
+		f [0] = x [0];
+	}
+}
+
+
+
+/*
+==============================================================================
+Name: do_ifft
+Description:
+	Compute the inverse FFT of the array. Note that data must be post-scaled:
+	IFFT (FFT (x)) = x * length (x).
+Input parameters:
+	- f: pointer on the source array (frequencies).
+		f [0...length(x)/2] = real values
+		f [length(x)/2+1...length(x)-1] = negative imaginary values of
+		coefficents 1...length(x)/2-1.
+Output parameters:
+	- x: pointer on the destination array (time).
+Throws: Nothing
+==============================================================================
+*/
+
+template <class DT>
+void	FFTReal <DT>::do_ifft (const DataType f [], DataType x []) const
+{
+	assert (f != 0);
+	assert (f != use_buffer ());
+	assert (x != 0);
+	assert (x != use_buffer ());
+	assert (x != f);
+
+	// General case
+	if (_nbr_bits > 2)
+	{
+		compute_ifft_general (f, x);
+	}
+
+	// 4-point IFFT
+	else if (_nbr_bits == 2)
+	{
+		const DataType	b_0 = f [0] + f [2];
+		const DataType	b_2 = f [0] - f [2];
+
+		x [0] = b_0 + f [1] * 2;
+		x [2] = b_0 - f [1] * 2;
+		x [1] = b_2 + f [3] * 2;
+		x [3] = b_2 - f [3] * 2;
+	}
+
+	// 2-point IFFT
+	else if (_nbr_bits == 1)
+	{
+		x [0] = f [0] + f [1];
+		x [1] = f [0] - f [1];
+	}
+
+	// 1-point IFFT
+	else
+	{
+		x [0] = f [0];
+	}
+}
+
+
+
+/*
+==============================================================================
+Name: rescale
+Description:
+	Scale an array by divide each element by its length. This function should
+	be called after FFT + IFFT.
+Input parameters:
+	- x: pointer on array to rescale (time or frequency).
+Throws: Nothing
+==============================================================================
+*/
+
+template <class DT>
+void	FFTReal <DT>::rescale (DataType x []) const
+{
+	const DataType	mul = DataType (1.0 / _length);
+
+	if (_length < 4)
+	{
+		long				i = _length - 1;
+		do
+		{
+			x [i] *= mul;
+			--i;
+		}
+		while (i >= 0);
+	}
+
+	else
+	{
+		assert ((_length & 3) == 0);
+
+		// Could be optimized with SIMD instruction sets (needs alignment check)
+		long				i = _length - 4;
+		do
+		{
+			x [i + 0] *= mul;
+			x [i + 1] *= mul;
+			x [i + 2] *= mul;
+			x [i + 3] *= mul;
+			i -= 4;
+		}
+		while (i >= 0);
+	}
+}
+
+
+
+/*
+==============================================================================
+Name: use_buffer
+Description:
+	Access the internal buffer, whose length is the FFT one.
+	Buffer content will be erased at each do_fft() / do_ifft() call!
+	This buffer cannot be used as:
+		- source for FFT or IFFT done with this object
+		- destination for FFT or IFFT done with this object
+Returns:
+	Buffer start address
+Throws: Nothing
+==============================================================================
+*/
+
+template <class DT>
+typename FFTReal <DT>::DataType *	FFTReal <DT>::use_buffer () const
+{
+	return (&_buffer [0]);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class DT>
+void	FFTReal <DT>::init_br_lut ()
+{
+	const long		length = 1L << _nbr_bits;
+	_br_lut.resize (length);
+
+	_br_lut [0] = 0;
+	long				br_index = 0;
+	for (long cnt = 1; cnt < length; ++cnt)
+	{
+		// ++br_index (bit reversed)
+		long				bit = length >> 1;
+		while (((br_index ^= bit) & bit) == 0)
+		{
+			bit >>= 1;
+		}
+
+		_br_lut [cnt] = br_index;
+	}
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::init_trigo_lut ()
+{
+	using namespace std;
+
+	if (_nbr_bits > 3)
+	{
+		const long		total_len = (1L << (_nbr_bits - 1)) - 4;
+		_trigo_lut.resize (total_len);
+
+		for (int level = 3; level < _nbr_bits; ++level)
+		{
+			const long		level_len = 1L << (level - 1);
+			DataType	* const	level_ptr =
+				&_trigo_lut [get_trigo_level_index (level)];
+			const double	mul = PI / (level_len << 1);
+
+			for (long i = 0; i < level_len; ++ i)
+			{
+				level_ptr [i] = static_cast <DataType> (cos (i * mul));
+			}
+		}
+	}
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::init_trigo_osc ()
+{
+	const int		nbr_osc = _nbr_bits - TRIGO_BD_LIMIT;
+	if (nbr_osc > 0)
+	{
+		_trigo_osc.resize (nbr_osc);
+
+		for (int osc_cnt = 0; osc_cnt < nbr_osc; ++osc_cnt)
+		{
+			OscType &		osc = _trigo_osc [osc_cnt];
+
+			const long		len = 1L << (TRIGO_BD_LIMIT + osc_cnt);
+			const double	mul = (0.5 * PI) / len;
+			osc.set_step (mul);
+		}
+	}
+}
+
+
+
+template <class DT>
+const long *	FFTReal <DT>::get_br_ptr () const
+{
+	return (&_br_lut [0]);
+}
+
+
+
+template <class DT>
+const typename FFTReal <DT>::DataType *	FFTReal <DT>::get_trigo_ptr (int level) const
+{
+	assert (level >= 3);
+
+	return (&_trigo_lut [get_trigo_level_index (level)]);
+}
+
+
+
+template <class DT>
+long	FFTReal <DT>::get_trigo_level_index (int level) const
+{
+	assert (level >= 3);
+
+	return ((1L << (level - 1)) - 4);
+}
+
+
+
+// Transform in several passes
+template <class DT>
+void	FFTReal <DT>::compute_fft_general (DataType f [], const DataType x []) const
+{
+	assert (f != 0);
+	assert (f != use_buffer ());
+	assert (x != 0);
+	assert (x != use_buffer ());
+	assert (x != f);
+
+	DataType *		sf;
+	DataType *		df;
+
+	if ((_nbr_bits & 1) != 0)
+	{
+		df = use_buffer ();
+		sf = f;
+	}
+	else
+	{
+		df = f;
+		sf = use_buffer ();
+	}
+
+	compute_direct_pass_1_2 (df, x);
+	compute_direct_pass_3 (sf, df);
+
+	for (int pass = 3; pass < _nbr_bits; ++ pass)
+	{
+		compute_direct_pass_n (df, sf, pass);
+
+		DataType * const	temp_ptr = df;
+		df = sf;
+		sf = temp_ptr;
+	}
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_direct_pass_1_2 (DataType df [], const DataType x []) const
+{
+	assert (df != 0);
+	assert (x != 0);
+	assert (df != x);
+
+	const long * const	bit_rev_lut_ptr = get_br_ptr ();
+	long				coef_index = 0;
+	do
+	{
+		const long		rev_index_0 = bit_rev_lut_ptr [coef_index];
+		const long		rev_index_1 = bit_rev_lut_ptr [coef_index + 1];
+		const long		rev_index_2 = bit_rev_lut_ptr [coef_index + 2];
+		const long		rev_index_3 = bit_rev_lut_ptr [coef_index + 3];
+
+		DataType	* const	df2 = df + coef_index;
+		df2 [1] = x [rev_index_0] - x [rev_index_1];
+		df2 [3] = x [rev_index_2] - x [rev_index_3];
+
+		const DataType	sf_0 = x [rev_index_0] + x [rev_index_1];
+		const DataType	sf_2 = x [rev_index_2] + x [rev_index_3];
+
+		df2 [0] = sf_0 + sf_2;
+		df2 [2] = sf_0 - sf_2;
+		
+		coef_index += 4;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_direct_pass_3 (DataType df [], const DataType sf []) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+
+	const DataType	sqrt2_2 = DataType (SQRT2 * 0.5);
+	long				coef_index = 0;
+	do
+	{
+		DataType			v;
+
+		df [coef_index] = sf [coef_index] + sf [coef_index + 4];
+		df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
+		df [coef_index + 2] = sf [coef_index + 2];
+		df [coef_index + 6] = sf [coef_index + 6];
+
+		v = (sf [coef_index + 5] - sf [coef_index + 7]) * sqrt2_2;
+		df [coef_index + 1] = sf [coef_index + 1] + v;
+		df [coef_index + 3] = sf [coef_index + 1] - v;
+
+		v = (sf [coef_index + 5] + sf [coef_index + 7]) * sqrt2_2;
+		df [coef_index + 5] = v + sf [coef_index + 3];
+		df [coef_index + 7] = v - sf [coef_index + 3];
+
+		coef_index += 8;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass >= 3);
+	assert (pass < _nbr_bits);
+
+	if (pass <= TRIGO_BD_LIMIT)
+	{
+		compute_direct_pass_n_lut (df, sf, pass);
+	}
+	else
+	{
+		compute_direct_pass_n_osc (df, sf, pass);
+	}
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass >= 3);
+	assert (pass < _nbr_bits);
+
+	const long		nbr_coef = 1 << pass;
+	const long		h_nbr_coef = nbr_coef >> 1;
+	const long		d_nbr_coef = nbr_coef << 1;
+	long				coef_index = 0;
+	const DataType	* const	cos_ptr = get_trigo_ptr (pass);
+	do
+	{
+		const DataType	* const	sf1r = sf + coef_index;
+		const DataType	* const	sf2r = sf1r + nbr_coef;
+		DataType			* const	dfr = df + coef_index;
+		DataType			* const	dfi = dfr + nbr_coef;
+
+		// Extreme coefficients are always real
+		dfr [0] = sf1r [0] + sf2r [0];
+		dfi [0] = sf1r [0] - sf2r [0];	// dfr [nbr_coef] =
+		dfr [h_nbr_coef] = sf1r [h_nbr_coef];
+		dfi [h_nbr_coef] = sf2r [h_nbr_coef];
+
+		// Others are conjugate complex numbers
+		const DataType * const	sf1i = sf1r + h_nbr_coef;
+		const DataType * const	sf2i = sf1i + nbr_coef;
+		for (long i = 1; i < h_nbr_coef; ++ i)
+		{
+			const DataType	c = cos_ptr [i];					// cos (i*PI/nbr_coef);
+			const DataType	s = cos_ptr [h_nbr_coef - i];	// sin (i*PI/nbr_coef);
+			DataType	 		v;
+
+			v = sf2r [i] * c - sf2i [i] * s;
+			dfr [i] = sf1r [i] + v;
+			dfi [-i] = sf1r [i] - v;	// dfr [nbr_coef - i] =
+
+			v = sf2r [i] * s + sf2i [i] * c;
+			dfi [i] = v + sf1i [i];
+			dfi [nbr_coef - i] = v - sf1i [i];
+		}
+
+		coef_index += d_nbr_coef;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass > TRIGO_BD_LIMIT);
+	assert (pass < _nbr_bits);
+
+	const long		nbr_coef = 1 << pass;
+	const long		h_nbr_coef = nbr_coef >> 1;
+	const long		d_nbr_coef = nbr_coef << 1;
+	long				coef_index = 0;
+	OscType &		osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
+	do
+	{
+		const DataType	* const	sf1r = sf + coef_index;
+		const DataType	* const	sf2r = sf1r + nbr_coef;
+		DataType			* const	dfr = df + coef_index;
+		DataType			* const	dfi = dfr + nbr_coef;
+
+		osc.clear_buffers ();
+
+		// Extreme coefficients are always real
+		dfr [0] = sf1r [0] + sf2r [0];
+		dfi [0] = sf1r [0] - sf2r [0];	// dfr [nbr_coef] =
+		dfr [h_nbr_coef] = sf1r [h_nbr_coef];
+		dfi [h_nbr_coef] = sf2r [h_nbr_coef];
+
+		// Others are conjugate complex numbers
+		const DataType * const	sf1i = sf1r + h_nbr_coef;
+		const DataType * const	sf2i = sf1i + nbr_coef;
+		for (long i = 1; i < h_nbr_coef; ++ i)
+		{
+			osc.step ();
+			const DataType	c = osc.get_cos ();
+			const DataType	s = osc.get_sin ();
+			DataType	 		v;
+
+			v = sf2r [i] * c - sf2i [i] * s;
+			dfr [i] = sf1r [i] + v;
+			dfi [-i] = sf1r [i] - v;	// dfr [nbr_coef - i] =
+
+			v = sf2r [i] * s + sf2i [i] * c;
+			dfi [i] = v + sf1i [i];
+			dfi [nbr_coef - i] = v - sf1i [i];
+		}
+
+		coef_index += d_nbr_coef;
+	}
+	while (coef_index < _length);
+}
+
+
+
+// Transform in several pass
+template <class DT>
+void	FFTReal <DT>::compute_ifft_general (const DataType f [], DataType x []) const
+{
+	assert (f != 0);
+	assert (f != use_buffer ());
+	assert (x != 0);
+	assert (x != use_buffer ());
+	assert (x != f);
+
+	DataType *		sf = const_cast <DataType *> (f);
+	DataType *		df;
+	DataType *		df_temp;
+
+	if (_nbr_bits & 1)
+	{
+		df = use_buffer ();
+		df_temp = x;
+	}
+	else
+	{
+		df = x;
+		df_temp = use_buffer ();
+	}
+
+	for (int pass = _nbr_bits - 1; pass >= 3; -- pass)
+	{
+		compute_inverse_pass_n (df, sf, pass);
+
+		if (pass < _nbr_bits - 1)
+		{
+			DataType	* const	temp_ptr = df;
+			df = sf;
+			sf = temp_ptr;
+		}
+		else
+		{
+			sf = df;
+			df = df_temp;
+		}
+	}
+
+	compute_inverse_pass_3 (df, sf);
+	compute_inverse_pass_1_2 (x, df);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass >= 3);
+	assert (pass < _nbr_bits);
+
+	if (pass <= TRIGO_BD_LIMIT)
+	{
+		compute_inverse_pass_n_lut (df, sf, pass);
+	}
+	else
+	{
+		compute_inverse_pass_n_osc (df, sf, pass);
+	}
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass >= 3);
+	assert (pass < _nbr_bits);
+
+	const long		nbr_coef = 1 << pass;
+	const long		h_nbr_coef = nbr_coef >> 1;
+	const long		d_nbr_coef = nbr_coef << 1;
+	long				coef_index = 0;
+	const DataType * const	cos_ptr = get_trigo_ptr (pass);
+	do
+	{
+		const DataType	* const	sfr = sf + coef_index;
+		const DataType	* const	sfi = sfr + nbr_coef;
+		DataType			* const	df1r = df + coef_index;
+		DataType			* const	df2r = df1r + nbr_coef;
+
+		// Extreme coefficients are always real
+		df1r [0] = sfr [0] + sfi [0];		// + sfr [nbr_coef]
+		df2r [0] = sfr [0] - sfi [0];		// - sfr [nbr_coef]
+		df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
+		df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
+
+		// Others are conjugate complex numbers
+		DataType * const	df1i = df1r + h_nbr_coef;
+		DataType * const	df2i = df1i + nbr_coef;
+		for (long i = 1; i < h_nbr_coef; ++ i)
+		{
+			df1r [i] = sfr [i] + sfi [-i];		// + sfr [nbr_coef - i]
+			df1i [i] = sfi [i] - sfi [nbr_coef - i];
+
+			const DataType	c = cos_ptr [i];					// cos (i*PI/nbr_coef);
+			const DataType	s = cos_ptr [h_nbr_coef - i];	// sin (i*PI/nbr_coef);
+			const DataType	vr = sfr [i] - sfi [-i];		// - sfr [nbr_coef - i]
+			const DataType	vi = sfi [i] + sfi [nbr_coef - i];
+
+			df2r [i] = vr * c + vi * s;
+			df2i [i] = vi * c - vr * s;
+		}
+
+		coef_index += d_nbr_coef;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+	assert (pass > TRIGO_BD_LIMIT);
+	assert (pass < _nbr_bits);
+
+	const long		nbr_coef = 1 << pass;
+	const long		h_nbr_coef = nbr_coef >> 1;
+	const long		d_nbr_coef = nbr_coef << 1;
+	long				coef_index = 0;
+	OscType &		osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
+	do
+	{
+		const DataType	* const	sfr = sf + coef_index;
+		const DataType	* const	sfi = sfr + nbr_coef;
+		DataType			* const	df1r = df + coef_index;
+		DataType			* const	df2r = df1r + nbr_coef;
+
+		osc.clear_buffers ();
+
+		// Extreme coefficients are always real
+		df1r [0] = sfr [0] + sfi [0];		// + sfr [nbr_coef]
+		df2r [0] = sfr [0] - sfi [0];		// - sfr [nbr_coef]
+		df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
+		df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
+
+		// Others are conjugate complex numbers
+		DataType * const	df1i = df1r + h_nbr_coef;
+		DataType * const	df2i = df1i + nbr_coef;
+		for (long i = 1; i < h_nbr_coef; ++ i)
+		{
+			df1r [i] = sfr [i] + sfi [-i];		// + sfr [nbr_coef - i]
+			df1i [i] = sfi [i] - sfi [nbr_coef - i];
+
+			osc.step ();
+			const DataType	c = osc.get_cos ();
+			const DataType	s = osc.get_sin ();
+			const DataType	vr = sfr [i] - sfi [-i];		// - sfr [nbr_coef - i]
+			const DataType	vi = sfi [i] + sfi [nbr_coef - i];
+
+			df2r [i] = vr * c + vi * s;
+			df2i [i] = vi * c - vr * s;
+		}
+
+		coef_index += d_nbr_coef;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_inverse_pass_3 (DataType df [], const DataType sf []) const
+{
+	assert (df != 0);
+	assert (sf != 0);
+	assert (df != sf);
+
+	const DataType	sqrt2_2 = DataType (SQRT2 * 0.5);
+	long				coef_index = 0;
+	do
+	{
+		df [coef_index] = sf [coef_index] + sf [coef_index + 4];
+		df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
+		df [coef_index + 2] = sf [coef_index + 2] * 2;
+		df [coef_index + 6] = sf [coef_index + 6] * 2;
+
+		df [coef_index + 1] = sf [coef_index + 1] + sf [coef_index + 3];
+		df [coef_index + 3] = sf [coef_index + 5] - sf [coef_index + 7];
+
+		const DataType	vr = sf [coef_index + 1] - sf [coef_index + 3];
+		const DataType	vi = sf [coef_index + 5] + sf [coef_index + 7];
+
+		df [coef_index + 5] = (vr + vi) * sqrt2_2;
+		df [coef_index + 7] = (vi - vr) * sqrt2_2;
+
+		coef_index += 8;
+	}
+	while (coef_index < _length);
+}
+
+
+
+template <class DT>
+void	FFTReal <DT>::compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const
+{
+	assert (x != 0);
+	assert (sf != 0);
+	assert (x != sf);
+
+	const long *	bit_rev_lut_ptr = get_br_ptr ();
+	const DataType *	sf2 = sf;
+	long				coef_index = 0;
+	do
+	{
+		{
+			const DataType	b_0 = sf2 [0] + sf2 [2];
+			const DataType	b_2 = sf2 [0] - sf2 [2];
+			const DataType	b_1 = sf2 [1] * 2;
+			const DataType	b_3 = sf2 [3] * 2;
+
+			x [bit_rev_lut_ptr [0]] = b_0 + b_1;
+			x [bit_rev_lut_ptr [1]] = b_0 - b_1;
+			x [bit_rev_lut_ptr [2]] = b_2 + b_3;
+			x [bit_rev_lut_ptr [3]] = b_2 - b_3;
+		}
+		{
+			const DataType	b_0 = sf2 [4] + sf2 [6];
+			const DataType	b_2 = sf2 [4] - sf2 [6];
+			const DataType	b_1 = sf2 [5] * 2;
+			const DataType	b_3 = sf2 [7] * 2;
+
+			x [bit_rev_lut_ptr [4]] = b_0 + b_1;
+			x [bit_rev_lut_ptr [5]] = b_0 - b_1;
+			x [bit_rev_lut_ptr [6]] = b_2 + b_3;
+			x [bit_rev_lut_ptr [7]] = b_2 - b_3;
+		}
+
+		sf2 += 8;
+		coef_index += 8;
+		bit_rev_lut_ptr += 8;
+	}
+	while (coef_index < _length);
+}
+
+
+
+#endif	// FFTReal_CODEHEADER_INCLUDED
+
+#undef FFTReal_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.h	(revision 769)
@@ -0,0 +1,130 @@
+/*****************************************************************************
+
+        FFTRealFixLen.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealFixLen_HEADER_INCLUDED)
+#define	FFTRealFixLen_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"Array.h"
+#include	"DynArray.h"
+#include	"FFTRealFixLenParam.h"
+#include	"OscSinCos.h"
+
+
+
+template <int LL2>
+class FFTRealFixLen
+{
+	typedef	int	CompileTimeCheck1 [(LL2 >=  0) ? 1 : -1];
+	typedef	int	CompileTimeCheck2 [(LL2 <= 30) ? 1 : -1];
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+   typedef	FFTRealFixLenParam::DataType   DataType;
+	typedef	OscSinCos <DataType>	OscType;
+
+	enum {			FFT_LEN_L2	= LL2	};
+	enum {			FFT_LEN		= 1 << FFT_LEN_L2	};
+
+						FFTRealFixLen ();
+
+	inline long		get_length () const;
+	void				do_fft (DataType f [], const DataType x []);
+	void				do_ifft (const DataType f [], DataType x []);
+	void				rescale (DataType x []) const;
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	enum {			TRIGO_BD_LIMIT	= FFTRealFixLenParam::TRIGO_BD_LIMIT	};
+
+	enum {			BR_ARR_SIZE_L2	= ((FFT_LEN_L2 - 3) < 0) ? 0 : (FFT_LEN_L2 - 2)	};
+	enum {			BR_ARR_SIZE		= 1 << BR_ARR_SIZE_L2	};
+
+   enum {			TRIGO_BD			=   ((FFT_LEN_L2 - TRIGO_BD_LIMIT) < 0)
+											  ? (int)FFT_LEN_L2
+											  : (int)TRIGO_BD_LIMIT };
+	enum {			TRIGO_TABLE_ARR_SIZE_L2	= (LL2 < 4) ? 0 : (TRIGO_BD - 2)	};
+	enum {			TRIGO_TABLE_ARR_SIZE	= 1 << TRIGO_TABLE_ARR_SIZE_L2	};
+
+	enum {			NBR_TRIGO_OSC			= FFT_LEN_L2 - TRIGO_BD	};
+	enum {			TRIGO_OSC_ARR_SIZE	=	(NBR_TRIGO_OSC > 0) ? NBR_TRIGO_OSC : 1	};
+
+	void				build_br_lut ();
+	void				build_trigo_lut ();
+	void				build_trigo_osc ();
+
+	DynArray <DataType>
+						_buffer;
+	DynArray <long>
+						_br_data;
+	DynArray <DataType>
+						_trigo_data;
+   Array <OscType, TRIGO_OSC_ARR_SIZE>
+						_trigo_osc;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTRealFixLen (const FFTRealFixLen &other);
+	FFTRealFixLen&	operator = (const FFTRealFixLen &other);
+	bool				operator == (const FFTRealFixLen &other);
+	bool				operator != (const FFTRealFixLen &other);
+
+};	// class FFTRealFixLen
+
+
+
+#include	"FFTRealFixLen.hpp"
+
+
+
+#endif	// FFTRealFixLen_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp	(revision 769)
@@ -0,0 +1,322 @@
+/*****************************************************************************
+
+        FFTRealFixLen.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTRealFixLen_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTRealFixLen code header.
+#endif
+#define	FFTRealFixLen_CURRENT_CODEHEADER
+
+#if ! defined (FFTRealFixLen_CODEHEADER_INCLUDED)
+#define	FFTRealFixLen_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"FFTRealPassDirect.h"
+#include	"FFTRealPassInverse.h"
+#include	"FFTRealSelect.h"
+
+#include	<cassert>
+#include	<cmath>
+
+namespace std { }
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int LL2>
+FFTRealFixLen <LL2>::FFTRealFixLen ()
+:	_buffer (FFT_LEN)
+,	_br_data (BR_ARR_SIZE)
+,	_trigo_data (TRIGO_TABLE_ARR_SIZE)
+,	_trigo_osc ()
+{
+	build_br_lut ();
+	build_trigo_lut ();
+	build_trigo_osc ();
+}
+
+
+
+template <int LL2>
+long	FFTRealFixLen <LL2>::get_length () const
+{
+	return (FFT_LEN);
+}
+
+
+
+// General case
+template <int LL2>
+void	FFTRealFixLen <LL2>::do_fft (DataType f [], const DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+	assert (FFT_LEN_L2 >= 3);
+
+	// Do the transform in several passes
+	const DataType	*	cos_ptr = &_trigo_data [0];
+	const long *	br_ptr = &_br_data [0];
+
+	FFTRealPassDirect <FFT_LEN_L2 - 1>::process (
+		FFT_LEN,
+		f,
+		&_buffer [0],
+		x,
+		cos_ptr,
+		TRIGO_TABLE_ARR_SIZE,
+		br_ptr,
+		&_trigo_osc [0]
+	);
+}
+
+// 4-point FFT
+template <>
+void	FFTRealFixLen <2>::do_fft (DataType f [], const DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+
+	f [1] = x [0] - x [2];
+	f [3] = x [1] - x [3];
+
+	const DataType	b_0 = x [0] + x [2];
+	const DataType	b_2 = x [1] + x [3];
+	
+	f [0] = b_0 + b_2;
+	f [2] = b_0 - b_2;
+}
+
+// 2-point FFT
+template <>
+void	FFTRealFixLen <1>::do_fft (DataType f [], const DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+
+	f [0] = x [0] + x [1];
+	f [1] = x [0] - x [1];
+}
+
+// 1-point FFT
+template <>
+void	FFTRealFixLen <0>::do_fft (DataType f [], const DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+
+	f [0] = x [0];
+}
+
+
+
+// General case
+template <int LL2>
+void	FFTRealFixLen <LL2>::do_ifft (const DataType f [], DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+	assert (FFT_LEN_L2 >= 3);
+
+	// Do the transform in several passes
+	DataType *		s_ptr =
+		FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (&_buffer [0], x);
+	DataType *		d_ptr =
+		FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (x, &_buffer [0]);
+	const DataType	*	cos_ptr = &_trigo_data [0];
+	const long *	br_ptr = &_br_data [0];
+
+	FFTRealPassInverse <FFT_LEN_L2 - 1>::process (
+		FFT_LEN,
+		d_ptr,
+		s_ptr,
+		f,
+		cos_ptr,
+		TRIGO_TABLE_ARR_SIZE,
+		br_ptr,
+		&_trigo_osc [0]
+	);
+}
+
+// 4-point IFFT
+template <>
+void	FFTRealFixLen <2>::do_ifft (const DataType f [], DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+
+	const DataType	b_0 = f [0] + f [2];
+	const DataType	b_2 = f [0] - f [2];
+
+	x [0] = b_0 + f [1] * 2;
+	x [2] = b_0 - f [1] * 2;
+	x [1] = b_2 + f [3] * 2;
+	x [3] = b_2 - f [3] * 2;
+}
+
+// 2-point IFFT
+template <>
+void	FFTRealFixLen <1>::do_ifft (const DataType f [], DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+
+	x [0] = f [0] + f [1];
+	x [1] = f [0] - f [1];
+}
+
+// 1-point IFFT
+template <>
+void	FFTRealFixLen <0>::do_ifft (const DataType f [], DataType x [])
+{
+	assert (f != 0);
+	assert (x != 0);
+	assert (x != f);
+
+	x [0] = f [0];
+}
+
+
+
+
+template <int LL2>
+void	FFTRealFixLen <LL2>::rescale (DataType x []) const
+{
+	assert (x != 0);
+
+	const DataType	mul = DataType (1.0 / FFT_LEN);
+
+	if (FFT_LEN < 4)
+	{
+		long				i = FFT_LEN - 1;
+		do
+		{
+			x [i] *= mul;
+			--i;
+		}
+		while (i >= 0);
+	}
+
+	else
+	{
+		assert ((FFT_LEN & 3) == 0);
+
+		// Could be optimized with SIMD instruction sets (needs alignment check)
+		long				i = FFT_LEN - 4;
+		do
+		{
+			x [i + 0] *= mul;
+			x [i + 1] *= mul;
+			x [i + 2] *= mul;
+			x [i + 3] *= mul;
+			i -= 4;
+		}
+		while (i >= 0);
+	}
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int LL2>
+void	FFTRealFixLen <LL2>::build_br_lut ()
+{
+	_br_data [0] = 0;
+	for (long cnt = 1; cnt < BR_ARR_SIZE; ++cnt)
+	{
+		long				index = cnt << 2;
+		long				br_index = 0;
+
+		int				bit_cnt = FFT_LEN_L2;
+		do
+		{
+			br_index <<= 1;
+			br_index += (index & 1);
+			index >>= 1;
+
+			-- bit_cnt;
+		}
+		while (bit_cnt > 0);
+
+		_br_data [cnt] = br_index;
+	}
+}
+
+
+
+template <int LL2>
+void	FFTRealFixLen <LL2>::build_trigo_lut ()
+{
+	const double	mul = (0.5 * PI) / TRIGO_TABLE_ARR_SIZE;
+	for (long i = 0; i < TRIGO_TABLE_ARR_SIZE; ++ i)
+	{
+		using namespace std;
+
+		_trigo_data [i] = DataType (cos (i * mul));
+	}
+}
+
+
+
+template <int LL2>
+void	FFTRealFixLen <LL2>::build_trigo_osc ()
+{
+	for (int i = 0; i < NBR_TRIGO_OSC; ++i)
+	{
+		OscType &		osc = _trigo_osc [i];
+
+		const long		len = static_cast <long> (TRIGO_TABLE_ARR_SIZE) << (i + 1);
+		const double	mul = (0.5 * PI) / len;
+		osc.set_step (mul);
+	}
+}
+
+
+
+#endif	// FFTRealFixLen_CODEHEADER_INCLUDED
+
+#undef FFTRealFixLen_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h	(revision 769)
@@ -0,0 +1,93 @@
+/*****************************************************************************
+
+        FFTRealFixLenParam.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealFixLenParam_HEADER_INCLUDED)
+#define	FFTRealFixLenParam_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+class FFTRealFixLenParam
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+   // Over this bit depth, we use direct calculation for sin/cos
+   enum {	      TRIGO_BD_LIMIT	= 12  };
+
+	typedef	float	DataType;
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+#if 0	// To avoid GCC warning:
+		// All member functions in class 'FFTRealFixLenParam' are private
+						FFTRealFixLenParam ();
+						~FFTRealFixLenParam ();
+						FFTRealFixLenParam (const FFTRealFixLenParam &other);
+	FFTRealFixLenParam &
+						operator = (const FFTRealFixLenParam &other);
+	bool				operator == (const FFTRealFixLenParam &other);
+	bool				operator != (const FFTRealFixLenParam &other);
+#endif
+
+};	// class FFTRealFixLenParam
+
+
+
+//#include	"FFTRealFixLenParam.hpp"
+
+
+
+#endif	// FFTRealFixLenParam_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.h	(revision 769)
@@ -0,0 +1,96 @@
+/*****************************************************************************
+
+        FFTRealPassDirect.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealPassDirect_HEADER_INCLUDED)
+#define	FFTRealPassDirect_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"FFTRealFixLenParam.h"
+#include	"OscSinCos.h"
+
+
+
+template <int PASS>
+class FFTRealPassDirect
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+   typedef	FFTRealFixLenParam::DataType	DataType;
+	typedef	OscSinCos <DataType>	OscType;
+
+	FORCEINLINE static void
+						process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTRealPassDirect ();
+						~FFTRealPassDirect ();
+						FFTRealPassDirect (const FFTRealPassDirect &other);
+	FFTRealPassDirect &
+						operator = (const FFTRealPassDirect &other);
+	bool				operator == (const FFTRealPassDirect &other);
+	bool				operator != (const FFTRealPassDirect &other);
+
+};	// class FFTRealPassDirect
+
+
+
+#include	"FFTRealPassDirect.hpp"
+
+
+
+#endif	// FFTRealPassDirect_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp	(revision 769)
@@ -0,0 +1,204 @@
+/*****************************************************************************
+
+        FFTRealPassDirect.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTRealPassDirect_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTRealPassDirect code header.
+#endif
+#define	FFTRealPassDirect_CURRENT_CODEHEADER
+
+#if ! defined (FFTRealPassDirect_CODEHEADER_INCLUDED)
+#define	FFTRealPassDirect_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"FFTRealUseTrigo.h"
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <>
+void	FFTRealPassDirect <1>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// First and second pass at once
+	const long		qlen = len >> 2;
+
+	long				coef_index = 0;
+	do
+	{
+		// To do: unroll the loop (2x).
+		const long		ri_0 = br_ptr [coef_index >> 2];
+		const long		ri_1 = ri_0 + 2 * qlen;	// bit_rev_lut_ptr [coef_index + 1];
+		const long		ri_2 = ri_0 + 1 * qlen;	// bit_rev_lut_ptr [coef_index + 2];
+		const long		ri_3 = ri_0 + 3 * qlen;	// bit_rev_lut_ptr [coef_index + 3];
+
+		DataType	* const	df2 = dest_ptr + coef_index;
+		df2 [1] = x_ptr [ri_0] - x_ptr [ri_1];
+		df2 [3] = x_ptr [ri_2] - x_ptr [ri_3];
+
+		const DataType	sf_0 = x_ptr [ri_0] + x_ptr [ri_1];
+		const DataType	sf_2 = x_ptr [ri_2] + x_ptr [ri_3];
+
+		df2 [0] = sf_0 + sf_2;
+		df2 [2] = sf_0 - sf_2;
+
+		coef_index += 4;
+	}
+	while (coef_index < len);
+}
+
+template <>
+void	FFTRealPassDirect <2>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// Executes "previous" passes first. Inverts source and destination buffers
+	FFTRealPassDirect <1>::process (
+		len,
+		src_ptr,
+		dest_ptr,
+		x_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+
+	// Third pass
+	const DataType	sqrt2_2 = DataType (SQRT2 * 0.5);
+
+	long				coef_index = 0;
+	do
+	{
+		dest_ptr [coef_index    ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
+		dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
+		dest_ptr [coef_index + 2] = src_ptr [coef_index + 2];
+		dest_ptr [coef_index + 6] = src_ptr [coef_index + 6];
+
+		DataType			v;
+
+		v = (src_ptr [coef_index + 5] - src_ptr [coef_index + 7]) * sqrt2_2;
+		dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + v;
+		dest_ptr [coef_index + 3] = src_ptr [coef_index + 1] - v;
+
+		v = (src_ptr [coef_index + 5] + src_ptr [coef_index + 7]) * sqrt2_2;
+		dest_ptr [coef_index + 5] = v + src_ptr [coef_index + 3];
+		dest_ptr [coef_index + 7] = v - src_ptr [coef_index + 3];
+
+		coef_index += 8;
+	}
+	while (coef_index < len);
+}
+
+template <int PASS>
+void	FFTRealPassDirect <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// Executes "previous" passes first. Inverts source and destination buffers
+	FFTRealPassDirect <PASS - 1>::process (
+		len,
+		src_ptr,
+		dest_ptr,
+		x_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+
+	const long		dist = 1L << (PASS - 1);
+	const long		c1_r = 0;
+	const long		c1_i = dist;
+	const long		c2_r = dist * 2;
+	const long		c2_i = dist * 3;
+	const long		cend = dist * 4;
+	const long		table_step = cos_len >> (PASS - 1);
+
+   enum {	TRIGO_OSC		= PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT	};
+	enum {	TRIGO_DIRECT	= (TRIGO_OSC >= 0) ? 1 : 0	};
+
+	long				coef_index = 0;
+	do
+	{
+		const DataType	* const	sf = src_ptr + coef_index;
+		DataType			* const	df = dest_ptr + coef_index;
+
+		// Extreme coefficients are always real
+		df [c1_r] = sf [c1_r] + sf [c2_r];
+		df [c2_r] = sf [c1_r] - sf [c2_r];
+		df [c1_i] = sf [c1_i];
+		df [c2_i] = sf [c2_i];
+
+		FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
+
+		// Others are conjugate complex numbers
+		for (long i = 1; i < dist; ++ i)
+		{
+			DataType			c;
+			DataType			s;
+			FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
+				osc_list [TRIGO_OSC],
+				c,
+				s,
+				cos_ptr,
+				i * table_step,
+				(dist - i) * table_step
+			);
+
+			const DataType	sf_r_i = sf [c1_r + i];
+			const DataType	sf_i_i = sf [c1_i + i];
+
+			const DataType	v1 = sf [c2_r + i] * c - sf [c2_i + i] * s;
+			df [c1_r + i] = sf_r_i + v1;
+			df [c2_r - i] = sf_r_i - v1;
+
+			const DataType	v2 = sf [c2_r + i] * s + sf [c2_i + i] * c;
+			df [c2_r + i] = v2 + sf_i_i;
+			df [cend - i] = v2 - sf_i_i;
+		}
+
+		coef_index += cend;
+	}
+	while (coef_index < len);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// FFTRealPassDirect_CODEHEADER_INCLUDED
+
+#undef FFTRealPassDirect_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.h	(revision 769)
@@ -0,0 +1,101 @@
+/*****************************************************************************
+
+        FFTRealPassInverse.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealPassInverse_HEADER_INCLUDED)
+#define	FFTRealPassInverse_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"FFTRealFixLenParam.h"
+#include	"OscSinCos.h"
+
+
+
+
+template <int PASS>
+class FFTRealPassInverse
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+   typedef	FFTRealFixLenParam::DataType	DataType;
+	typedef	OscSinCos <DataType>	OscType;
+
+	FORCEINLINE static void
+						process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
+	FORCEINLINE static void
+						process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
+	FORCEINLINE static void
+						process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTRealPassInverse ();
+						~FFTRealPassInverse ();
+						FFTRealPassInverse (const FFTRealPassInverse &other);
+	FFTRealPassInverse &
+						operator = (const FFTRealPassInverse &other);
+	bool				operator == (const FFTRealPassInverse &other);
+	bool				operator != (const FFTRealPassInverse &other);
+
+};	// class FFTRealPassInverse
+
+
+
+#include	"FFTRealPassInverse.hpp"
+
+
+
+#endif	// FFTRealPassInverse_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp	(revision 769)
@@ -0,0 +1,229 @@
+/*****************************************************************************
+
+        FFTRealPassInverse.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTRealPassInverse_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTRealPassInverse code header.
+#endif
+#define	FFTRealPassInverse_CURRENT_CODEHEADER
+
+#if ! defined (FFTRealPassInverse_CODEHEADER_INCLUDED)
+#define	FFTRealPassInverse_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"FFTRealUseTrigo.h"
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int PASS>
+void	FFTRealPassInverse <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	process_internal (
+		len,
+		dest_ptr,
+		f_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+	FFTRealPassInverse <PASS - 1>::process_rec (
+		len,
+		src_ptr,
+		dest_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+}
+
+
+
+template <int PASS>
+void	FFTRealPassInverse <PASS>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	process_internal (
+		len,
+		dest_ptr,
+		src_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+	FFTRealPassInverse <PASS - 1>::process_rec (
+		len,
+		src_ptr,
+		dest_ptr,
+		cos_ptr,
+		cos_len,
+		br_ptr,
+		osc_list
+	);
+}
+
+template <>
+void	FFTRealPassInverse <0>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// Stops recursion
+}
+
+
+
+template <int PASS>
+void	FFTRealPassInverse <PASS>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	const long		dist = 1L << (PASS - 1);
+	const long		c1_r = 0;
+	const long		c1_i = dist;
+	const long		c2_r = dist * 2;
+	const long		c2_i = dist * 3;
+	const long		cend = dist * 4;
+	const long		table_step = cos_len >> (PASS - 1);
+
+   enum {	TRIGO_OSC		= PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT	};
+	enum {	TRIGO_DIRECT	= (TRIGO_OSC >= 0) ? 1 : 0	};
+
+	long				coef_index = 0;
+	do
+	{
+		const DataType	* const	sf = src_ptr + coef_index;
+		DataType			* const	df = dest_ptr + coef_index;
+
+		// Extreme coefficients are always real
+		df [c1_r] = sf [c1_r] + sf [c2_r];
+		df [c2_r] = sf [c1_r] - sf [c2_r];
+		df [c1_i] = sf [c1_i] * 2;
+		df [c2_i] = sf [c2_i] * 2;
+
+		FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
+
+		// Others are conjugate complex numbers
+		for (long i = 1; i < dist; ++ i)
+		{
+			df [c1_r + i] = sf [c1_r + i] + sf [c2_r - i];
+			df [c1_i + i] = sf [c2_r + i] - sf [cend - i];
+
+			DataType			c;
+			DataType			s;
+			FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
+				osc_list [TRIGO_OSC],
+				c,
+				s,
+				cos_ptr,
+				i * table_step,
+				(dist - i) * table_step
+			);
+
+			const DataType	vr = sf [c1_r + i] - sf [c2_r - i];
+			const DataType	vi = sf [c2_r + i] + sf [cend - i];
+
+			df [c2_r + i] = vr * c + vi * s;
+			df [c2_i + i] = vi * c - vr * s;
+		}
+
+		coef_index += cend;
+	}
+	while (coef_index < len);
+}
+
+template <>
+void	FFTRealPassInverse <2>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// Antepenultimate pass
+	const DataType	sqrt2_2 = DataType (SQRT2 * 0.5);
+
+	long				coef_index = 0;
+	do
+	{
+		dest_ptr [coef_index    ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
+		dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
+		dest_ptr [coef_index + 2] = src_ptr [coef_index + 2] * 2;
+		dest_ptr [coef_index + 6] = src_ptr [coef_index + 6] * 2;
+
+		dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + src_ptr [coef_index + 3];
+		dest_ptr [coef_index + 3] = src_ptr [coef_index + 5] - src_ptr [coef_index + 7];
+
+		const DataType	vr = src_ptr [coef_index + 1] - src_ptr [coef_index + 3];
+		const DataType	vi = src_ptr [coef_index + 5] + src_ptr [coef_index + 7];
+
+		dest_ptr [coef_index + 5] = (vr + vi) * sqrt2_2;
+		dest_ptr [coef_index + 7] = (vi - vr) * sqrt2_2;
+
+		coef_index += 8;
+	}
+	while (coef_index < len);
+}
+
+template <>
+void	FFTRealPassInverse <1>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
+{
+	// Penultimate and last pass at once
+	const long		qlen = len >> 2;
+
+	long				coef_index = 0;
+	do
+	{
+		const long		ri_0 = br_ptr [coef_index >> 2];
+
+		const DataType	b_0 = src_ptr [coef_index    ] + src_ptr [coef_index + 2];
+		const DataType	b_2 = src_ptr [coef_index    ] - src_ptr [coef_index + 2];
+		const DataType	b_1 = src_ptr [coef_index + 1] * 2;
+		const DataType	b_3 = src_ptr [coef_index + 3] * 2;
+
+		dest_ptr [ri_0           ] = b_0 + b_1;
+		dest_ptr [ri_0 + 2 * qlen] = b_0 - b_1;
+		dest_ptr [ri_0 + 1 * qlen] = b_2 + b_3;
+		dest_ptr [ri_0 + 3 * qlen] = b_2 - b_3;
+
+		coef_index += 4;
+	}
+	while (coef_index < len);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// FFTRealPassInverse_CODEHEADER_INCLUDED
+
+#undef FFTRealPassInverse_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.h	(revision 769)
@@ -0,0 +1,77 @@
+/*****************************************************************************
+
+        FFTRealSelect.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealSelect_HEADER_INCLUDED)
+#define	FFTRealSelect_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+
+
+
+template <int P>
+class FFTRealSelect
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	FORCEINLINE static float *
+						sel_bin (float *e_ptr, float *o_ptr);
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTRealSelect ();
+						~FFTRealSelect ();
+						FFTRealSelect (const FFTRealSelect &other);
+	FFTRealSelect&	operator = (const FFTRealSelect &other);
+	bool				operator == (const FFTRealSelect &other);
+	bool				operator != (const FFTRealSelect &other);
+
+};	// class FFTRealSelect
+
+
+
+#include	"FFTRealSelect.hpp"
+
+
+
+#endif	// FFTRealSelect_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealSelect.hpp	(revision 769)
@@ -0,0 +1,62 @@
+/*****************************************************************************
+
+        FFTRealSelect.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTRealSelect_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTRealSelect code header.
+#endif
+#define	FFTRealSelect_CURRENT_CODEHEADER
+
+#if ! defined (FFTRealSelect_CODEHEADER_INCLUDED)
+#define	FFTRealSelect_CODEHEADER_INCLUDED
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int P>
+float *	FFTRealSelect <P>::sel_bin (float *e_ptr, float *o_ptr)
+{
+	return (o_ptr);
+}
+
+
+
+template <>
+float *	FFTRealSelect <0>::sel_bin (float *e_ptr, float *o_ptr)
+{
+	return (e_ptr);
+}
+
+
+
+#endif	// FFTRealSelect_CODEHEADER_INCLUDED
+
+#undef FFTRealSelect_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h	(revision 769)
@@ -0,0 +1,101 @@
+/*****************************************************************************
+
+        FFTRealUseTrigo.h
+        Copyright (c) 2005 Laurent de Soras
+
+Template parameters:
+	- ALGO: algorithm choice. 0 = table, other = oscillator
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (FFTRealUseTrigo_HEADER_INCLUDED)
+#define	FFTRealUseTrigo_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"FFTRealFixLenParam.h"
+#include	"OscSinCos.h"
+
+
+
+template <int ALGO>
+class FFTRealUseTrigo
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+   typedef	FFTRealFixLenParam::DataType	DataType;
+	typedef	OscSinCos <DataType>	OscType;
+
+	FORCEINLINE static void
+						prepare (OscType &osc);
+	FORCEINLINE	static void
+						iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						FFTRealUseTrigo ();
+						~FFTRealUseTrigo ();
+						FFTRealUseTrigo (const FFTRealUseTrigo &other);
+	FFTRealUseTrigo &
+						operator = (const FFTRealUseTrigo &other);
+	bool				operator == (const FFTRealUseTrigo &other);
+	bool				operator != (const FFTRealUseTrigo &other);
+
+};	// class FFTRealUseTrigo
+
+
+
+#include	"FFTRealUseTrigo.hpp"
+
+
+
+#endif	// FFTRealUseTrigo_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp	(revision 769)
@@ -0,0 +1,91 @@
+/*****************************************************************************
+
+        FFTRealUseTrigo.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (FFTRealUseTrigo_CURRENT_CODEHEADER)
+	#error Recursive inclusion of FFTRealUseTrigo code header.
+#endif
+#define	FFTRealUseTrigo_CURRENT_CODEHEADER
+
+#if ! defined (FFTRealUseTrigo_CODEHEADER_INCLUDED)
+#define	FFTRealUseTrigo_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"OscSinCos.h"
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int ALGO>
+void	FFTRealUseTrigo <ALGO>::prepare (OscType &osc)
+{
+	osc.clear_buffers ();
+}
+
+template <>
+void	FFTRealUseTrigo <0>::prepare (OscType &osc)
+{
+	// Nothing
+}
+
+
+
+template <int ALGO>
+void	FFTRealUseTrigo <ALGO>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
+{
+	osc.step ();
+	c = osc.get_cos ();
+	s = osc.get_sin ();
+}
+
+template <>
+void	FFTRealUseTrigo <0>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
+{
+	c = cos_ptr [index_c];
+	s = cos_ptr [index_s];
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// FFTRealUseTrigo_CODEHEADER_INCLUDED
+
+#undef FFTRealUseTrigo_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.h	(revision 769)
@@ -0,0 +1,106 @@
+/*****************************************************************************
+
+        OscSinCos.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (OscSinCos_HEADER_INCLUDED)
+#define	OscSinCos_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+
+
+
+template <class T>
+class OscSinCos
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	T	DataType;
+
+						OscSinCos ();
+
+	FORCEINLINE void
+						set_step (double angle_rad);
+
+	FORCEINLINE DataType
+						get_cos () const;
+	FORCEINLINE DataType
+						get_sin () const;
+	FORCEINLINE void
+						step ();
+	FORCEINLINE void
+						clear_buffers ();
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	DataType			_pos_cos;		// Current phase expressed with sin and cos. [-1 ; 1]
+	DataType			_pos_sin;		// -
+	DataType			_step_cos;		// Phase increment per step, [-1 ; 1]
+	DataType			_step_sin;		// -
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						OscSinCos (const OscSinCos &other);
+	OscSinCos &		operator = (const OscSinCos &other);
+	bool				operator == (const OscSinCos &other);
+	bool				operator != (const OscSinCos &other);
+
+};	// class OscSinCos
+
+
+
+#include	"OscSinCos.hpp"
+
+
+
+#endif	// OscSinCos_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/OscSinCos.hpp	(revision 769)
@@ -0,0 +1,122 @@
+/*****************************************************************************
+
+        OscSinCos.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (OscSinCos_CURRENT_CODEHEADER)
+	#error Recursive inclusion of OscSinCos code header.
+#endif
+#define	OscSinCos_CURRENT_CODEHEADER
+
+#if ! defined (OscSinCos_CODEHEADER_INCLUDED)
+#define	OscSinCos_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	<cmath>
+
+namespace std { }
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T>
+OscSinCos <T>::OscSinCos ()
+:	_pos_cos (1)
+,	_pos_sin (0)
+,	_step_cos (1)
+,	_step_sin (0)
+{
+	// Nothing
+}
+
+
+
+template <class T>
+void	OscSinCos <T>::set_step (double angle_rad)
+{
+	using namespace std;
+
+	_step_cos = static_cast <DataType> (cos (angle_rad));
+	_step_sin = static_cast <DataType> (sin (angle_rad));
+}
+
+
+
+template <class T>
+typename OscSinCos <T>::DataType	OscSinCos <T>::get_cos () const
+{
+	return (_pos_cos);
+}
+
+
+
+template <class T>
+typename OscSinCos <T>::DataType	OscSinCos <T>::get_sin () const
+{
+	return (_pos_sin);
+}
+
+
+
+template <class T>
+void	OscSinCos <T>::step ()
+{
+	const DataType	old_cos = _pos_cos;
+	const DataType	old_sin = _pos_sin;
+
+	_pos_cos = old_cos * _step_cos - old_sin * _step_sin;
+	_pos_sin = old_cos * _step_sin + old_sin * _step_cos;
+}
+
+
+
+template <class T>
+void	OscSinCos <T>::clear_buffers ()
+{
+	_pos_cos = static_cast <DataType> (1);
+	_pos_sin = static_cast <DataType> (0);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// OscSinCos_CODEHEADER_INCLUDED
+
+#undef OscSinCos_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.h	(revision 769)
@@ -0,0 +1,105 @@
+/*****************************************************************************
+
+        TestAccuracy.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (TestAccuracy_HEADER_INCLUDED)
+#define	TestAccuracy_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class FO>
+class TestAccuracy
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	typename FO::DataType	DataType;
+	typedef	long double	BigFloat;	// To get maximum accuracy during intermediate calculations
+
+   static int		perform_test_single_object (FO &fft);
+   static int		perform_test_d (FO &fft, const char *class_name_0);
+   static int		perform_test_i (FO &fft, const char *class_name_0);
+   static int		perform_test_di (FO &fft, const char *class_name_0);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	enum {			NBR_ACC_TESTS	= 10 * 1000 * 1000	};
+   enum {         MAX_NBR_TESTS  = 10000  };
+
+   static void		compute_tf (DataType s [], const DataType x [], long length);
+	static void		compute_itf (DataType x [], const DataType s [], long length);
+	static int		compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel);
+	static BigFloat
+						compute_power (const DataType x_ptr [], long len);
+	static BigFloat
+						compute_power (const DataType x_ptr [], const DataType y_ptr [], long len);
+	static void		compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len);
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						TestAccuracy ();
+						~TestAccuracy ();
+						TestAccuracy (const TestAccuracy &other);
+	TestAccuracy &	operator = (const TestAccuracy &other);
+	bool				operator == (const TestAccuracy &other);
+	bool				operator != (const TestAccuracy &other);
+
+};	// class TestAccuracy
+
+
+
+#include	"TestAccuracy.hpp"
+
+
+
+#endif	// TestAccuracy_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestAccuracy.hpp	(revision 769)
@@ -0,0 +1,472 @@
+/*****************************************************************************
+
+        TestAccuracy.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (TestAccuracy_CURRENT_CODEHEADER)
+	#error Recursive inclusion of TestAccuracy code header.
+#endif
+#define	TestAccuracy_CURRENT_CODEHEADER
+
+#if ! defined (TestAccuracy_CODEHEADER_INCLUDED)
+#define	TestAccuracy_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"test_fnc.h"
+#include	"TestWhiteNoiseGen.h"
+
+#include	<typeinfo>
+#include	<vector>
+
+#include	<cmath>
+#include	<cstdio>
+
+
+
+static const double	TestAccuracy_LN10	= 2.3025850929940456840179914546844;
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class FO>
+int	TestAccuracy <FO>::perform_test_single_object (FO &fft)
+{
+	assert (&fft != 0);
+
+	using namespace std;
+
+	int				ret_val = 0;
+
+	const std::type_info &	ti = typeid (fft);
+	const char *	class_name_0 = ti.name ();
+
+	if (ret_val == 0)
+	{
+		ret_val = perform_test_d (fft, class_name_0);
+	}
+	if (ret_val == 0)
+	{
+		ret_val = perform_test_i (fft, class_name_0);
+	}
+	if (ret_val == 0)
+	{
+		ret_val = perform_test_di (fft, class_name_0);
+	}
+
+	if (ret_val == 0)
+	{
+		printf ("\n");
+	}
+
+	return (ret_val);
+}
+
+
+
+template <class FO>
+int	TestAccuracy <FO>::perform_test_d (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	using namespace std;
+
+	int				ret_val = 0;
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      NBR_ACC_TESTS / len / len,
+      1L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	printf ("Testing %s::do_fft () [%ld samples]... ", class_name_0, len);
+	fflush (stdout);
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	x (len);
+	std::vector <DataType>	s1 (len);
+	std::vector <DataType>	s2 (len);
+	BigFloat			err_avg = 0;
+
+	for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
+	{
+		noise.generate (&x [0], len);
+		fft.do_fft (&s1 [0], &x [0]);
+		compute_tf (&s2 [0], &x [0], len);
+
+		BigFloat			max_err;
+		compare_vect_display (&s1 [0], &s2 [0], len, max_err);
+		err_avg += max_err;
+	}
+	err_avg /= NBR_ACC_TESTS;
+
+	printf ("done.\n");
+	printf (
+		"Average maximum error: %.6f %% (%f dB)\n",
+		static_cast <double> (err_avg * 100),
+		static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
+	);
+
+	return (ret_val);
+}
+
+
+
+template <class FO>
+int	TestAccuracy <FO>::perform_test_i (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	using namespace std;
+
+	int				ret_val = 0;
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      NBR_ACC_TESTS / len / len,
+      10L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	printf ("Testing %s::do_ifft () [%ld samples]... ", class_name_0, len);
+	fflush (stdout);
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	s (len);
+	std::vector <DataType>	x1 (len);
+	std::vector <DataType>	x2 (len);
+	BigFloat			err_avg = 0;
+
+	for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
+	{
+		noise.generate (&s [0], len);
+		fft.do_ifft (&s [0], &x1 [0]);
+		compute_itf (&x2 [0], &s [0], len);
+
+		BigFloat			max_err;
+		compare_vect_display (&x1 [0], &x2 [0], len, max_err);
+		err_avg += max_err;
+	}
+	err_avg /= NBR_ACC_TESTS;
+
+	printf ("done.\n");
+	printf (
+		"Average maximum error: %.6f %% (%f dB)\n",
+		static_cast <double> (err_avg * 100),
+		static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
+	);
+
+	return (ret_val);
+}
+
+
+
+template <class FO>
+int	TestAccuracy <FO>::perform_test_di (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	using namespace std;
+
+	int				ret_val = 0;
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      NBR_ACC_TESTS / len / len,
+      1L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	printf (
+		"Testing %s::do_fft () / do_ifft () / rescale () [%ld samples]... ",
+		class_name_0,
+		len
+	);
+	fflush (stdout);
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	x (len);
+	std::vector <DataType>	s (len);
+	std::vector <DataType>	y (len);
+	BigFloat			err_avg = 0;
+
+	for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
+	{
+		noise.generate (&x [0], len);
+		fft.do_fft (&s [0], &x [0]);
+		fft.do_ifft (&s [0], &y [0]);
+		fft.rescale (&y [0]);
+
+		BigFloat			max_err;
+		compare_vect_display (&x [0], &y [0], len, max_err);
+		err_avg += max_err;
+	}
+	err_avg /= NBR_ACC_TESTS;
+
+	printf ("done.\n");
+	printf (
+		"Average maximum error: %.6f %% (%f dB)\n",
+		static_cast <double> (err_avg * 100),
+		static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
+	);
+
+	return (ret_val);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+// Positive transform
+template <class FO>
+void	TestAccuracy <FO>::compute_tf (DataType s [], const DataType x [], long length)
+{
+	assert (s != 0);
+	assert (x != 0);
+	assert (length >= 2);
+	assert ((length & 1) == 0);
+
+	const long		nbr_bins = length >> 1;
+
+	// DC and Nyquist
+	BigFloat			dc = 0;
+	BigFloat			ny = 0;
+	for (long pos = 0; pos < length; pos += 2)
+	{
+		const BigFloat	even = x [pos    ];
+		const BigFloat	odd  = x [pos + 1];
+		dc += even + odd;
+		ny += even - odd;
+	}
+	s [0       ] = static_cast <DataType> (dc);
+	s [nbr_bins] = static_cast <DataType> (ny);
+
+	// Regular bins
+	for (long bin = 1; bin < nbr_bins; ++ bin)
+	{
+		BigFloat			sum_r = 0;
+		BigFloat			sum_i = 0;
+
+		const BigFloat	m = bin * static_cast <BigFloat> (2 * PI) / length;
+
+		for (long pos = 0; pos < length; ++pos)
+		{
+			using namespace std;
+
+			const BigFloat	phase = pos * m;
+			const BigFloat	e_r = cos (phase);
+			const BigFloat	e_i = sin (phase);
+
+			sum_r += x [pos] * e_r;
+			sum_i += x [pos] * e_i;
+		}
+
+		s [           bin] = static_cast <DataType> (sum_r);
+		s [nbr_bins + bin] = static_cast <DataType> (sum_i);
+	}
+}
+
+
+
+// Negative transform
+template <class FO>
+void	TestAccuracy <FO>::compute_itf (DataType x [], const DataType s [], long length)
+{
+	assert (s != 0);
+	assert (x != 0);
+	assert (length >= 2);
+	assert ((length & 1) == 0);
+
+	const long		nbr_bins = length >> 1;
+
+	// DC and Nyquist
+	BigFloat			dc = s [0       ];
+	BigFloat			ny = s [nbr_bins];
+
+	// Regular bins
+	for (long pos = 0; pos < length; ++pos)
+	{
+		BigFloat				sum = dc + ny * (1 - 2 * (pos & 1));
+
+		const BigFloat		m = pos * static_cast <BigFloat> (-2 * PI) / length;
+
+		for (long bin = 1; bin < nbr_bins; ++ bin)
+		{
+			using namespace std;
+
+			const BigFloat	phase = bin * m;
+			const BigFloat	e_r = cos (phase);
+			const BigFloat	e_i = sin (phase);
+
+			sum += 2 * (  e_r * s [bin           ]
+			            - e_i * s [bin + nbr_bins]);
+		}
+
+		x [pos] = static_cast <DataType> (sum);
+	}
+}
+
+
+
+template <class FO>
+int	TestAccuracy <FO>::compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel)
+{
+	assert (x_ptr != 0);
+	assert (y_ptr != 0);
+	assert (len > 0);
+	assert (&max_err_rel != 0);
+
+	using namespace std;
+
+	int				ret_val = 0;
+
+	BigFloat			power = compute_power (&x_ptr [0], &y_ptr [0], len);
+	BigFloat			power_dif;
+	long				max_err_pos;
+	compare_vect (&x_ptr [0], &y_ptr [0], power_dif, max_err_pos, len);
+
+	if (power == 0)
+	{
+		power = power_dif;
+	}
+	const BigFloat	power_err_rel = power_dif / power;
+
+	BigFloat	      max_err = 0;
+	max_err_rel = 0;
+	if (max_err_pos >= 0)
+	{
+      max_err = y_ptr [max_err_pos] - x_ptr [max_err_pos];
+		max_err_rel = 2 * fabs (max_err) / (  fabs (y_ptr [max_err_pos])
+		                                    + fabs (x_ptr [max_err_pos]));
+	}
+
+	if (power_err_rel > 0.001)
+	{
+		printf ("Power error  : %f (%.6f %%)\n",
+			static_cast <double> (power_err_rel),
+			static_cast <double> (power_err_rel * 100)
+		);
+		if (max_err_pos >= 0)
+		{
+			printf (
+				"Maximum error: %f - %f = %f (%f)\n",
+				static_cast <double> (y_ptr [max_err_pos]),
+				static_cast <double> (x_ptr [max_err_pos]),
+				static_cast <double> (max_err),
+				static_cast <double> (max_err_pos)
+			);
+		}
+	}
+
+	return (ret_val);
+}
+
+
+
+template <class FO>
+typename TestAccuracy <FO>::BigFloat	TestAccuracy <FO>::compute_power (const DataType x_ptr [], long len)
+{
+	assert (x_ptr != 0);
+	assert (len > 0);
+
+	BigFloat		power = 0;
+	for (long pos = 0; pos < len; ++pos)
+	{
+		const BigFloat	val = x_ptr [pos];
+
+		power += val * val;
+	}
+
+	using namespace std;
+
+	power = sqrt (power) / len;
+
+	return (power);
+}
+
+
+
+template <class FO>
+typename TestAccuracy <FO>::BigFloat	TestAccuracy <FO>::compute_power (const DataType x_ptr [], const DataType y_ptr [], long len)
+{
+	assert (x_ptr != 0);
+	assert (y_ptr != 0);
+	assert (len > 0);
+
+	return ((compute_power (x_ptr, len) + compute_power (y_ptr, len)) * 0.5);
+}
+
+
+
+template <class FO>
+void	TestAccuracy <FO>::compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len)
+{
+	assert (x_ptr != 0);
+	assert (y_ptr != 0);
+	assert (len > 0);
+	assert (&power != 0);
+	assert (&max_err_pos != 0);
+
+	power = 0;
+	BigFloat			max_dif2 = 0;
+	max_err_pos = -1;
+
+	for (long pos = 0; pos < len; ++pos)
+	{
+		const BigFloat	x = x_ptr [pos];
+		const BigFloat	y = y_ptr [pos];
+		const BigFloat	dif = y - x;
+		const BigFloat	dif2 = dif * dif;
+
+		power += dif2;
+		if (dif2 > max_dif2)
+		{
+			max_err_pos = pos;
+			max_dif2 = dif2;
+		}
+	}
+
+	using namespace std;
+
+	power = sqrt (power) / len;
+}
+
+
+
+#endif	// TestAccuracy_CODEHEADER_INCLUDED
+
+#undef TestAccuracy_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.h	(revision 769)
@@ -0,0 +1,93 @@
+/*****************************************************************************
+
+        TestHelperFixLen.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (TestHelperFixLen_HEADER_INCLUDED)
+#define	TestHelperFixLen_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"FFTRealFixLen.h"
+
+
+
+template <int L>
+class TestHelperFixLen
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef  FFTRealFixLen <L> FftType;
+
+   static void    perform_test_accuracy (int &ret_val);
+   static void    perform_test_speed (int &ret_val);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						TestHelperFixLen ();
+						~TestHelperFixLen ();
+						TestHelperFixLen (const TestHelperFixLen &other);
+	TestHelperFixLen &
+						operator = (const TestHelperFixLen &other);
+	bool				operator == (const TestHelperFixLen &other);
+	bool				operator != (const TestHelperFixLen &other);
+
+};	// class TestHelperFixLen
+
+
+
+#include	"TestHelperFixLen.hpp"
+
+
+
+#endif	// TestHelperFixLen_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp	(revision 769)
@@ -0,0 +1,93 @@
+/*****************************************************************************
+
+        TestHelperFixLen.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (TestHelperFixLen_CURRENT_CODEHEADER)
+	#error Recursive inclusion of TestHelperFixLen code header.
+#endif
+#define	TestHelperFixLen_CURRENT_CODEHEADER
+
+#if ! defined (TestHelperFixLen_CODEHEADER_INCLUDED)
+#define	TestHelperFixLen_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"test_settings.h"
+
+#include	"TestAccuracy.h"
+#if defined (test_settings_SPEED_TEST_ENABLED)
+	#include	"TestSpeed.h"
+#endif
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <int L>
+void	TestHelperFixLen <L>::perform_test_accuracy (int &ret_val)
+{
+   if (ret_val == 0)
+   {
+		FftType			fft;
+      ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
+   }
+}
+
+
+
+template <int L>
+void	TestHelperFixLen <L>::perform_test_speed (int &ret_val)
+{
+#if defined (test_settings_SPEED_TEST_ENABLED)
+
+   if (ret_val == 0)
+   {
+		FftType			fft;
+      ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
+   }
+
+#endif
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// TestHelperFixLen_CODEHEADER_INCLUDED
+
+#undef TestHelperFixLen_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.h	(revision 769)
@@ -0,0 +1,94 @@
+/*****************************************************************************
+
+        TestHelperNormal.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (TestHelperNormal_HEADER_INCLUDED)
+#define	TestHelperNormal_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"FFTReal.h"
+
+
+
+template <class DT>
+class TestHelperNormal
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	DT	DataType;
+	typedef	FFTReal <DataType>	FftType;
+
+   static void    perform_test_accuracy (int &ret_val);
+   static void    perform_test_speed (int &ret_val);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						TestHelperNormal ();
+						~TestHelperNormal ();
+						TestHelperNormal (const TestHelperNormal &other);
+	TestHelperNormal &
+						operator = (const TestHelperNormal &other);
+	bool				operator == (const TestHelperNormal &other);
+	bool				operator != (const TestHelperNormal &other);
+
+};	// class TestHelperNormal
+
+
+
+#include	"TestHelperNormal.hpp"
+
+
+
+#endif	// TestHelperNormal_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestHelperNormal.hpp	(revision 769)
@@ -0,0 +1,99 @@
+/*****************************************************************************
+
+        TestHelperNormal.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (TestHelperNormal_CURRENT_CODEHEADER)
+	#error Recursive inclusion of TestHelperNormal code header.
+#endif
+#define	TestHelperNormal_CURRENT_CODEHEADER
+
+#if ! defined (TestHelperNormal_CODEHEADER_INCLUDED)
+#define	TestHelperNormal_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"test_settings.h"
+
+#include	"TestAccuracy.h"
+#if defined (test_settings_SPEED_TEST_ENABLED)
+	#include	"TestSpeed.h"
+#endif
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class DT>
+void	TestHelperNormal <DT>::perform_test_accuracy (int &ret_val)
+{
+	const int		len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12 };
+	const int		nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
+	for (int k = 0; k < nbr_len && ret_val == 0; ++k)
+	{
+		const long		len = 1L << (len_arr [k]);
+		FftType			fft (len);
+		ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
+	}
+}
+
+
+
+template <class DT>
+void	TestHelperNormal <DT>::perform_test_speed (int &ret_val)
+{
+#if defined (test_settings_SPEED_TEST_ENABLED)
+
+	const int		len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12, 14, 16, 18, 20, 22 };
+	const int		nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
+	for (int k = 0; k < nbr_len && ret_val == 0; ++k)
+	{
+		const long		len = 1L << (len_arr [k]);
+		FftType			fft (len);
+		ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
+	}
+
+#endif
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// TestHelperNormal_CODEHEADER_INCLUDED
+
+#undef TestHelperNormal_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.h	(revision 769)
@@ -0,0 +1,95 @@
+/*****************************************************************************
+
+        TestSpeed.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (TestSpeed_HEADER_INCLUDED)
+#define	TestSpeed_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class FO>
+class TestSpeed
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	typename FO::DataType	DataType;
+
+   static int		perform_test_single_object (FO &fft);
+   static int		perform_test_d (FO &fft, const char *class_name_0);
+   static int		perform_test_i (FO &fft, const char *class_name_0);
+   static int		perform_test_di (FO &fft, const char *class_name_0);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	enum {			NBR_SPD_TESTS	= 10 * 1000 * 1000	};
+   enum {         MAX_NBR_TESTS  = 10000  };
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						TestSpeed ();
+						~TestSpeed ();
+						TestSpeed (const TestSpeed &other);
+	TestSpeed &		operator = (const TestSpeed &other);
+	bool				operator == (const TestSpeed &other);
+	bool				operator != (const TestSpeed &other);
+
+};	// class TestSpeed
+
+
+
+#include	"TestSpeed.hpp"
+
+
+
+#endif	// TestSpeed_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestSpeed.hpp	(revision 769)
@@ -0,0 +1,223 @@
+/*****************************************************************************
+
+        TestSpeed.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (TestSpeed_CURRENT_CODEHEADER)
+	#error Recursive inclusion of TestSpeed code header.
+#endif
+#define	TestSpeed_CURRENT_CODEHEADER
+
+#if ! defined (TestSpeed_CODEHEADER_INCLUDED)
+#define	TestSpeed_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"test_fnc.h"
+#include	"stopwatch/StopWatch.h"
+#include	"TestWhiteNoiseGen.h"
+
+#include	<typeinfo>
+
+#include	<cstdio>
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class FO>
+int	TestSpeed <FO>::perform_test_single_object (FO &fft)
+{
+	assert (&fft != 0);
+
+   int            ret_val = 0;
+
+	const std::type_info &	ti = typeid (fft);
+	const char *	class_name_0 = ti.name ();
+
+   if (ret_val == 0)
+   {
+	   perform_test_d (fft, class_name_0);
+   }
+   if (ret_val == 0)
+   {
+	   perform_test_i (fft, class_name_0);
+   }
+	if (ret_val == 0)
+   {
+      perform_test_di (fft, class_name_0);
+   }
+
+   if (ret_val == 0)
+   {
+      printf ("\n");
+   }
+
+   return (ret_val);
+}
+
+
+
+template <class FO>
+int	TestSpeed <FO>::perform_test_d (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      static_cast <long> (NBR_SPD_TESTS / len / len),
+      1L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	x (len, 0);
+	std::vector <DataType>	s (len);
+	noise.generate (&x [0], len);
+
+   printf (
+		"%s::do_fft () speed test [%ld samples]... ",
+		class_name_0,
+		len
+	);
+	fflush (stdout);
+
+	stopwatch::StopWatch	chrono;
+	chrono.start ();
+	for (long test = 0; test < nbr_tests; ++ test)
+	{
+		fft.do_fft (&s [0], &x [0]);
+		chrono.stop_lap ();
+	}
+
+	printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
+
+	return (0);
+}
+
+
+
+template <class FO>
+int	TestSpeed <FO>::perform_test_i (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      static_cast <long> (NBR_SPD_TESTS / len / len),
+      1L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	x (len);
+	std::vector <DataType>	s (len, 0);
+	noise.generate (&s [0], len);
+
+   printf (
+		"%s::do_ifft () speed test [%ld samples]... ",
+		class_name_0,
+		len
+	);
+	fflush (stdout);
+
+	stopwatch::StopWatch	chrono;
+	chrono.start ();
+	for (long test = 0; test < nbr_tests; ++ test)
+	{
+		fft.do_ifft (&s [0], &x [0]);
+		chrono.stop_lap ();
+	}
+
+	printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
+
+	return (0);
+}
+
+
+
+template <class FO>
+int	TestSpeed <FO>::perform_test_di (FO &fft, const char *class_name_0)
+{
+	assert (&fft != 0);
+   assert (class_name_0 != 0);
+
+	const long		len = fft.get_length ();
+   const long     nbr_tests = limit (
+      static_cast <long> (NBR_SPD_TESTS / len / len),
+      1L,
+      static_cast <long> (MAX_NBR_TESTS)
+   );
+
+	TestWhiteNoiseGen <DataType>	noise;
+	std::vector <DataType>	x (len, 0);
+	std::vector <DataType>	s (len);
+	std::vector <DataType>	y (len);
+	noise.generate (&x [0], len);
+
+   printf (
+		"%s::do_fft () / do_ifft () / rescale () speed test [%ld samples]... ",
+		class_name_0,
+		len
+	);
+	fflush (stdout);
+
+	stopwatch::StopWatch	chrono;
+
+	chrono.start ();
+	for (long test = 0; test < nbr_tests; ++ test)
+	{
+		fft.do_fft (&s [0], &x [0]);
+		fft.do_ifft (&s [0], &y [0]);
+		fft.rescale (&y [0]);
+		chrono.stop_lap ();
+	}
+
+	printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
+
+	return (0);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// TestSpeed_CODEHEADER_INCLUDED
+
+#undef TestSpeed_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h	(revision 769)
@@ -0,0 +1,95 @@
+/*****************************************************************************
+
+        TestWhiteNoiseGen.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (TestWhiteNoiseGen_HEADER_INCLUDED)
+#define	TestWhiteNoiseGen_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class DT>
+class TestWhiteNoiseGen
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+	typedef	DT	DataType;
+
+						TestWhiteNoiseGen ();
+	virtual			~TestWhiteNoiseGen () {}
+
+	void				generate (DataType data_ptr [], long len);
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	typedef	unsigned long	StateType;
+
+	StateType		_rand_state;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						TestWhiteNoiseGen (const TestWhiteNoiseGen &other);
+	TestWhiteNoiseGen &
+						operator = (const TestWhiteNoiseGen &other);
+	bool				operator == (const TestWhiteNoiseGen &other);
+	bool				operator != (const TestWhiteNoiseGen &other);
+
+};	// class TestWhiteNoiseGen
+
+
+
+#include	"TestWhiteNoiseGen.hpp"
+
+
+
+#endif	// TestWhiteNoiseGen_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp	(revision 769)
@@ -0,0 +1,91 @@
+/*****************************************************************************
+
+        TestWhiteNoiseGen.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (TestWhiteNoiseGen_CURRENT_CODEHEADER)
+	#error Recursive inclusion of TestWhiteNoiseGen code header.
+#endif
+#define	TestWhiteNoiseGen_CURRENT_CODEHEADER
+
+#if ! defined (TestWhiteNoiseGen_CODEHEADER_INCLUDED)
+#define	TestWhiteNoiseGen_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class DT>
+TestWhiteNoiseGen <DT>::TestWhiteNoiseGen ()
+:	_rand_state (0)
+{
+	_rand_state = reinterpret_cast <StateType> (this);
+}
+
+
+
+template <class DT>
+void	TestWhiteNoiseGen <DT>::generate (DataType data_ptr [], long len)
+{
+	assert (data_ptr != 0);
+	assert (len > 0);
+
+	const DataType	one = static_cast <DataType> (1);
+	const DataType	mul = one / static_cast <DataType> (0x80000000UL);
+
+	long				pos = 0;
+	do
+	{
+		const DataType	x = static_cast <DataType> (_rand_state & 0xFFFFFFFFUL);
+		data_ptr [pos] = x * mul - one;
+
+		_rand_state = _rand_state * 1234567UL + 890123UL;
+
+		++ pos;
+	}
+	while (pos < len);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#endif	// TestWhiteNoiseGen_CODEHEADER_INCLUDED
+
+#undef TestWhiteNoiseGen_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/bwins/fftrealu.def
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/bwins/fftrealu.def	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/bwins/fftrealu.def	(revision 769)
@@ -0,0 +1,5 @@
+EXPORTS
+	??0FFTRealWrapper@@QAE@XZ @ 1 NONAME ; FFTRealWrapper::FFTRealWrapper(void)
+	??1FFTRealWrapper@@QAE@XZ @ 2 NONAME ; FFTRealWrapper::~FFTRealWrapper(void)
+	?calculateFFT@FFTRealWrapper@@QAEXQAMQBM@Z @ 3 NONAME ; void FFTRealWrapper::calculateFFT(float * const, float const * const)
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/def.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/def.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/def.h	(revision 769)
@@ -0,0 +1,60 @@
+/*****************************************************************************
+
+        def.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (def_HEADER_INCLUDED)
+#define	def_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+
+const double	PI		= 3.1415926535897932384626433832795;
+const double	SQRT2	= 1.41421356237309514547462185873883;
+
+#if defined (_MSC_VER)
+
+	#define	FORCEINLINE	__forceinline
+
+#else
+
+	#define	FORCEINLINE	inline
+
+#endif
+
+
+
+#endif	// def_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/eabi/fftrealu.def
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/eabi/fftrealu.def	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/eabi/fftrealu.def	(revision 769)
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN14FFTRealWrapper12calculateFFTEPfPKf @ 1 NONAME
+	_ZN14FFTRealWrapperC1Ev @ 2 NONAME
+	_ZN14FFTRealWrapperC2Ev @ 3 NONAME
+	_ZN14FFTRealWrapperD1Ev @ 4 NONAME
+	_ZN14FFTRealWrapperD2Ev @ 5 NONAME
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pas
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pas	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pas	(revision 769)
@@ -0,0 +1,661 @@
+(*****************************************************************************
+
+        DIGITAL SIGNAL PROCESSING TOOLS
+        Version 1.03, 2001/06/15
+        (c) 1999 - Laurent de Soras
+
+        FFTReal.h
+        Fourier transformation of real number arrays.
+        Portable ISO C++
+
+------------------------------------------------------------------------------
+
+	LEGAL
+
+	Source code may be freely used for any purpose, including commercial
+	applications. Programs must display in their "About" dialog-box (or
+	documentation) a text telling they use these routines by Laurent de Soras.
+	Modified source code can be distributed, but modifications must be clearly
+	indicated.
+
+	CONTACT
+
+	Laurent de Soras
+	92 avenue Albert 1er
+	92500 Rueil-Malmaison
+	France
+
+	ldesoras@club-internet.fr
+
+------------------------------------------------------------------------------
+
+        Translation to ObjectPascal by :
+          Frederic Vanmol
+          frederic@axiworld.be
+
+*****************************************************************************)
+
+
+unit
+    FFTReal;
+
+interface
+
+uses
+    Windows;
+
+(* Change this typedef to use a different floating point type in your FFTs
+	(i.e. float, double or long double). *)
+type
+    pflt_t = ^flt_t;
+    flt_t = single;
+
+    pflt_array = ^flt_array;
+    flt_array = array[0..0] of flt_t;
+
+    plongarray = ^longarray;
+    longarray = array[0..0] of longint;
+
+const
+     sizeof_flt : longint = SizeOf(flt_t);
+
+
+
+type
+    // Bit reversed look-up table nested class
+    TBitReversedLUT = class
+    private
+      _ptr : plongint;
+    public
+      constructor Create(const nbr_bits: integer);
+      destructor Destroy; override;
+      function get_ptr: plongint;
+    end;
+
+    // Trigonometric look-up table nested class
+    TTrigoLUT = class
+    private
+      _ptr : pflt_t;
+    public
+      constructor Create(const nbr_bits: integer);
+      destructor Destroy; override;
+      function get_ptr(const level: integer): pflt_t;
+    end;
+
+    TFFTReal = class
+    private
+      _bit_rev_lut  : TBitReversedLUT;
+      _trigo_lut    : TTrigoLUT;
+      _sqrt2_2      : flt_t;
+      _length       : longint;
+      _nbr_bits     : integer;
+      _buffer_ptr   : pflt_t;
+    public
+      constructor Create(const length: longint);
+      destructor Destroy; override;
+
+      procedure do_fft(f: pflt_array; const x: pflt_array);
+      procedure do_ifft(const f: pflt_array; x: pflt_array);
+      procedure rescale(x: pflt_array);
+    end;
+
+
+
+
+
+
+
+implementation
+
+uses
+    Math;
+
+{ TBitReversedLUT }
+
+constructor TBitReversedLUT.Create(const nbr_bits: integer);
+var
+   length   : longint;
+   cnt      : longint;
+   br_index : longint;
+   bit      : longint;
+begin
+  inherited Create;
+
+  length := 1 shl nbr_bits;
+  GetMem(_ptr, length*SizeOf(longint));
+
+  br_index := 0;
+  plongarray(_ptr)^[0] := 0;
+  for cnt := 1 to length-1 do
+  begin
+    // ++br_index (bit reversed)
+    bit := length shr 1;
+    br_index := br_index xor bit;
+    while br_index and bit = 0 do
+    begin
+      bit := bit shr 1;
+      br_index := br_index xor bit;
+    end;
+
+    plongarray(_ptr)^[cnt] := br_index;
+  end;
+end;
+
+destructor TBitReversedLUT.Destroy;
+begin
+  FreeMem(_ptr);
+  _ptr := nil;
+  inherited;
+end;
+
+function TBitReversedLUT.get_ptr: plongint;
+begin
+  Result := _ptr;
+end;
+
+{ TTrigLUT }
+
+constructor TTrigoLUT.Create(const nbr_bits: integer);
+var
+   total_len : longint;
+   PI        : double;
+   level     : integer;
+   level_len : longint;
+   level_ptr : pflt_array;
+   mul       : double;
+   i         : longint;
+begin
+  inherited Create;
+
+  _ptr := nil;
+
+  if (nbr_bits > 3) then
+  begin
+    total_len := (1 shl (nbr_bits - 1)) - 4;
+    GetMem(_ptr, total_len * sizeof_flt);
+
+    PI := ArcTan(1) * 4;
+    for level := 3 to nbr_bits-1 do
+    begin
+      level_len := 1 shl (level - 1);
+      level_ptr := pointer(get_ptr(level));
+      mul := PI / (level_len shl 1);
+
+      for i := 0 to level_len-1 do
+        level_ptr^[i] := cos(i * mul);
+    end;
+  end;
+end;
+
+destructor TTrigoLUT.Destroy;
+begin
+  FreeMem(_ptr);
+  _ptr := nil;
+  inherited;
+end;
+
+function TTrigoLUT.get_ptr(const level: integer): pflt_t;
+var
+   tempp : pflt_t;
+begin
+  tempp := _ptr;
+  inc(tempp, (1 shl (level-1)) - 4);
+  Result := tempp;
+end;
+
+{ TFFTReal }
+
+constructor TFFTReal.Create(const length: longint);
+begin
+  inherited Create;
+
+  _length := length;
+  _nbr_bits := Floor(Ln(length) / Ln(2) + 0.5);
+  _bit_rev_lut := TBitReversedLUT.Create(Floor(Ln(length) / Ln(2) + 0.5));
+  _trigo_lut := TTrigoLUT.Create(Floor(Ln(length) / Ln(2) + 0.05));
+  _sqrt2_2 := Sqrt(2) * 0.5;
+
+  _buffer_ptr := nil;
+  if _nbr_bits > 2 then
+    GetMem(_buffer_ptr, _length * sizeof_flt);
+end;
+
+destructor TFFTReal.Destroy;
+begin
+  if _buffer_ptr <> nil then
+  begin
+    FreeMem(_buffer_ptr);
+    _buffer_ptr := nil;
+  end;
+
+  _bit_rev_lut.Free;
+  _bit_rev_lut := nil;
+  _trigo_lut.Free;
+  _trigo_lut := nil;
+
+  inherited;       
+end;
+
+(*==========================================================================*/
+/*      Name: do_fft                                                        */
+/*      Description: Compute the FFT of the array.                          */
+/*      Input parameters:                                                   */
+/*        - x: pointer on the source array (time).                          */
+/*      Output parameters:                                                  */
+/*        - f: pointer on the destination array (frequencies).              */
+/*             f [0...length(x)/2] = real values,                           */
+/*             f [length(x)/2+1...length(x)-1] = imaginary values of        */
+/*               coefficents 1...length(x)/2-1.                             */
+/*==========================================================================*)
+procedure TFFTReal.do_fft(f: pflt_array; const x: pflt_array);
+var
+   sf, df     : pflt_array;
+   pass       : integer;
+   nbr_coef   : longint;
+   h_nbr_coef : longint;
+   d_nbr_coef : longint;
+   coef_index : longint;
+   bit_rev_lut_ptr : plongarray;
+   rev_index_0 : longint;
+   rev_index_1 : longint;
+   rev_index_2 : longint;
+   rev_index_3 : longint;
+   df2         : pflt_array;
+   n1, n2, n3  : integer;
+   sf_0, sf_2  : flt_t;
+   sqrt2_2     : flt_t;
+   v           : flt_t;
+   cos_ptr     : pflt_array;
+   i           : longint;
+   sf1r, sf2r  : pflt_array;
+   dfr, dfi    : pflt_array;
+   sf1i, sf2i  : pflt_array;
+   c, s        : flt_t;
+   temp_ptr    : pflt_array;
+   b_0, b_2    : flt_t;
+begin
+  n1 := 1;
+  n2 := 2;
+  n3 := 3;
+
+  (*______________________________________________
+   *
+   * General case
+   *______________________________________________
+   *)
+
+  if _nbr_bits > 2 then
+  begin
+    if _nbr_bits and 1 <> 0 then
+    begin
+      df := pointer(_buffer_ptr);
+      sf := f;
+    end
+    else
+    begin
+      df := f;
+      sf := pointer(_buffer_ptr);
+    end;
+
+    //
+    // Do the transformation in several passes
+    //
+
+    // First and second pass at once
+    bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
+    coef_index := 0;
+
+    repeat
+      rev_index_0 := bit_rev_lut_ptr^[coef_index];
+      rev_index_1 := bit_rev_lut_ptr^[coef_index + 1];
+      rev_index_2 := bit_rev_lut_ptr^[coef_index + 2];
+      rev_index_3 := bit_rev_lut_ptr^[coef_index + 3];
+
+      df2 := pointer(longint(df) + (coef_index*sizeof_flt));
+      df2^[n1] := x^[rev_index_0] - x^[rev_index_1];
+      df2^[n3] := x^[rev_index_2] - x^[rev_index_3];
+
+      sf_0 := x^[rev_index_0] + x^[rev_index_1];
+      sf_2 := x^[rev_index_2] + x^[rev_index_3];
+
+      df2^[0] := sf_0 + sf_2;
+      df2^[n2] := sf_0 - sf_2;
+
+      inc(coef_index, 4);
+    until (coef_index >= _length);
+
+
+    // Third pass
+    coef_index := 0;
+    sqrt2_2 := _sqrt2_2;
+
+    repeat
+      sf^[coef_index] := df^[coef_index] + df^[coef_index + 4];
+      sf^[coef_index + 4] := df^[coef_index] - df^[coef_index + 4];
+      sf^[coef_index + 2] := df^[coef_index + 2];
+      sf^[coef_index + 6] := df^[coef_index + 6];
+
+      v := (df [coef_index + 5] - df^[coef_index + 7]) * sqrt2_2;
+      sf^[coef_index + 1] := df^[coef_index + 1] + v;
+      sf^[coef_index + 3] := df^[coef_index + 1] - v;
+
+      v := (df^[coef_index + 5] + df^[coef_index + 7]) * sqrt2_2;
+      sf [coef_index + 5] := v + df^[coef_index + 3];
+      sf [coef_index + 7] := v - df^[coef_index + 3];
+
+      inc(coef_index, 8);
+    until (coef_index >= _length);
+
+
+    // Next pass
+    for pass := 3 to _nbr_bits-1 do
+    begin
+      coef_index := 0;
+      nbr_coef := 1 shl pass;
+      h_nbr_coef := nbr_coef shr 1;
+      d_nbr_coef := nbr_coef shl 1;
+
+      cos_ptr := pointer(_trigo_lut.get_ptr(pass));
+      repeat
+        sf1r := pointer(longint(sf) + (coef_index * sizeof_flt));
+        sf2r := pointer(longint(sf1r) + (nbr_coef * sizeof_flt));
+        dfr := pointer(longint(df) + (coef_index * sizeof_flt));
+        dfi := pointer(longint(dfr) + (nbr_coef * sizeof_flt));
+
+        // Extreme coefficients are always real
+        dfr^[0] := sf1r^[0] + sf2r^[0];
+        dfi^[0] := sf1r^[0] - sf2r^[0];   // dfr [nbr_coef] =
+        dfr^[h_nbr_coef] := sf1r^[h_nbr_coef];
+        dfi^[h_nbr_coef] := sf2r^[h_nbr_coef];
+
+        // Others are conjugate complex numbers
+        sf1i := pointer(longint(sf1r) + (h_nbr_coef * sizeof_flt));
+        sf2i := pointer(longint(sf1i) + (nbr_coef * sizeof_flt));
+
+        for i := 1 to h_nbr_coef-1 do
+        begin
+          c := cos_ptr^[i];               // cos (i*PI/nbr_coef);
+          s := cos_ptr^[h_nbr_coef - i];  // sin (i*PI/nbr_coef);
+
+          v := sf2r^[i] * c - sf2i^[i] * s;
+          dfr^[i] := sf1r^[i] + v;
+          dfi^[-i] := sf1r^[i] - v;	// dfr [nbr_coef - i] =
+
+          v := sf2r^[i] * s + sf2i^[i] * c;
+          dfi^[i] := v + sf1i^[i];
+          dfi^[nbr_coef - i] := v - sf1i^[i];
+        end;
+
+        inc(coef_index, d_nbr_coef);
+      until (coef_index >= _length);
+
+      // Prepare to the next pass
+      temp_ptr := df;
+      df := sf;
+      sf := temp_ptr;
+    end;
+  end
+
+  (*______________________________________________
+   *
+   * Special cases
+   *______________________________________________
+   *)
+
+  // 4-point FFT
+  else if _nbr_bits = 2 then
+  begin
+    f^[n1] := x^[0] - x^[n2];
+    f^[n3] := x^[n1] - x^[n3];
+
+    b_0 := x^[0] + x^[n2];
+    b_2 := x^[n1] + x^[n3];
+
+    f^[0] := b_0 + b_2;
+    f^[n2] := b_0 - b_2;
+  end
+
+  // 2-point FFT
+  else if _nbr_bits = 1 then
+  begin
+    f^[0] := x^[0] + x^[n1];
+    f^[n1] := x^[0] - x^[n1];
+  end
+
+  // 1-point FFT
+  else
+    f^[0] := x^[0];
+end;
+
+
+(*==========================================================================*/
+/*      Name: do_ifft                                                       */
+/*      Description: Compute the inverse FFT of the array. Notice that      */
+/*                   IFFT (FFT (x)) = x * length (x). Data must be          */
+/*                   post-scaled.                                           */
+/*      Input parameters:                                                   */
+/*        - f: pointer on the source array (frequencies).                   */
+/*             f [0...length(x)/2] = real values,                           */
+/*             f [length(x)/2+1...length(x)-1] = imaginary values of        */
+/*               coefficents 1...length(x)/2-1.                             */
+/*      Output parameters:                                                  */
+/*        - x: pointer on the destination array (time).                     */
+/*==========================================================================*)
+procedure TFFTReal.do_ifft(const f: pflt_array; x: pflt_array);
+var
+   n1, n2, n3      : integer;
+   n4, n5, n6, n7  : integer;
+   sf, df, df_temp : pflt_array;
+   pass            : integer;
+   nbr_coef        : longint;
+   h_nbr_coef      : longint;
+   d_nbr_coef      : longint;
+   coef_index      : longint;
+   cos_ptr         : pflt_array;
+   i               : longint;
+   sfr, sfi        : pflt_array;
+   df1r, df2r      : pflt_array;
+   df1i, df2i      : pflt_array;
+   c, s, vr, vi    : flt_t;
+   temp_ptr        : pflt_array;
+   sqrt2_2         : flt_t;
+   bit_rev_lut_ptr : plongarray;
+   sf2             : pflt_array;
+   b_0, b_1, b_2, b_3 : flt_t;
+begin
+  n1 := 1;
+  n2 := 2;
+  n3 := 3;
+  n4 := 4;
+  n5 := 5;
+  n6 := 6;
+  n7 := 7;
+
+  (*______________________________________________
+   *
+   * General case
+   *______________________________________________
+   *)
+
+  if _nbr_bits > 2 then
+  begin
+    sf := f;
+
+    if _nbr_bits and 1 <> 0 then
+    begin
+      df := pointer(_buffer_ptr);
+      df_temp := x;
+    end
+    else
+    begin
+      df := x;
+      df_temp := pointer(_buffer_ptr);
+    end;
+
+    // Do the transformation in several pass
+
+    // First pass
+    for pass := _nbr_bits-1 downto 3 do
+    begin
+      coef_index := 0;
+      nbr_coef := 1 shl pass;
+      h_nbr_coef := nbr_coef shr 1;
+      d_nbr_coef := nbr_coef shl 1;
+
+      cos_ptr := pointer(_trigo_lut.get_ptr(pass));
+
+      repeat
+        sfr := pointer(longint(sf) + (coef_index*sizeof_flt));
+        sfi := pointer(longint(sfr) + (nbr_coef*sizeof_flt));
+        df1r := pointer(longint(df) + (coef_index*sizeof_flt));
+        df2r := pointer(longint(df1r) + (nbr_coef*sizeof_flt));
+
+        // Extreme coefficients are always real
+        df1r^[0] := sfr^[0] + sfi^[0];		// + sfr [nbr_coef]
+        df2r^[0] := sfr^[0] - sfi^[0];		// - sfr [nbr_coef]
+        df1r^[h_nbr_coef] := sfr^[h_nbr_coef] * 2;
+        df2r^[h_nbr_coef] := sfi^[h_nbr_coef] * 2;
+
+        // Others are conjugate complex numbers
+        df1i := pointer(longint(df1r) + (h_nbr_coef*sizeof_flt));
+        df2i := pointer(longint(df1i) + (nbr_coef*sizeof_flt));
+
+        for i := 1 to h_nbr_coef-1 do
+        begin
+          df1r^[i] := sfr^[i] + sfi^[-i];		// + sfr [nbr_coef - i]
+          df1i^[i] := sfi^[i] - sfi^[nbr_coef - i];
+
+          c := cos_ptr^[i];					// cos (i*PI/nbr_coef);
+          s := cos_ptr^[h_nbr_coef - i];	// sin (i*PI/nbr_coef);
+          vr := sfr^[i] - sfi^[-i];		// - sfr [nbr_coef - i]
+          vi := sfi^[i] + sfi^[nbr_coef - i];
+
+          df2r^[i] := vr * c + vi * s;
+          df2i^[i] := vi * c - vr * s;
+        end;
+
+        inc(coef_index, d_nbr_coef);
+      until (coef_index >= _length);
+
+
+      // Prepare to the next pass 
+      if (pass < _nbr_bits - 1) then
+      begin
+        temp_ptr := df;
+        df := sf;
+        sf := temp_ptr;
+      end
+      else
+      begin
+        sf := df;
+        df := df_temp;
+      end
+    end;
+
+    // Antepenultimate pass
+    sqrt2_2 := _sqrt2_2;
+    coef_index := 0;
+
+    repeat
+      df^[coef_index] := sf^[coef_index] + sf^[coef_index + 4];
+      df^[coef_index + 4] := sf^[coef_index] - sf^[coef_index + 4];
+      df^[coef_index + 2] := sf^[coef_index + 2] * 2;
+      df^[coef_index + 6] := sf^[coef_index + 6] * 2;
+
+      df^[coef_index + 1] := sf^[coef_index + 1] + sf^[coef_index + 3];
+      df^[coef_index + 3] := sf^[coef_index + 5] - sf^[coef_index + 7];
+
+      vr := sf^[coef_index + 1] - sf^[coef_index + 3];
+      vi := sf^[coef_index + 5] + sf^[coef_index + 7];
+
+      df^[coef_index + 5] := (vr + vi) * sqrt2_2;
+      df^[coef_index + 7] := (vi - vr) * sqrt2_2;
+
+      inc(coef_index, 8);
+    until (coef_index >= _length);
+
+
+    // Penultimate and last pass at once 
+    coef_index := 0;
+    bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
+    sf2 := df;
+
+    repeat
+      b_0 := sf2^[0] + sf2^[n2];
+      b_2 := sf2^[0] - sf2^[n2];
+      b_1 := sf2^[n1] * 2;
+      b_3 := sf2^[n3] * 2;
+
+      x^[bit_rev_lut_ptr^[0]] := b_0 + b_1;
+      x^[bit_rev_lut_ptr^[n1]] := b_0 - b_1;
+      x^[bit_rev_lut_ptr^[n2]] := b_2 + b_3;
+      x^[bit_rev_lut_ptr^[n3]] := b_2 - b_3;
+
+      b_0 := sf2^[n4] + sf2^[n6];
+      b_2 := sf2^[n4] - sf2^[n6];
+      b_1 := sf2^[n5] * 2;
+      b_3 := sf2^[n7] * 2;
+
+      x^[bit_rev_lut_ptr^[n4]] := b_0 + b_1;
+      x^[bit_rev_lut_ptr^[n5]] := b_0 - b_1;
+      x^[bit_rev_lut_ptr^[n6]] := b_2 + b_3;
+      x^[bit_rev_lut_ptr^[n7]] := b_2 - b_3;
+
+      inc(sf2, 8);
+      inc(coef_index, 8);
+      inc(bit_rev_lut_ptr, 8);
+    until (coef_index >= _length);
+  end
+
+  (*______________________________________________
+   *
+   * Special cases
+   *______________________________________________
+   *)
+
+  // 4-point IFFT
+  else if _nbr_bits = 2 then
+  begin
+    b_0 := f^[0] + f [n2];
+    b_2 := f^[0] - f [n2];
+
+    x^[0] := b_0 + f [n1] * 2;
+    x^[n2] := b_0 - f [n1] * 2;
+    x^[n1] := b_2 + f [n3] * 2;
+    x^[n3] := b_2 - f [n3] * 2;
+  end
+
+  // 2-point IFFT
+  else if _nbr_bits = 1 then
+  begin
+    x^[0] := f^[0] + f^[n1];
+    x^[n1] := f^[0] - f^[n1];
+  end
+
+  // 1-point IFFT
+  else
+    x^[0] := f^[0];
+end;
+
+(*==========================================================================*/
+/*      Name: rescale                                                       */
+/*      Description: Scale an array by divide each element by its length.   */
+/*                   This function should be called after FFT + IFFT.       */
+/*      Input/Output parameters:                                            */
+/*        - x: pointer on array to rescale (time or frequency).             */
+/*==========================================================================*)
+procedure TFFTReal.rescale(x: pflt_array);
+var
+   mul  : flt_t;
+   i    : longint;
+begin
+  mul := 1.0 / _length;
+  i := _length - 1;
+
+  repeat
+    x^[i] := x^[i] * mul;
+    dec(i);
+  until (i < 0);
+end;
+
+end.
Index: /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pro
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pro	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/fftreal.pro	(revision 769)
@@ -0,0 +1,48 @@
+TEMPLATE = lib
+TARGET   = fftreal
+
+# FFTReal
+HEADERS  += Array.h \
+            Array.hpp \
+            DynArray.h \
+            DynArray.hpp \
+            FFTRealFixLen.h \
+            FFTRealFixLen.hpp \
+            FFTRealFixLenParam.h \
+            FFTRealPassDirect.h \
+            FFTRealPassDirect.hpp \
+            FFTRealPassInverse.h \
+            FFTRealPassInverse.hpp \
+            FFTRealSelect.h \
+            FFTRealSelect.hpp \
+            FFTRealUseTrigo.h \
+            FFTRealUseTrigo.hpp \
+            OscSinCos.h \
+            OscSinCos.hpp \
+            def.h
+	    
+# Wrapper used to export the required instantiation of the FFTRealFixLen template
+HEADERS  += fftreal_wrapper.h
+SOURCES  += fftreal_wrapper.cpp
+
+DEFINES  += FFTREAL_LIBRARY
+
+symbian {
+    # Provide unique ID for the generated binary, required by Symbian OS
+    TARGET.UID3 = 0xA000E3FB
+    TARGET.CAPABILITY = UserEnvironment
+} else {
+    macx {
+        CONFIG += lib_bundle
+    } else {
+        DESTDIR = ../../bin
+    }
+} 
+
+# Install
+
+sources.files = $$SOURCES $$HEADERS fftreal.pro readme.txt license.txt
+sources.files += bwins/fftreal.def eabi/fftreal.def
+sources.path = $$[QT_INSTALL_DEMOS]/spectrum/3rdparty/fftreal
+INSTALLS += sources
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp	(revision 769)
@@ -0,0 +1,54 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU Lesser General Public License as
+** published by the Free Software Foundation, either version 2.1. This
+** program is distributed in the hope that it will be useful, but WITHOUT
+** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+** for more details. You should have received a copy of the GNU General
+** Public License along with this program. If not, see
+** <http://www.gnu.org/licenses/>.
+**
+***************************************************************************/
+
+#include "fftreal_wrapper.h"
+
+// FFTReal code generates quite a lot of 'unused parameter' compiler warnings,
+// which we suppress here in order to get a clean build output.
+#if defined Q_CC_MSVC
+#    pragma warning(disable:4100)
+#elif defined Q_CC_GNU
+#    pragma GCC diagnostic ignored "-Wunused-parameter"
+#elif defined Q_CC_MWERKS
+#    pragma warning off (10182)
+#endif
+
+#include "FFTRealFixLen.h"
+
+class FFTRealWrapperPrivate {
+public:
+    FFTRealFixLen<FFTLengthPowerOfTwo> m_fft;
+};
+
+
+FFTRealWrapper::FFTRealWrapper()
+    :   m_private(new FFTRealWrapperPrivate)
+{
+
+}
+
+FFTRealWrapper::~FFTRealWrapper()
+{
+    delete m_private;
+}
+
+void FFTRealWrapper::calculateFFT(DataType in[], const DataType out[])
+{
+    m_private->m_fft.do_fft(in, out);
+}
Index: /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/fftreal_wrapper.h	(revision 769)
@@ -0,0 +1,63 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU Lesser General Public License as
+** published by the Free Software Foundation, either version 2.1. This
+** program is distributed in the hope that it will be useful, but WITHOUT
+** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+** for more details. You should have received a copy of the GNU General
+** Public License along with this program. If not, see
+** <http://www.gnu.org/licenses/>.
+**
+***************************************************************************/
+
+#ifndef FFTREAL_WRAPPER_H
+#define FFTREAL_WRAPPER_H
+
+#include <QtCore/QtGlobal>
+
+#if defined(FFTREAL_LIBRARY)
+#  define FFTREAL_EXPORT Q_DECL_EXPORT
+#else
+#  define FFTREAL_EXPORT Q_DECL_IMPORT
+#endif
+
+class FFTRealWrapperPrivate;
+
+// Each pass of the FFT processes 2^X samples, where X is the
+// number below.
+static const int FFTLengthPowerOfTwo = 12;
+
+/**
+ * Wrapper around the FFTRealFixLen template provided by the FFTReal
+ * library
+ *
+ * This class instantiates a single instance of FFTRealFixLen, using
+ * FFTLengthPowerOfTwo as the template parameter.  It then exposes
+ * FFTRealFixLen<FFTLengthPowerOfTwo>::do_fft via the calculateFFT
+ * function, thereby allowing an application to dynamically link
+ * against the FFTReal implementation.
+ *
+ * See http://ldesoras.free.fr/prod.html
+ */
+class FFTREAL_EXPORT FFTRealWrapper
+{
+public:
+    FFTRealWrapper();
+    ~FFTRealWrapper();
+
+    typedef float DataType;
+    void calculateFFT(DataType in[], const DataType out[]);
+
+private:
+    FFTRealWrapperPrivate*  m_private;
+};
+
+#endif // FFTREAL_WRAPPER_H
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/license.txt
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/license.txt	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/license.txt	(revision 769)
@@ -0,0 +1,467 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/readme.txt
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/readme.txt	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/readme.txt	(revision 769)
@@ -0,0 +1,242 @@
+==============================================================================
+
+        FFTReal
+        Version 2.00, 2005/10/18
+
+        Fourier transformation (FFT, IFFT) library specialised for real data
+        Portable ISO C++
+
+        (c) Laurent de Soras <laurent.de.soras@club-internet.fr>
+        Object Pascal port (c) Frederic Vanmol <frederic@fruityloops.com>
+
+==============================================================================
+
+
+
+1. Legal
+--------
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Check the file license.txt to get full information about the license.
+
+
+
+2. Content
+----------
+
+FFTReal is a library to compute Discrete Fourier Transforms (DFT) with the
+FFT algorithm (Fast Fourier Transform) on arrays of real numbers. It can
+also compute the inverse transform.
+
+You should find in this package a lot of files ; some of them are of interest:
+- readme.txt: you are reading it
+- FFTReal.h: FFT, length fixed at run-time
+- FFTRealFixLen.h: FFT, length fixed at compile-time
+- FFTReal.pas: Pascal implementation (working but not up-to-date)
+- stopwatch directory
+
+
+
+3. Using FFTReal
+----------------
+
+Important - if you were using older versions of FFTReal (up to 1.03), some
+things have changed. FFTReal is now a template. Therefore use FFTReal<float>
+or FFTReal<double> in your code depending on the application datatype. The
+flt_t typedef has been removed.
+
+You have two ways to use FFTReal. In the first way, the FFT has its length
+fixed at run-time, when the object is instanciated. It means that you have
+not to know the length when you write the code. This is the usual way of
+proceeding.
+
+
+3.1 FFTReal - Length fixed at run-time
+--------------------------------------
+
+Just instanciate one time a FFTReal object. Specify the data type you want
+as template parameter (only floating point: float, double, long double or
+custom type). The constructor precompute a lot of things, so it may be a bit
+long. The parameter is the number of points used for the next FFTs. It must
+be a power of 2:
+
+   #include "FFTReal.h"
+   ...
+   long len = 1024;
+   ...
+   FFTReal <float> fft_object (len);   // 1024-point FFT object constructed.
+
+Then you can use this object to compute as many FFTs and IFFTs as you want.
+They will be computed very quickly because a lot of work has been done in the
+object construction.
+
+   float x [1024];
+   float f [1024];
+
+   ...
+   fft_object.do_fft (f, x);     // x (real) --FFT---> f (complex)
+   ...
+   fft_object.do_ifft (f, x);    // f (complex) --IFFT--> x (real)
+   fft_object.rescale (x);       // Post-scaling should be done after FFT+IFFT
+   ...
+
+x [] and f [] are floating point number arrays. x [] is the real number
+sequence which we want to compute the FFT. f [] is the result, in the
+"frequency" domain. f has the same number of elements as x [], but f []
+elements are complex numbers. The routine uses some FFT properties to
+optimize memory and to reduce calculations: the transformaton of a real
+number sequence is a conjugate complex number sequence: F [k] = F [-k]*.
+
+
+3.2 FFTRealFixLen - Length fixed at compile-time
+------------------------------------------------
+
+This class is significantly faster than the previous one, giving a speed
+gain between 50 and 100 %. The template parameter is the base-2 logarithm of
+the FFT length. The datatype is float; it can be changed by modifying the
+DataType typedef in FFTRealFixLenParam.h. As FFTReal class, it supports
+only floating-point types or equivalent.
+
+To instanciate the object, just proceed as below:
+
+   #include "FFTRealFixLen.h"
+   ...
+   FFTRealFixLen <10> fft_object; // 1024-point (2^10) FFT object constructed.
+
+Use is similar as the one of FFTReal.
+
+
+3.3 Data organisation
+---------------------
+
+Mathematically speaking, the formulas below show what does FFTReal:
+
+do_fft() : f(k) = sum (p = 0, N-1, x(p) * exp (+j*2*pi*k*p/N))
+do_ifft(): x(k) = sum (p = 0, N-1, f(p) * exp (-j*2*pi*k*p/N))
+
+Where j is the square root of -1. The formulas differ only by the sign of
+the exponential. When the sign is positive, the transform is called positive.
+Common formulas for Fourier transform are negative for the direct tranform and
+positive for the inverse one.
+
+However in these formulas, f is an array of complex numbers and doesn't
+correspound exactly to the f[] array taken as function parameter. The
+following table shows how the f[] sequence is mapped onto the usable FFT
+coefficients (called bins):
+
+   FFTReal output | Positive FFT equiv.   | Negative FFT equiv.
+   ---------------+-----------------------+-----------------------
+   f [0]          | Real (bin 0)          | Real (bin 0)
+   f [...]        | Real (bin ...)        | Real (bin ...)
+   f [length/2]   | Real (bin length/2)   | Real (bin length/2)
+   f [length/2+1] | Imag (bin 1)          | -Imag (bin 1)
+   f [...]        | Imag (bin ...)        | -Imag (bin ...)
+   f [length-1]   | Imag (bin length/2-1) | -Imag (bin length/2-1)
+
+And FFT bins are distributed in f [] as above:
+
+               |                | Positive FFT    | Negative FFT
+   Bin         | Real part      | imaginary part  | imaginary part
+   ------------+----------------+-----------------+---------------
+   0           | f [0]          | 0               | 0
+   1           | f [1]          | f [length/2+1]  | -f [length/2+1]
+   ...         | f [...],       | f [...]         | -f [...]
+   length/2-1  | f [length/2-1] | f [length-1]    | -f [length-1]
+   length/2    | f [length/2]   | 0               | 0
+   length/2+1  | f [length/2-1] | -f [length-1]   | f [length-1]
+   ...         | f [...]        | -f [...]        | f [...]
+   length-1    | f [1]          | -f [length/2+1] | f [length/2+1]
+
+f [] coefficients have the same layout for FFT and IFFT functions. You may
+notice that scaling must be done if you want to retrieve x after FFT and IFFT.
+Actually, IFFT (FFT (x)) = x * length(x). This is a not a problem because
+most of the applications don't care about absolute values. Thus, the operation
+requires less calculation. If you want to use the FFT and IFFT to transform a
+signal, you have to apply post- (or pre-) processing yourself. Multiplying
+or dividing floating point numbers by a power of 2 doesn't generate extra
+computation noise.
+
+
+
+4. Compilation and testing
+--------------------------
+
+Drop the following files into your project or makefile:
+
+Array.*
+def.h
+DynArray.*
+FFTReal*.cpp
+FFTReal*.h*
+OscSinCos.*
+
+Other files are for testing purpose only, do not include them if you just need
+to use the library ; they are not needed to use FFTReal in your own programs.
+
+FFTReal may be compiled in two versions: release and debug. Debug version
+has checks that could slow down the code. Define NDEBUG to set the Release
+mode. For example, the command line to compile the test bench on GCC would
+look like:
+
+Debug mode:
+g++ -Wall -o fftreal_debug.exe *.cpp stopwatch/*.cpp
+
+Release mode:
+g++ -Wall -o fftreal_release.exe -DNDEBUG -O3 *.cpp stopwatch/*.cpp
+
+It may be tricky to compile the test bench because the speed tests use the
+stopwatch sub-library, which is not that cross-platform. If you encounter
+any problem that you cannot easily fix while compiling it, edit the file
+test_settings.h and un-define the speed test macro. Remove the stopwatch
+directory from your source file list, too.
+
+If it's not done by default, you should activate the exception handling
+of your compiler to get the class memory-leak-safe. Thus, when a memory
+allocation fails (in the constructor), an exception is thrown and the entire
+object is safely destructed. It reduces the permanent error checking overhead
+in the client code. Also, the test bench requires Run-Time Type Information
+(RTTI) to be enabled in order to display the names of the tested classes -
+sometimes mangled, depending on the compiler.
+
+The test bench may take a long time to compile, especially in Release mode,
+because a lot of recursive templates are instanciated.
+
+
+
+5. History
+----------
+
+v2.00 (2005.10.18)
+- Turned FFTReal class into template (data type as parameter)
+- Added FFTRealFixLen
+- Trigonometric tables are size-limited in order to preserve cache memory;
+over a given size, sin/cos functions are computed on the fly.
+- Better test bench for accuracy and speed
+
+v1.03 (2001.06.15)
+- Thanks to Frederic Vanmol for the Pascal port (works with Delphi).
+- Documentation improvement
+
+v1.02 (2001.03.25)
+- sqrt() is now precomputed when the object FFTReal is constructed, resulting
+in speed impovement for small size FFT.
+
+v1.01 (2000)
+- Small modifications, I don't remember what.
+
+v1.00 (1999.08.14)
+- First version released
+
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.cpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.cpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.cpp	(revision 769)
@@ -0,0 +1,285 @@
+/*****************************************************************************
+
+        ClockCycleCounter.cpp
+        Copyright (c) 2003 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (_MSC_VER)
+	#pragma warning (1 : 4130) // "'operator' : logical operation on address of string constant"
+	#pragma warning (1 : 4223) // "nonstandard extension used : non-lvalue array converted to pointer"
+	#pragma warning (1 : 4705) // "statement has no effect"
+	#pragma warning (1 : 4706) // "assignment within conditional expression"
+	#pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
+	#pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
+	#pragma warning (4 : 4355) // "'this' : used in base member initializer list"
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"ClockCycleCounter.h"
+
+#include	<cassert>
+
+
+
+namespace stopwatch
+{
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*
+==============================================================================
+Name: ctor
+Description:
+	The first object constructed initialise global data. This first
+	construction may be a bit slow.
+Throws: Nothing
+==============================================================================
+*/
+
+ClockCycleCounter::ClockCycleCounter ()
+:	_start_time (0)
+,	_state (0)
+,	_best_score (-1)
+{
+	if (! _init_flag)
+	{
+		// Should be executed in this order
+		compute_clk_mul ();
+		compute_measure_time_total ();
+		compute_measure_time_lap ();
+
+		// Restores object state
+		_start_time = 0;
+		_state      = 0;
+		_best_score = -1;
+
+		_init_flag = true;
+	}
+}
+
+
+
+/*
+==============================================================================
+Name: get_time_total
+Description:
+	Gives the time elapsed between the latest stop_lap() and start() calls.
+Returns:
+	The duration, in clock cycles.
+Throws: Nothing
+==============================================================================
+*/
+
+Int64	ClockCycleCounter::get_time_total () const
+{
+	const Int64		duration = _state - _start_time;
+	assert (duration >= 0);
+
+	const Int64		t = max (
+		duration - _measure_time_total,
+		static_cast <Int64> (0)
+	);
+
+	return (t * _clk_mul);
+}
+
+
+
+/*
+==============================================================================
+Name: get_time_best_lap
+Description:
+	Gives the smallest time between two consecutive stop_lap() or between
+	the stop_lap() and start(). The value is reset by a call to start().
+	Call this function only after a stop_lap().
+	The time is amputed from the duration of the stop_lap() call itself.
+Returns:
+	The smallest duration, in clock cycles.
+Throws: Nothing
+==============================================================================
+*/
+
+Int64	ClockCycleCounter::get_time_best_lap () const
+{
+	assert (_best_score >= 0);
+
+	const Int64		t1 = max (
+		_best_score - _measure_time_lap,
+		static_cast <Int64> (0)
+	);
+	const Int64		t = min (t1, get_time_total ());
+
+	return (t * _clk_mul);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+#if defined (__MACOS__)
+
+static inline double	stopwatch_ClockCycleCounter_get_time_s ()
+{
+	const Nanoseconds	ns = AbsoluteToNanoseconds (UpTime ());
+
+	return (ns.hi * 4294967296e-9 + ns.lo * 1e-9);
+}
+
+#endif	// __MACOS__
+
+
+
+/*
+==============================================================================
+Name: compute_clk_mul
+Description:
+	This function, only for PowerPC/MacOS computers, computes the multiplier
+	required to deduce clock cycles from the internal counter.
+Throws: Nothing
+==============================================================================
+*/
+
+void	ClockCycleCounter::compute_clk_mul ()
+{
+	assert (! _init_flag);
+
+#if defined (__MACOS__)
+
+	long				clk_speed_mhz = CurrentProcessorSpeed ();
+	const Int64		clk_speed =
+		static_cast <Int64> (clk_speed_mhz) * (1000L*1000L);
+
+	const double	start_time_s = stopwatch_ClockCycleCounter_get_time_s ();
+	start ();
+
+	const double	duration = 0.01;	// Seconds
+	while (stopwatch_ClockCycleCounter_get_time_s () - start_time_s < duration)
+	{
+		continue;
+	}
+
+	const double	stop_time_s = stopwatch_ClockCycleCounter_get_time_s ();
+	stop ();
+
+	const double	diff_time_s = stop_time_s - start_time_s;
+	const double	nbr_cycles = diff_time_s * static_cast <double> (clk_speed);
+
+	const Int64		diff_time_c = _state - _start_time;
+	const double	clk_mul = nbr_cycles / static_cast <double> (diff_time_c);
+
+	_clk_mul = round_int (clk_mul);
+
+#endif	// __MACOS__
+}
+
+
+
+void	ClockCycleCounter::compute_measure_time_total ()
+{
+	start ();
+	spend_time ();
+
+	Int64				best_result = 0x7FFFFFFFL;	// Should be enough
+	long				nbr_tests = 100;
+	for (long cnt = 0; cnt < nbr_tests; ++cnt)
+	{
+		start ();
+		stop_lap ();
+		const Int64		duration = _state - _start_time;
+		best_result = min (best_result, duration);
+	}
+
+	_measure_time_total = best_result;
+}
+
+
+
+/*
+==============================================================================
+Name: compute_measure_time_lap
+Description:
+	Computes the duration of one stop_lap() call and store it. It will be used
+	later to get the real duration of the measured operation (by substracting
+	the measurement duration).
+Throws: Nothing
+==============================================================================
+*/
+
+void	ClockCycleCounter::compute_measure_time_lap ()
+{
+	start ();
+	spend_time ();
+
+	long				nbr_tests = 10;
+	for (long cnt = 0; cnt < nbr_tests; ++cnt)
+	{
+		stop_lap ();
+		stop_lap ();
+		stop_lap ();
+		stop_lap ();
+	}
+
+	_measure_time_lap = _best_score;
+}
+
+
+
+void	ClockCycleCounter::spend_time ()
+{
+	const Int64		nbr_clocks = 500;	// Number of clock cycles to spend
+
+	const Int64		start = read_clock_counter ();
+	Int64				current;
+
+	do
+	{
+		current = read_clock_counter ();
+	}
+	while ((current - start) * _clk_mul < nbr_clocks);
+}
+
+
+
+Int64	ClockCycleCounter::_measure_time_total = 0;
+Int64	ClockCycleCounter::_measure_time_lap = 0;
+int	ClockCycleCounter::_clk_mul = 1;
+bool	ClockCycleCounter::_init_flag = false;
+
+
+}	// namespace stopwatch
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.h	(revision 769)
@@ -0,0 +1,124 @@
+/*****************************************************************************
+
+        ClockCycleCounter.h
+        Copyright (c) 2003 Laurent de Soras
+
+Instrumentation class, for accurate time interval measurement. You may have
+to modify the implementation to adapt it to your system and/or compiler.
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (stopwatch_ClockCycleCounter_HEADER_INCLUDED)
+#define	stopwatch_ClockCycleCounter_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"def.h"
+#include	"Int64.h"
+
+
+
+namespace stopwatch
+{
+
+
+
+class ClockCycleCounter
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+						ClockCycleCounter ();
+
+	stopwatch_FORCEINLINE void
+						start ();
+	stopwatch_FORCEINLINE void
+						stop_lap ();
+	Int64				get_time_total () const;
+	Int64				get_time_best_lap () const;
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	void				compute_clk_mul ();
+	void				compute_measure_time_total ();
+	void				compute_measure_time_lap ();
+
+	static void		spend_time ();
+	static stopwatch_FORCEINLINE Int64
+						read_clock_counter ();
+
+	Int64				_start_time;
+	Int64				_state;
+	Int64				_best_score;
+
+	static Int64	_measure_time_total;
+	static Int64	_measure_time_lap;
+	static int		_clk_mul;
+	static bool		_init_flag;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						ClockCycleCounter (const ClockCycleCounter &other);
+	ClockCycleCounter &
+						operator = (const ClockCycleCounter &other);
+	bool				operator == (const ClockCycleCounter &other);
+	bool				operator != (const ClockCycleCounter &other);
+
+};	// class ClockCycleCounter
+
+
+
+}	// namespace stopwatch
+
+
+
+#include	"ClockCycleCounter.hpp"
+
+
+
+#endif	// stopwatch_ClockCycleCounter_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/ClockCycleCounter.hpp	(revision 769)
@@ -0,0 +1,150 @@
+/*****************************************************************************
+
+        ClockCycleCounter.hpp
+        Copyright (c) 2003 Laurent de Soras
+
+Please complete the definitions according to your compiler/architecture.
+It's not a big deal if it's not possible to get the clock count...
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (stopwatch_ClockCycleCounter_CURRENT_CODEHEADER)
+	#error Recursive inclusion of ClockCycleCounter code header.
+#endif
+#define	stopwatch_ClockCycleCounter_CURRENT_CODEHEADER
+
+#if ! defined (stopwatch_ClockCycleCounter_CODEHEADER_INCLUDED)
+#define	stopwatch_ClockCycleCounter_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"fnc.h"
+
+#include	<climits>
+
+
+
+namespace stopwatch
+{
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*
+==============================================================================
+Name: start
+Description:
+	Starts the counter.
+Throws: Nothing
+==============================================================================
+*/
+
+void	ClockCycleCounter::start ()
+{
+	_best_score = (static_cast <Int64> (1) << (sizeof (Int64) * CHAR_BIT - 2));
+	const Int64		start_clock = read_clock_counter ();
+	_start_time = start_clock;
+	_state = start_clock - _best_score;
+}
+
+
+
+/*
+==============================================================================
+Name: stop_lap
+Description:
+	Captures the current time and updates the smallest duration between two
+	consecutive calls to stop_lap() or the latest start().
+	start() must have been called at least once before calling this function.
+Throws: Nothing
+==============================================================================
+*/
+
+void	ClockCycleCounter::stop_lap ()
+{
+	const Int64		end_clock = read_clock_counter ();
+	_best_score = min (end_clock - _state, _best_score);
+	_state = end_clock;
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+Int64	ClockCycleCounter::read_clock_counter ()
+{
+	register Int64		clock_cnt;
+
+#if defined (_MSC_VER)
+
+	__asm
+	{
+		lea				edi, clock_cnt
+		rdtsc
+		mov				[edi    ], eax
+		mov				[edi + 4], edx
+	}
+
+#elif defined (__GNUC__) && defined (__i386__)
+
+	__asm__ __volatile__ ("rdtsc" : "=A" (clock_cnt));
+
+#elif (__MWERKS__) && defined (__POWERPC__) 
+	
+	asm
+	{
+	loop:
+		mftbu			clock_cnt@hiword
+		mftb			clock_cnt@loword
+		mftbu			r5
+		cmpw			clock_cnt@hiword,r5
+		bne loop
+	}
+	
+#endif
+
+	return (clock_cnt);
+}
+
+
+
+}	// namespace stopwatch
+
+
+
+#endif	// stopwatch_ClockCycleCounter_CODEHEADER_INCLUDED
+
+#undef stopwatch_ClockCycleCounter_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/Int64.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/Int64.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/Int64.h	(revision 769)
@@ -0,0 +1,71 @@
+/*****************************************************************************
+
+        Int64.h
+        Copyright (c) 2003 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (stopwatch_Int64_HEADER_INCLUDED)
+#define	stopwatch_Int64_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+namespace stopwatch
+{
+
+
+#if defined (_MSC_VER)
+
+	typedef	__int64	Int64;
+
+#elif defined (__MWERKS__) || defined (__GNUC__)
+
+	typedef	long long	Int64;
+
+#elif defined (__BEOS__)
+
+	typedef	int64	Int64;
+
+#else
+
+	#error No 64-bit integer type defined for this compiler !
+
+#endif
+
+
+}	// namespace stopwatch
+
+
+
+#endif	// stopwatch_Int64_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.cpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.cpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.cpp	(revision 769)
@@ -0,0 +1,101 @@
+/*****************************************************************************
+
+        StopWatch.cpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (_MSC_VER)
+	#pragma warning (1 : 4130) // "'operator' : logical operation on address of string constant"
+	#pragma warning (1 : 4223) // "nonstandard extension used : non-lvalue array converted to pointer"
+	#pragma warning (1 : 4705) // "statement has no effect"
+	#pragma warning (1 : 4706) // "assignment within conditional expression"
+	#pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
+	#pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
+	#pragma warning (4 : 4355) // "'this' : used in base member initializer list"
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"StopWatch.h"
+
+#include	<cassert>
+
+
+
+namespace stopwatch
+{
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+StopWatch::StopWatch ()
+:	_ccc ()
+,	_nbr_laps (0)
+{
+	// Nothing
+}
+
+
+
+double	StopWatch::get_time_total (Int64 nbr_op) const
+{
+	assert (_nbr_laps > 0);
+	assert (nbr_op > 0);
+
+	return (
+		  static_cast <double> (_ccc.get_time_total ())
+	   / (static_cast <double> (nbr_op) * static_cast <double> (_nbr_laps))
+	);
+}
+
+
+
+double	StopWatch::get_time_best_lap (Int64 nbr_op) const
+{
+	assert (nbr_op > 0);
+
+	return (
+		  static_cast <double> (_ccc.get_time_best_lap ())
+		/ static_cast <double> (nbr_op)
+	);
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+}	// namespace stopwatch
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.h	(revision 769)
@@ -0,0 +1,110 @@
+/*****************************************************************************
+
+        StopWatch.h
+        Copyright (c) 2005 Laurent de Soras
+
+Utility class based on ClockCycleCounter to measure the unit time of a
+repeated operation.
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (stopwatch_StopWatch_HEADER_INCLUDED)
+#define	stopwatch_StopWatch_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"ClockCycleCounter.h"
+
+
+
+namespace stopwatch
+{
+
+
+
+class StopWatch
+{
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+public:
+
+						StopWatch ();
+
+	stopwatch_FORCEINLINE void
+						start ();
+	stopwatch_FORCEINLINE void
+						stop_lap ();
+
+	double			get_time_total (Int64 nbr_op) const;
+	double			get_time_best_lap (Int64 nbr_op) const;
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+protected:
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+	ClockCycleCounter
+						_ccc;
+	Int64				_nbr_laps;
+
+
+
+/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+private:
+
+						StopWatch (const StopWatch &other);
+	StopWatch &		operator = (const StopWatch &other);
+	bool				operator == (const StopWatch &other);
+	bool				operator != (const StopWatch &other);
+
+};	// class StopWatch
+
+
+
+}	// namespace stopwatch
+
+
+
+#include	"StopWatch.hpp"
+
+
+
+#endif	// stopwatch_StopWatch_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/StopWatch.hpp	(revision 769)
@@ -0,0 +1,83 @@
+/*****************************************************************************
+
+        StopWatch.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (stopwatch_StopWatch_CURRENT_CODEHEADER)
+	#error Recursive inclusion of StopWatch code header.
+#endif
+#define	stopwatch_StopWatch_CURRENT_CODEHEADER
+
+#if ! defined (stopwatch_StopWatch_CODEHEADER_INCLUDED)
+#define	stopwatch_StopWatch_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+namespace stopwatch
+{
+
+
+
+/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+void	StopWatch::start ()
+{
+	_nbr_laps = 0;
+	_ccc.start ();
+}
+
+
+
+void	StopWatch::stop_lap ()
+{
+	_ccc.stop_lap ();
+	++ _nbr_laps;
+}
+
+
+
+/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+}	// namespace stopwatch
+
+
+
+#endif	// stopwatch_StopWatch_CODEHEADER_INCLUDED
+
+#undef stopwatch_StopWatch_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/def.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/def.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/def.h	(revision 769)
@@ -0,0 +1,65 @@
+/*****************************************************************************
+
+        def.h
+        Copyright (c) 2003 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (stopwatch_def_HEADER_INCLUDED)
+#define	stopwatch_def_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+namespace stopwatch
+{
+
+
+
+#if defined (_MSC_VER)
+
+	#define	stopwatch_FORCEINLINE	__forceinline
+
+#else
+
+	#define	stopwatch_FORCEINLINE	inline
+
+#endif
+
+
+
+}	// namespace stopwatch
+
+
+
+#endif	// stopwatch_def_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.h	(revision 769)
@@ -0,0 +1,67 @@
+/*****************************************************************************
+
+        fnc.h
+        Copyright (c) 2003 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (stopwatch_fnc_HEADER_INCLUDED)
+#define	stopwatch_fnc_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+namespace stopwatch
+{
+
+
+
+template <typename T>
+inline T	min (T a, T b);
+
+template <typename T>
+inline T	max (T a, T b);
+
+inline int	round_int (double x);
+
+
+
+}	// namespace rsp
+
+
+
+#include	"fnc.hpp"
+
+
+
+#endif	// stopwatch_fnc_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/stopwatch/fnc.hpp	(revision 769)
@@ -0,0 +1,85 @@
+/*****************************************************************************
+
+        fnc.hpp
+        Copyright (c) 2003 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (stopwatch_fnc_CURRENT_CODEHEADER)
+	#error Recursive inclusion of fnc code header.
+#endif
+#define	stopwatch_fnc_CURRENT_CODEHEADER
+
+#if ! defined (stopwatch_fnc_CODEHEADER_INCLUDED)
+#define	stopwatch_fnc_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	<cassert>
+#include	<cmath>
+
+namespace std {}
+
+
+
+namespace stopwatch
+{
+
+
+
+template <typename T>
+inline T	min (T a, T b)
+{
+	return ((a < b) ? a : b);
+}
+
+
+
+template <typename T>
+inline T	max (T a, T b)
+{
+	return ((b < a) ? a : b);
+}
+
+
+
+int	round_int (double x)
+{
+	using namespace std;
+
+	return (static_cast <int> (floor (x + 0.5)));
+}
+
+
+
+}	// namespace stopwatch
+
+
+
+#endif	// stopwatch_fnc_CODEHEADER_INCLUDED
+
+#undef stopwatch_fnc_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/test.cpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/test.cpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/test.cpp	(revision 769)
@@ -0,0 +1,267 @@
+/*****************************************************************************
+
+        test.cpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (_MSC_VER)
+	#pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
+	#pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+#include	"test_settings.h"
+#include	"TestHelperFixLen.h"
+#include	"TestHelperNormal.h"
+
+#if defined (_MSC_VER)
+#include	<crtdbg.h>
+#include	<new.h>
+#endif	// _MSC_VER
+
+#include	<new>
+
+#include	<cassert>
+#include	<cstdio>
+
+
+
+#define	TEST_
+
+
+/*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+static int	TEST_perform_test_accuracy_all ();
+static int	TEST_perform_test_speed_all ();
+
+static void	TEST_prog_init ();
+static void	TEST_prog_end ();
+
+
+
+int main (int argc, char *argv [])
+{
+	using namespace std;
+
+	int				ret_val = 0;
+
+	TEST_prog_init ();
+
+	try
+	{
+		if (ret_val == 0)
+		{
+			ret_val = TEST_perform_test_accuracy_all ();
+		}
+
+		if (ret_val == 0)
+		{
+			ret_val = TEST_perform_test_speed_all ();
+		}
+	}
+
+	catch (std::exception &e)
+	{
+		printf ("\n*** main(): Exception (std::exception) : %s\n", e.what ());
+		ret_val = -1;
+	}
+
+	catch (...)
+	{
+		printf ("\n*** main(): Undefined exception\n");
+		ret_val = -1;
+	}
+
+	TEST_prog_end ();
+
+	return (ret_val);
+}
+
+
+
+int	TEST_perform_test_accuracy_all ()
+{
+   int            ret_val = 0;
+
+	TestHelperNormal <float >::perform_test_accuracy (ret_val);
+	TestHelperNormal <double>::perform_test_accuracy (ret_val);
+
+   TestHelperFixLen < 1>::perform_test_accuracy (ret_val);
+   TestHelperFixLen < 2>::perform_test_accuracy (ret_val);
+   TestHelperFixLen < 3>::perform_test_accuracy (ret_val);
+   TestHelperFixLen < 4>::perform_test_accuracy (ret_val);
+   TestHelperFixLen < 7>::perform_test_accuracy (ret_val);
+   TestHelperFixLen < 8>::perform_test_accuracy (ret_val);
+   TestHelperFixLen <10>::perform_test_accuracy (ret_val);
+   TestHelperFixLen <12>::perform_test_accuracy (ret_val);
+   TestHelperFixLen <13>::perform_test_accuracy (ret_val);
+
+	return (ret_val);
+}
+
+
+
+int	TEST_perform_test_speed_all ()
+{
+   int            ret_val = 0;
+
+#if defined (test_settings_SPEED_TEST_ENABLED)
+
+	TestHelperNormal <float >::perform_test_speed (ret_val);
+	TestHelperNormal <double>::perform_test_speed (ret_val);
+
+   TestHelperFixLen < 1>::perform_test_speed (ret_val);
+   TestHelperFixLen < 2>::perform_test_speed (ret_val);
+   TestHelperFixLen < 3>::perform_test_speed (ret_val);
+   TestHelperFixLen < 4>::perform_test_speed (ret_val);
+   TestHelperFixLen < 7>::perform_test_speed (ret_val);
+   TestHelperFixLen < 8>::perform_test_speed (ret_val);
+   TestHelperFixLen <10>::perform_test_speed (ret_val);
+   TestHelperFixLen <12>::perform_test_speed (ret_val);
+   TestHelperFixLen <14>::perform_test_speed (ret_val);
+   TestHelperFixLen <16>::perform_test_speed (ret_val);
+   TestHelperFixLen <20>::perform_test_speed (ret_val);
+
+#endif
+
+   return (ret_val);
+}
+
+
+
+#if defined (_MSC_VER)
+static int __cdecl	TEST_new_handler_cb (size_t dummy)
+{
+	throw std::bad_alloc ();
+	return (0);
+}
+#endif	// _MSC_VER
+
+
+
+#if defined (_MSC_VER) && ! defined (NDEBUG)
+static int	__cdecl	TEST_debug_alloc_hook_cb (int alloc_type, void *user_data_ptr, size_t size, int block_type, long request_nbr, const unsigned char *filename_0, int line_nbr)
+{
+	if (block_type != _CRT_BLOCK)	// Ignore CRT blocks to prevent infinite recursion
+	{
+		switch (alloc_type)
+		{
+		case	_HOOK_ALLOC:
+		case	_HOOK_REALLOC:
+		case	_HOOK_FREE:
+
+			// Put some debug code here
+
+			break;
+
+		default:
+			assert (false);	// Undefined allocation type
+			break;
+		}
+	}
+
+	return (1);
+}
+#endif
+
+
+
+#if defined (_MSC_VER) && ! defined (NDEBUG)
+static int	__cdecl	TEST_debug_report_hook_cb (int report_type, char *user_msg_0, int *ret_val_ptr)
+{
+	*ret_val_ptr = 0;	// 1 to override the CRT default reporting mode
+
+	switch (report_type)
+	{
+	case	_CRT_WARN:
+	case	_CRT_ERROR:
+	case	_CRT_ASSERT:
+
+// Put some debug code here
+
+		break;
+	}
+
+	return (*ret_val_ptr);
+}
+#endif
+
+
+
+static void	TEST_prog_init ()
+{
+#if defined (_MSC_VER)
+	::_set_new_handler (::TEST_new_handler_cb);
+#endif	// _MSC_VER
+
+#if defined (_MSC_VER) && ! defined (NDEBUG)
+	{
+		const int	mode =   (1 * _CRTDBG_MODE_DEBUG)
+						       | (1 * _CRTDBG_MODE_WNDW);
+		::_CrtSetReportMode (_CRT_WARN, mode);
+		::_CrtSetReportMode (_CRT_ERROR, mode);
+		::_CrtSetReportMode (_CRT_ASSERT, mode);
+
+		const int	old_flags = ::_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
+		::_CrtSetDbgFlag (  old_flags
+		                  | (1 * _CRTDBG_LEAK_CHECK_DF)
+		                  | (1 * _CRTDBG_CHECK_ALWAYS_DF));
+		::_CrtSetBreakAlloc (-1);	// Specify here a memory bloc number
+		::_CrtSetAllocHook (TEST_debug_alloc_hook_cb);
+		::_CrtSetReportHook (TEST_debug_report_hook_cb);
+
+		// Speed up I/O but breaks C stdio compatibility
+//		std::cout.sync_with_stdio (false);
+//		std::cin.sync_with_stdio (false);
+//		std::cerr.sync_with_stdio (false);
+//		std::clog.sync_with_stdio (false);
+	}
+#endif	// _MSC_VER, NDEBUG
+}
+
+
+
+static void	TEST_prog_end ()
+{
+#if defined (_MSC_VER) && ! defined (NDEBUG)
+	{
+		const int	mode =   (1 * _CRTDBG_MODE_DEBUG)
+						       | (0 * _CRTDBG_MODE_WNDW);
+		::_CrtSetReportMode (_CRT_WARN, mode);
+		::_CrtSetReportMode (_CRT_ERROR, mode);
+		::_CrtSetReportMode (_CRT_ASSERT, mode);
+
+		::_CrtMemState	mem_state;
+		::_CrtMemCheckpoint (&mem_state);
+		::_CrtMemDumpStatistics (&mem_state);
+	}
+#endif	// _MSC_VER, NDEBUG
+}
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.h	(revision 769)
@@ -0,0 +1,53 @@
+/*****************************************************************************
+
+        test_fnc.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (test_fnc_HEADER_INCLUDED)
+#define	test_fnc_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T>
+inline T	limit (const T &x, const T &inf, const T &sup);
+
+
+
+#include	"test_fnc.hpp"
+
+
+
+#endif	// test_fnc_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.hpp
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.hpp	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/test_fnc.hpp	(revision 769)
@@ -0,0 +1,56 @@
+/*****************************************************************************
+
+        test_fnc.hpp
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if defined (test_fnc_CURRENT_CODEHEADER)
+	#error Recursive inclusion of test_fnc code header.
+#endif
+#define	test_fnc_CURRENT_CODEHEADER
+
+#if ! defined (test_fnc_CODEHEADER_INCLUDED)
+#define	test_fnc_CODEHEADER_INCLUDED
+
+
+
+/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
+
+
+
+template <class T>
+T	limit (const T &x, const T &inf, const T &sup)
+{
+	assert (! (sup < inf));
+
+	return ((x < inf) ? inf : ((sup < x) ? sup : x));
+}
+
+
+
+#endif	// test_fnc_CODEHEADER_INCLUDED
+
+#undef test_fnc_CURRENT_CODEHEADER
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/test_settings.h
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/test_settings.h	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/test_settings.h	(revision 769)
@@ -0,0 +1,45 @@
+/*****************************************************************************
+
+        test_settings.h
+        Copyright (c) 2005 Laurent de Soras
+
+--- Legal stuff ---
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*Tab=3***********************************************************************/
+
+
+
+#if ! defined (test_settings_HEADER_INCLUDED)
+#define	test_settings_HEADER_INCLUDED
+
+#if defined (_MSC_VER)
+	#pragma once
+	#pragma warning (4 : 4250) // "Inherits via dominance."
+#endif
+
+
+
+// #undef this label to avoid speed test compilation.
+#define	test_settings_SPEED_TEST_ENABLED
+
+
+
+#endif	// test_settings_HEADER_INCLUDED
+
+
+
+/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Index: /trunk/demos/spectrum/3rdparty/fftreal/testapp.dpr
===================================================================
--- /trunk/demos/spectrum/3rdparty/fftreal/testapp.dpr	(revision 769)
+++ /trunk/demos/spectrum/3rdparty/fftreal/testapp.dpr	(revision 769)
@@ -0,0 +1,150 @@
+program testapp;
+{$APPTYPE CONSOLE}
+uses
+  SysUtils,
+  fftreal in 'fftreal.pas',
+  Math,
+  Windows;
+
+var
+   nbr_points  : longint;
+   x, f        : pflt_array;
+   fft         : TFFTReal;
+   i           : longint;
+   PI          : double;
+   areal, img  : double;
+   f_abs       : double;
+   buffer_size : longint;
+   nbr_tests   : longint;
+   time0, time1, time2 : int64;
+   timereso    : int64;
+   offset      : longint;
+   t0, t1      : double;
+   nbr_s_chn   : longint;
+   tempp1, tempp2 : pflt_array;
+
+begin
+  (*______________________________________________
+   *
+   * Exactness test
+   *______________________________________________
+   *)
+
+  WriteLn('Accuracy test:');
+  WriteLn;
+
+  nbr_points := 16;       // Power of 2
+  GetMem(x, nbr_points * sizeof_flt);
+  GetMem(f, nbr_points * sizeof_flt);
+  fft := TFFTReal.Create(nbr_points);    // FFT object initialized here
+
+  // Test signal
+  PI := ArcTan(1) * 4;
+  for i := 0 to nbr_points-1 do
+  begin
+    x^[i] := -1 + sin (3*2*PI*i/nbr_points)
+                + cos (5*2*PI*i/nbr_points) * 2
+                - sin (7*2*PI*i/nbr_points) * 3
+                + cos (8*2*PI*i/nbr_points) * 5;
+  end;
+
+  // Compute FFT and IFFT
+  fft.do_fft(f, x);
+  fft.do_ifft(f, x);
+  fft.rescale(x);
+
+  // Display the result
+  WriteLn('FFT:');
+  for i := 0 to nbr_points div 2 do
+  begin
+    areal := f^[i];
+    if (i > 0) and (i < nbr_points div 2) then
+      img := f^[i + nbr_points div 2]
+    else
+      img := 0;
+
+    f_abs := Sqrt(areal * areal + img * img);
+    WriteLn(Format('%5d: %12.6f %12.6f (%12.6f)', [i, areal, img, f_abs]));
+  end;
+
+  WriteLn;
+  WriteLn('IFFT:');
+  for i := 0 to nbr_points-1 do
+    WriteLn(Format('%5d: %f', [i, x^[i]]));
+
+  WriteLn;
+
+  FreeMem(x);
+  FreeMem(f);
+  fft.Free;
+
+
+  (*______________________________________________
+   *
+   * Speed test
+   *______________________________________________
+   *)
+
+  WriteLn('Speed test:');
+  WriteLn('Please wait...');
+  WriteLn;
+
+  nbr_points := 1024;	          // Power of 2
+  buffer_size := 256*nbr_points;  // Number of flt_t (float or double)
+  nbr_tests := 10000;
+
+  assert(nbr_points <= buffer_size);
+  GetMem(x, buffer_size * sizeof_flt);
+  GetMem(f, buffer_size * sizeof_flt);
+  fft := TFFTReal.Create(nbr_points);					// FFT object initialized here
+
+  // Test signal: noise
+  for i := 0 to nbr_points-1 do
+    x^[i] := Random($7fff) - ($7fff shr 1);
+
+  // timing
+  QueryPerformanceFrequency(timereso);
+  QueryPerformanceCounter(time0);
+
+  for i := 0 to nbr_tests-1 do
+  begin
+    offset := (i * nbr_points) and (buffer_size - 1);
+    tempp1 := f;
+    inc(tempp1, offset);
+    tempp2 := x;
+    inc(tempp2, offset);
+    fft.do_fft(tempp1, tempp2);
+  end;
+
+  QueryPerformanceCounter(time1);
+
+  for i := 0 to nbr_tests-1 do
+  begin
+    offset := (i * nbr_points) and (buffer_size - 1);
+    tempp1 := f;
+    inc(tempp1, offset);
+    tempp2 := x;
+    inc(tempp2, offset);
+    fft.do_ifft(tempp1, tempp2);
+    fft.rescale(x);
+  end;
+
+  QueryPerformanceCounter(time2);
+
+  t0 := ((time1-time0) / timereso) / nbr_tests;
+  t1 := ((time2-time1) / timereso) / nbr_tests;
+
+  WriteLn(Format('%d-points FFT           : %.0f us.', [nbr_points, t0 * 1000000]));
+  WriteLn(Format('%d-points IFFT + scaling: %.0f us.', [nbr_points, t1 * 1000000]));
+
+  nbr_s_chn := Floor(nbr_points / ((t0 + t1) * 44100 * 2));
+  WriteLn(Format('Peak performance: FFT+IFFT on %d mono channels at 44.1 KHz (with overlapping)', [nbr_s_chn]));
+  WriteLn;
+
+  FreeMem(x);
+  FreeMem(f);
+  fft.Free;
+
+  WriteLn('Press [Return] key to terminate...');
+  ReadLn;
+end.
Index: /trunk/demos/spectrum/README.txt
===================================================================
--- /trunk/demos/spectrum/README.txt	(revision 769)
+++ /trunk/demos/spectrum/README.txt	(revision 769)
@@ -0,0 +1,103 @@
+Spectrum analyser demo app
+==========================
+
+Introduction
+------------
+
+This application is a demo which uses the QtMultimedia APIs to capture and play back PCM audio.  While either recording or playback is ongoing, the application performs real-time level and frequency spectrum analysis, displaying the results in its main window.
+
+
+Acknowledgments
+---------------
+
+The application uses the FFTReal v2.00 library by Laurent de Soras to perform frequency analysis of the audio signal.  For further information, see the project home page:
+    http://ldesoras.free.fr/prod.html
+
+
+Quick start
+-----------
+
+Play generated tone
+1. Select 'Play generated tone' from the mode menu
+2. Ensure that the 'Frequency sweep' box is checked
+3. Press 'OK'
+4. Press the play button
+You should hear a rising tone, and see progressively higher frequencies indicated by the spectrograph.
+
+Record and playback
+1. Select 'Record and play back audio' from the mode menu
+2. Press the record button, and speak into the microphone
+3. Wait until the buffer is full (shown as a full blue bar in the top widget)
+4. Press play, and wait until playback of the buffer is complete
+
+Play file
+1. Select 'Play file' from the mode menu
+2. Select a WAV file
+3. Press the play button
+You should hear the first few seconds of the file being played.  The waveform, spectrograph and level meter should be updated as the file is played.
+
+
+Things to play with
+-------------------
+
+Try repeating the 'Play generated tone' sequence using different window functions.  These can be selected from the  settings dialog - launch it by pressing the spanner icon.  The window function is applied to the audio signal before performing the frequency analysis; different windows should have a visible effect on the resulting frequency spectrum.
+
+Try clicking on one of the spectrograph bars while the tone is being played.  The frequency range for that bar will be displayed at the top of the application window.
+
+
+Troubleshooting
+---------------
+
+If either recording or playback do not work, you may need to select a different input / output audio device.  This can be done in the settings dialog - launch it by pressing the spanner icon.
+
+If that doesn't work, there may be a problem either in the application or in Qt.  Report a bug in the usual way.
+
+
+Application interface
+---------------------
+
+The main window of the application contains the following widgets, starting at the top:
+
+Message box
+This shows various messages during execution, such as the current audio format.
+
+Progress bar / waveform display
+- While recording or playback is ongoing, the audio waveform is displayed, sliding from right to left.
+- Superimposed on the waveform, the amount of data currently in the buffer is showed as a blue bar.  When recording, this blue bar fills up from left to right; when playing, the bar gets consumed from left to right.
+- A green window shows which part of the buffer has most recently been analysed.  This window should be close to the 'leading edge' of recording or playback, i.e. the most recently recorded / played data, although it will lag slightly depending on the performance of the machine on which the application is running.
+
+Frequency spectrograph (on the left)
+The spectrograph shows 10 bars, each representing a frequency range.  The frequency range of each bar is displayed in the message box when the bar is clicked.  The height of the bar shows the maximum amplitude of freqencies within its range.
+
+Level meter (on the right)
+The current peak audio level is shown as a pink bar; the current RMS level is shown as a red bar.  The 'high water mark' during a recent period is shown as a thin red line.
+
+Button panel
+- The mode menu allows switching between the three operation modes - 'Play generated tone', 'Record and play back' and 'Play file'.
+- The record button starts or resumes audio capture from the current input device.
+- The pause button suspends either capture or recording.
+- The play button starts or resumes audio playback to the current output device.
+- The settings button launches the settings dialog.
+
+
+Hacking
+-------
+
+If you want to hack the application, here are some pointers to get started.
+
+The spectrum.pri file contains several macros which you can enable by uncommenting:
+- LOG_FOO      Enable logging from class Foo via qDebug()
+- DUMP_FOO     Dump data from class Foo to the file system
+               e.g. DUMP_SPECTRUMANALYSER writes files containing the raw FFT input and output.
+               Be aware that this can generate a *lot* of data and may slow the app down considerably.
+- DISABLE_FOO  Disable specified functionality
+
+If you don't like the combination of the waveform and progress bar in a single widget, separate them by commenting out SUPERIMPOSE_PROGRESS_ON_WAVEFORM.
+
+The spectrum.h file defines a number of parameters which can be played with.  These control things such as the number of audio samples analysed per FFT calculation, the range and number of bands displayed by the spectrograph, and so on.
+
+The part of the application which interacts with QtMultimedia is in the Engine class.
+
+Some ideas for enhancements to the app are listed in TODO.txt.  Feel free to start work on any of them :)
+
+
Index: /trunk/demos/spectrum/TODO.txt
===================================================================
--- /trunk/demos/spectrum/TODO.txt	(revision 769)
+++ /trunk/demos/spectrum/TODO.txt	(revision 769)
@@ -0,0 +1,34 @@
+TODO list for spectrum analyser
+===============================
+
+Bug fixes
+---------
+
+
+New features
+------------
+
+* Wrap user-visible strings in tr()
+
+* Allow user to set frequency range
+There should be some constraints on this, e.g.
+	- Maximum frequency must not be greater than Nyquist frequency
+	- Range is divisible by number of bars?
+
+* Add more visualizers other than bar spectrogram
+e.g. Funky OpenGL visualizers, particle effects etc
+
+
+Non-functional stuff
+--------------------
+
+* Improve robustness of QComboBox -> enum mapping
+At the moment, SettingsDialog relies on casting the combobox item index directly to the enumerated type.  This is clearly a bit fragile...
+
+* For functions which take or return qint64 values, make a clear distinction between duration (microseconds) and length (bytes).
+A sensible convention would be that the default is bytes - i.e. microseconds must be indicated by adding a Us suffix, where not already obvious from the function name.
+
+
+
+
+
Index: /trunk/demos/spectrum/app/app.pro
===================================================================
--- /trunk/demos/spectrum/app/app.pro	(revision 769)
+++ /trunk/demos/spectrum/app/app.pro	(revision 769)
@@ -0,0 +1,128 @@
+include(../spectrum.pri)
+
+TEMPLATE = app
+
+TARGET = spectrum
+unix: !macx: !symbian: TARGET = spectrum.bin
+
+QT       += multimedia
+
+SOURCES  += main.cpp \
+            engine.cpp \
+            frequencyspectrum.cpp \
+            levelmeter.cpp \
+            mainwidget.cpp \
+            progressbar.cpp \
+            settingsdialog.cpp \
+            spectrograph.cpp \
+            spectrumanalyser.cpp \
+            tonegenerator.cpp \
+            tonegeneratordialog.cpp \
+            utils.cpp \
+            waveform.cpp \
+            wavfile.cpp
+
+HEADERS  += engine.h \
+            frequencyspectrum.h \
+            levelmeter.h \
+            mainwidget.h \
+            progressbar.h \
+            settingsdialog.h \
+            spectrograph.h \
+            spectrum.h \
+            spectrumanalyser.h \
+            tonegenerator.h \
+            tonegeneratordialog.h \
+            utils.h \
+            waveform.h \
+            wavfile.h
+
+fftreal_dir = ../3rdparty/fftreal
+
+INCLUDEPATH += $${fftreal_dir}
+
+RESOURCES = spectrum.qrc
+
+symbian {
+    # Platform security capability required to record audio on Symbian
+    TARGET.CAPABILITY = UserEnvironment
+
+    # Provide unique ID for the generated binary, required by Symbian OS
+    TARGET.UID3 = 0xA000E3FA
+}
+
+
+# Dynamic linkage against FFTReal DLL
+!contains(DEFINES, DISABLE_FFT) {
+    symbian {
+        # Must explicitly add the .dll suffix to ensure dynamic linkage
+        LIBS += -lfftreal.dll
+    } else {
+        macx {
+            # Link to fftreal framework
+            LIBS += -F$${fftreal_dir}
+            LIBS += -framework fftreal
+        } else {
+            # Link to dynamic library which is written to ../bin
+            LIBS += -L../bin
+            LIBS += -lfftreal
+        }
+    }
+}
+
+# Install
+
+sources.files = $$SOURCES $$HEADERS $$RESOURCES app.pro
+sources.path = $$[QT_INSTALL_DEMOS]/spectrum/app
+images.files += images/record.png images/settings.png
+images.path = $$[QT_INSTALL_DEMOS]/spectrum/app/images
+INSTALLS += sources images
+
+# Deployment
+
+symbian {
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
+    !contains(DEFINES, DISABLE_FFT) {
+        # Include FFTReal DLL in the SIS file
+        fftreal.sources = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/fftreal.dll
+        fftreal.path = !:/sys/bin
+        DEPLOYMENT += fftreal
+    }
+} else {
+    macx {
+        # Specify directory in which to create spectrum.app bundle
+        DESTDIR = ..
+
+        !contains(DEFINES, DISABLE_FFT) {
+            # Relocate fftreal.framework into spectrum.app bundle
+            framework_dir = ../spectrum.app/Contents/Frameworks
+            framework_name = fftreal.framework/Versions/1/fftreal
+            QMAKE_POST_LINK = \
+                mkdir -p $${framework_dir} &&\
+                rm -rf $${framework_dir}/fftreal.framework &&\
+                cp -R $${fftreal_dir}/fftreal.framework $${framework_dir} &&\
+                install_name_tool -id @executable_path/../Frameworks/$${framework_name} \
+                                  $${framework_dir}/$${framework_name} &&\
+                install_name_tool -change $${framework_name} \
+                                  @executable_path/../Frameworks/$${framework_name} \
+                                  ../spectrum.app/Contents/MacOS/spectrum
+        }
+    } else {
+        # Specify directory in which to create spectrum application
+        DESTDIR = ../bin
+
+        unix: !symbian {
+            # On unices other than Mac OSX, we copy a shell script into the bin directory.
+            # This script takes care of correctly setting the LD_LIBRARY_PATH so that
+            # the dynamic library can be located.
+            copy_launch_script.target = copy_launch_script
+            copy_launch_script.commands = \
+                install -m 0555 $$QT_SOURCE_TREE/demos/spectrum/app/spectrum.sh ../bin/spectrum
+            QMAKE_EXTRA_TARGETS += copy_launch_script
+            POST_TARGETDEPS += copy_launch_script
+        }
+    }
+}
+
+
Index: /trunk/demos/spectrum/app/engine.cpp
===================================================================
--- /trunk/demos/spectrum/app/engine.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/engine.cpp	(revision 769)
@@ -0,0 +1,751 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "engine.h"
+#include "tonegenerator.h"
+#include "utils.h"
+
+#include <math.h>
+
+#include <QCoreApplication>
+#include <QMetaObject>
+#include <QSet>
+#include <QtMultimedia/QAudioInput>
+#include <QtMultimedia/QAudioOutput>
+#include <QDebug>
+#include <QThread>
+#include <QFile>
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const qint64 BufferDurationUs       = 10 * 1000000;
+const int    NotifyIntervalMs       = 100;
+
+// Size of the level calculation window in microseconds
+const int    LevelWindowUs          = 0.1 * 1000000;
+
+
+//-----------------------------------------------------------------------------
+// Helper functions
+//-----------------------------------------------------------------------------
+
+QDebug& operator<<(QDebug &debug, const QAudioFormat &format)
+{
+    debug << format.frequency() << "Hz"
+          << format.channels() << "channels";
+    return debug;
+}
+
+//-----------------------------------------------------------------------------
+// Constructor and destructor
+//-----------------------------------------------------------------------------
+
+Engine::Engine(QObject *parent)
+    :   QObject(parent)
+    ,   m_mode(QAudio::AudioInput)
+    ,   m_state(QAudio::StoppedState)
+    ,   m_generateTone(false)
+    ,   m_file(0)
+    ,   m_availableAudioInputDevices
+            (QAudioDeviceInfo::availableDevices(QAudio::AudioInput))
+    ,   m_audioInputDevice(QAudioDeviceInfo::defaultInputDevice())
+    ,   m_audioInput(0)
+    ,   m_audioInputIODevice(0)
+    ,   m_recordPosition(0)
+    ,   m_availableAudioOutputDevices
+            (QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
+    ,   m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice())
+    ,   m_audioOutput(0)
+    ,   m_playPosition(0)
+    ,   m_dataLength(0)
+    ,   m_rmsLevel(0.0)
+    ,   m_peakLevel(0.0)
+    ,   m_spectrumLengthBytes(0)
+    ,   m_spectrumAnalyser()
+    ,   m_spectrumPosition(0)
+    ,   m_count(0)
+{
+    qRegisterMetaType<FrequencySpectrum>("FrequencySpectrum");
+    CHECKED_CONNECT(&m_spectrumAnalyser,
+                    SIGNAL(spectrumChanged(FrequencySpectrum)),
+                    this,
+                    SLOT(spectrumChanged(FrequencySpectrum)));
+
+    initialize();
+
+#ifdef DUMP_DATA
+    createOutputDir();
+#endif
+
+#ifdef DUMP_SPECTRUM
+    m_spectrumAnalyser.setOutputPath(outputPath());
+#endif
+}
+
+Engine::~Engine()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+bool Engine::loadFile(const QString &fileName)
+{
+    bool result = false;
+    m_generateTone = false;
+
+    Q_ASSERT(!fileName.isEmpty());
+    Q_ASSERT(!m_file);
+    m_file = new QFile(fileName, this);
+    m_file->setFileName(fileName);
+    Q_ASSERT(m_file->exists());
+    if (m_file->open(QFile::ReadOnly)) {
+        m_wavFile.readHeader(*m_file);
+        if (isPCMS16LE(m_wavFile.format())) {
+            result = initialize();
+        } else {
+            emit errorMessage(tr("Audio format not supported"),
+                              formatToString(m_wavFile.format()));
+        }
+    } else {
+        emit errorMessage(tr("Could not open file"), fileName);
+    }
+
+    delete m_file;
+    m_file = 0;
+
+    return result;
+}
+
+bool Engine::generateTone(const Tone &tone)
+{
+    Q_ASSERT(!m_file);
+    m_generateTone = true;
+    m_tone = tone;
+    ENGINE_DEBUG << "Engine::generateTone"
+                 << "startFreq" << m_tone.startFreq
+                 << "endFreq" << m_tone.endFreq
+                 << "amp" << m_tone.amplitude;
+    return initialize();
+}
+
+bool Engine::generateSweptTone(qreal amplitude)
+{
+    Q_ASSERT(!m_file);
+    m_generateTone = true;
+    m_tone.startFreq = 1;
+    m_tone.endFreq = 0;
+    m_tone.amplitude = amplitude;
+    ENGINE_DEBUG << "Engine::generateSweptTone"
+                 << "startFreq" << m_tone.startFreq
+                 << "amp" << m_tone.amplitude;
+    return initialize();
+}
+
+bool Engine::initializeRecord()
+{
+    ENGINE_DEBUG << "Engine::initializeRecord";
+    Q_ASSERT(!m_file);
+    m_generateTone = false;
+    m_tone = SweptTone();
+    return initialize();
+}
+
+qint64 Engine::bufferDuration() const
+{
+    return BufferDurationUs;
+}
+
+qint64 Engine::dataDuration() const
+{
+    qint64 result = 0;
+    if (QAudioFormat() != m_format)
+        result = audioDuration(m_format, m_dataLength);
+    return result;
+}
+
+qint64 Engine::audioBufferLength() const
+{
+    qint64 length = 0;
+    if (QAudio::ActiveState == m_state || QAudio::IdleState == m_state) {
+        Q_ASSERT(QAudioFormat() != m_format);
+        switch (m_mode) {
+        case QAudio::AudioInput:
+            length = m_audioInput->bufferSize();
+            break;
+        case QAudio::AudioOutput:
+            length = m_audioOutput->bufferSize();
+            break;
+        }
+    }
+    return length;
+}
+
+void Engine::setWindowFunction(WindowFunction type)
+{
+    m_spectrumAnalyser.setWindowFunction(type);
+}
+
+
+//-----------------------------------------------------------------------------
+// Public slots
+//-----------------------------------------------------------------------------
+
+void Engine::startRecording()
+{
+    if (m_audioInput) {
+        if (QAudio::AudioInput == m_mode &&
+            QAudio::SuspendedState == m_state) {
+            m_audioInput->resume();
+        } else {
+            m_spectrumAnalyser.cancelCalculation();
+            spectrumChanged(0, 0, FrequencySpectrum());
+
+            m_buffer.fill(0);
+            setRecordPosition(0, true);
+            stopPlayback();
+            m_mode = QAudio::AudioInput;
+            CHECKED_CONNECT(m_audioInput, SIGNAL(stateChanged(QAudio::State)),
+                            this, SLOT(audioStateChanged(QAudio::State)));
+            CHECKED_CONNECT(m_audioInput, SIGNAL(notify()),
+                            this, SLOT(audioNotify()));
+            m_count = 0;
+            m_dataLength = 0;
+            emit dataDurationChanged(0);
+            m_audioInputIODevice = m_audioInput->start();
+            CHECKED_CONNECT(m_audioInputIODevice, SIGNAL(readyRead()),
+                            this, SLOT(audioDataReady()));
+        }
+    }
+}
+
+void Engine::startPlayback()
+{
+    if (m_audioOutput) {
+        if (QAudio::AudioOutput == m_mode &&
+            QAudio::SuspendedState == m_state) {
+#ifdef Q_OS_WIN
+            // The Windows backend seems to internally go back into ActiveState
+            // while still returning SuspendedState, so to ensure that it doesn't
+            // ignore the resume() call, we first re-suspend
+            m_audioOutput->suspend();
+#endif
+            m_audioOutput->resume();
+        } else {
+            m_spectrumAnalyser.cancelCalculation();
+            spectrumChanged(0, 0, FrequencySpectrum());
+
+            setPlayPosition(0, true);
+            stopRecording();
+            m_mode = QAudio::AudioOutput;
+            CHECKED_CONNECT(m_audioOutput, SIGNAL(stateChanged(QAudio::State)),
+                            this, SLOT(audioStateChanged(QAudio::State)));
+            CHECKED_CONNECT(m_audioOutput, SIGNAL(notify()),
+                            this, SLOT(audioNotify()));
+            m_count = 0;
+            m_audioOutputIODevice.close();
+            m_audioOutputIODevice.setBuffer(&m_buffer);
+            m_audioOutputIODevice.open(QIODevice::ReadOnly);
+            m_audioOutput->start(&m_audioOutputIODevice);
+        }
+    }
+}
+
+void Engine::suspend()
+{
+    if (QAudio::ActiveState == m_state ||
+        QAudio::IdleState == m_state) {
+        switch (m_mode) {
+        case QAudio::AudioInput:
+            m_audioInput->suspend();
+            break;
+        case QAudio::AudioOutput:
+            m_audioOutput->suspend();
+            break;
+        }
+    }
+}
+
+void Engine::setAudioInputDevice(const QAudioDeviceInfo &device)
+{
+    if (device.deviceName() != m_audioInputDevice.deviceName()) {
+        m_audioInputDevice = device;
+        initialize();
+    }
+}
+
+void Engine::setAudioOutputDevice(const QAudioDeviceInfo &device)
+{
+    if (device.deviceName() != m_audioOutputDevice.deviceName()) {
+        m_audioOutputDevice = device;
+        initialize();
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Private slots
+//-----------------------------------------------------------------------------
+
+void Engine::audioNotify()
+{
+    switch (m_mode) {
+    case QAudio::AudioInput: {
+            const qint64 recordPosition =
+                    qMin(BufferDurationUs, m_audioInput->processedUSecs());
+            setRecordPosition(recordPosition);
+
+            // Calculate level of most recently captured data
+            qint64 levelLength = audioLength(m_format, LevelWindowUs);
+            levelLength = qMin(m_dataLength, levelLength);
+            const qint64 levelPosition = m_dataLength - levelLength;
+            calculateLevel(levelPosition, levelLength);
+
+            // Calculate spectrum of most recently captured data
+            if (m_dataLength >= m_spectrumLengthBytes) {
+                const qint64 spectrumPosition = m_dataLength - m_spectrumLengthBytes;
+                calculateSpectrum(spectrumPosition);
+            }
+        }
+        break;
+    case QAudio::AudioOutput: {
+            const qint64 playPosition =
+                    qMin(dataDuration(), m_audioOutput->processedUSecs());
+            setPlayPosition(playPosition);
+
+            qint64 analysisPosition = audioLength(m_format, playPosition);
+
+            // Calculate level of data starting at current playback position
+            const qint64 levelLength = audioLength(m_format, LevelWindowUs);
+            if (analysisPosition + levelLength < m_dataLength)
+                calculateLevel(analysisPosition, levelLength);
+
+            if (analysisPosition + m_spectrumLengthBytes < m_dataLength)
+                calculateSpectrum(analysisPosition);
+
+            if (dataDuration() == playPosition)
+                stopPlayback();
+        }
+        break;
+    }
+}
+
+void Engine::audioStateChanged(QAudio::State state)
+{
+    ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state
+                 << "to" << state;
+
+    if (QAudio::StoppedState == state) {
+        // Check error
+        QAudio::Error error = QAudio::NoError;
+        switch (m_mode) {
+        case QAudio::AudioInput:
+            error = m_audioInput->error();
+            break;
+        case QAudio::AudioOutput:
+            error = m_audioOutput->error();
+            break;
+        }
+        if (QAudio::NoError != error) {
+            reset();
+            return;
+        }
+    }
+    setState(state);
+}
+
+void Engine::audioDataReady()
+{
+    const qint64 bytesReady = m_audioInput->bytesReady();
+    const qint64 bytesSpace = m_buffer.size() - m_dataLength;
+    const qint64 bytesToRead = qMin(bytesReady, bytesSpace);
+
+    const qint64 bytesRead = m_audioInputIODevice->read(
+                                       m_buffer.data() + m_dataLength,
+                                       bytesToRead);
+
+    if (bytesRead) {
+        m_dataLength += bytesRead;
+
+        const qint64 duration = audioDuration(m_format, m_dataLength);
+        emit dataDurationChanged(duration);
+    }
+
+    if (m_buffer.size() == m_dataLength)
+        stopRecording();
+}
+
+void Engine::spectrumChanged(const FrequencySpectrum &spectrum)
+{
+    ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition;
+    const qint64 positionUs = audioDuration(m_format, m_spectrumPosition);
+    const qint64 lengthUs = audioDuration(m_format, m_spectrumLengthBytes);
+    emit spectrumChanged(positionUs, lengthUs, spectrum);
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void Engine::reset()
+{
+    stopRecording();
+    stopPlayback();
+    setState(QAudio::AudioInput, QAudio::StoppedState);
+    setFormat(QAudioFormat());
+    delete m_audioInput;
+    m_audioInput = 0;
+    m_audioInputIODevice = 0;
+    setRecordPosition(0);
+    delete m_audioOutput;
+    m_audioOutput = 0;
+    setPlayPosition(0);
+    m_buffer.clear();
+    m_dataLength = 0;
+    m_spectrumPosition = 0;
+    emit dataDurationChanged(0);
+    setLevel(0.0, 0.0, 0);
+}
+
+bool Engine::initialize()
+{
+    bool result = false;
+
+    reset();
+
+    if (selectFormat()) {
+        const qint64 bufferLength = audioLength(m_format, BufferDurationUs);
+        m_buffer.resize(bufferLength);
+        m_buffer.fill(0);
+        emit bufferDurationChanged(BufferDurationUs);
+
+        if (m_generateTone) {
+            if (0 == m_tone.endFreq) {
+                const qreal nyquist = nyquistFrequency(m_format);
+                m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist);
+            }
+
+            // Call function defined in utils.h, at global scope
+            ::generateTone(m_tone, m_format, m_buffer);
+            m_dataLength = m_buffer.size();
+            emit dataDurationChanged(bufferDuration());
+            setRecordPosition(bufferDuration());
+            result = true;
+        } else if (m_file) {
+            const qint64 length = m_wavFile.readData(*m_file, m_buffer, m_format);
+            if (length) {
+                m_dataLength = length;
+                emit dataDurationChanged(dataDuration());
+                setRecordPosition(dataDuration());
+                result = true;
+            }
+        } else {
+            m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this);
+            m_audioInput->setNotifyInterval(NotifyIntervalMs);
+            result = true;
+        }
+
+        m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
+        m_audioOutput->setNotifyInterval(NotifyIntervalMs);
+        m_spectrumLengthBytes = SpectrumLengthSamples *
+                                (m_format.sampleSize() / 8) * m_format.channels();
+    } else {
+        if (m_file)
+            emit errorMessage(tr("Audio format not supported"),
+                              formatToString(m_format));
+        else if (m_generateTone)
+            emit errorMessage(tr("No suitable format found"), "");
+        else
+            emit errorMessage(tr("No common input / output format found"), "");
+    }
+
+    ENGINE_DEBUG << "Engine::initialize" << "format" << m_format;
+
+    return result;
+}
+
+bool Engine::selectFormat()
+{
+    bool foundSupportedFormat = false;
+
+    if (m_file) {
+        // Header is read from the WAV file; just need to check whether
+        // it is supported by the audio output device
+        QAudioFormat format = m_wavFile.format();
+        if (m_audioOutputDevice.isFormatSupported(m_wavFile.format())) {
+            setFormat(m_wavFile.format());
+            foundSupportedFormat = true;
+        } else {
+            // Try flipping mono <-> stereo
+            const int channels = (format.channels() == 1) ? 2 : 1;
+            format.setChannels(channels);
+            if (m_audioOutputDevice.isFormatSupported(format)) {
+                setFormat(format);
+                foundSupportedFormat = true;
+            }
+        }
+    } else {
+
+        QList<int> frequenciesList;
+    #ifdef Q_OS_WIN
+        // The Windows audio backend does not correctly report format support
+        // (see QTBUG-9100).  Furthermore, although the audio subsystem captures
+        // at 11025Hz, the resulting audio is corrupted.
+        frequenciesList += 8000;
+    #endif
+
+        if (!m_generateTone)
+            frequenciesList += m_audioInputDevice.supportedFrequencies();
+
+        frequenciesList += m_audioOutputDevice.supportedFrequencies();
+        frequenciesList = frequenciesList.toSet().toList(); // remove duplicates
+        qSort(frequenciesList);
+        ENGINE_DEBUG << "Engine::initialize frequenciesList" << frequenciesList;
+
+        QList<int> channelsList;
+        channelsList += m_audioInputDevice.supportedChannels();
+        channelsList += m_audioOutputDevice.supportedChannels();
+        channelsList = channelsList.toSet().toList();
+        qSort(channelsList);
+        ENGINE_DEBUG << "Engine::initialize channelsList" << channelsList;
+
+        QAudioFormat format;
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setCodec("audio/pcm");
+        format.setSampleSize(16);
+        format.setSampleType(QAudioFormat::SignedInt);
+        int frequency, channels;
+        foreach (frequency, frequenciesList) {
+            if (foundSupportedFormat)
+                break;
+            format.setFrequency(frequency);
+            foreach (channels, channelsList) {
+                format.setChannels(channels);
+                const bool inputSupport = m_generateTone ||
+                                          m_audioInputDevice.isFormatSupported(format);
+                const bool outputSupport = m_audioOutputDevice.isFormatSupported(format);
+                ENGINE_DEBUG << "Engine::initialize checking " << format
+                             << "input" << inputSupport
+                             << "output" << outputSupport;
+                if (inputSupport && outputSupport) {
+                    foundSupportedFormat = true;
+                    break;
+                }
+            }
+        }
+
+        if (!foundSupportedFormat)
+            format = QAudioFormat();
+
+        setFormat(format);
+    }
+
+    return foundSupportedFormat;
+}
+
+void Engine::stopRecording()
+{
+    if (m_audioInput) {
+        m_audioInput->stop();
+        QCoreApplication::instance()->processEvents();
+        m_audioInput->disconnect();
+    }
+    m_audioInputIODevice = 0;
+
+#ifdef DUMP_AUDIO
+    dumpData();
+#endif
+}
+
+void Engine::stopPlayback()
+{
+    if (m_audioOutput) {
+        m_audioOutput->stop();
+        QCoreApplication::instance()->processEvents();
+        m_audioOutput->disconnect();
+        setPlayPosition(0);
+    }
+}
+
+void Engine::setState(QAudio::State state)
+{
+    const bool changed = (m_state != state);
+    m_state = state;
+    if (changed)
+        emit stateChanged(m_mode, m_state);
+}
+
+void Engine::setState(QAudio::Mode mode, QAudio::State state)
+{
+    const bool changed = (m_mode != mode || m_state != state);
+    m_mode = mode;
+    m_state = state;
+    if (changed)
+        emit stateChanged(m_mode, m_state);
+}
+
+void Engine::setRecordPosition(qint64 position, bool forceEmit)
+{
+    const bool changed = (m_recordPosition != position);
+    m_recordPosition = position;
+    if (changed || forceEmit)
+        emit recordPositionChanged(m_recordPosition);
+}
+
+void Engine::setPlayPosition(qint64 position, bool forceEmit)
+{
+    const bool changed = (m_playPosition != position);
+    m_playPosition = position;
+    if (changed || forceEmit)
+        emit playPositionChanged(m_playPosition);
+}
+
+void Engine::calculateLevel(qint64 position, qint64 length)
+{
+#ifdef DISABLE_LEVEL
+    Q_UNUSED(position)
+    Q_UNUSED(length)
+#else
+    Q_ASSERT(position + length <= m_dataLength);
+
+    qreal peakLevel = 0.0;
+
+    qreal sum = 0.0;
+    const char *ptr = m_buffer.constData() + position;
+    const char *const end = ptr + length;
+    while (ptr < end) {
+        const qint16 value = *reinterpret_cast<const qint16*>(ptr);
+        const qreal fracValue = pcmToReal(value);
+        peakLevel = qMax(peakLevel, fracValue);
+        sum += fracValue * fracValue;
+        ptr += 2;
+    }
+    const int numSamples = length / 2;
+    qreal rmsLevel = sqrt(sum / numSamples);
+
+    rmsLevel = qMax(qreal(0.0), rmsLevel);
+    rmsLevel = qMin(qreal(1.0), rmsLevel);
+    setLevel(rmsLevel, peakLevel, numSamples);
+
+    ENGINE_DEBUG << "Engine::calculateLevel" << "pos" << position << "len" << length
+                 << "rms" << rmsLevel << "peak" << peakLevel;
+#endif
+}
+
+void Engine::calculateSpectrum(qint64 position)
+{
+#ifdef DISABLE_SPECTRUM
+    Q_UNUSED(position)
+#else
+    Q_ASSERT(position + m_spectrumLengthBytes <= m_dataLength);
+    Q_ASSERT(0 == m_spectrumLengthBytes % 2); // constraint of FFT algorithm
+
+    // QThread::currentThread is marked 'for internal use only', but
+    // we're only using it for debug output here, so it's probably OK :)
+    ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread()
+                 << "count" << m_count << "pos" << position << "len" << m_spectrumLengthBytes
+                 << "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady();
+
+    if(m_spectrumAnalyser.isReady()) {
+        m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position,
+                                                   m_spectrumLengthBytes);
+        m_spectrumPosition = position;
+        m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format);
+    }
+#endif
+}
+
+void Engine::setFormat(const QAudioFormat &format)
+{
+    const bool changed = (format != m_format);
+    m_format = format;
+    if (changed)
+        emit formatChanged(m_format);
+}
+
+void Engine::setLevel(qreal rmsLevel, qreal peakLevel, int numSamples)
+{
+    m_rmsLevel = rmsLevel;
+    m_peakLevel = peakLevel;
+    emit levelChanged(m_rmsLevel, m_peakLevel, numSamples);
+}
+
+#ifdef DUMP_DATA
+void Engine::createOutputDir()
+{
+    m_outputDir.setPath("output");
+
+    // Ensure output directory exists and is empty
+    if (m_outputDir.exists()) {
+        const QStringList files = m_outputDir.entryList(QDir::Files);
+        QString file;
+        foreach (file, files)
+            m_outputDir.remove(file);
+    } else {
+        QDir::current().mkdir("output");
+    }
+}
+#endif // DUMP_DATA
+
+#ifdef DUMP_AUDIO
+void Engine::dumpData()
+{
+    const QString txtFileName = m_outputDir.filePath("data.txt");
+    QFile txtFile(txtFileName);
+    txtFile.open(QFile::WriteOnly | QFile::Text);
+    QTextStream stream(&txtFile);
+    const qint16 *ptr = reinterpret_cast<const qint16*>(m_buffer.constData());
+    const int numSamples = m_dataLength / (2 * m_format.channels());
+    for (int i=0; i<numSamples; ++i) {
+        stream << i << "\t" << *ptr << "\n";
+        ptr += m_format.channels();
+    }
+
+    const QString pcmFileName = m_outputDir.filePath("data.pcm");
+    QFile pcmFile(pcmFileName);
+    pcmFile.open(QFile::WriteOnly);
+    pcmFile.write(m_buffer.constData(), m_dataLength);
+}
+#endif // DUMP_AUDIO
Index: /trunk/demos/spectrum/app/engine.h
===================================================================
--- /trunk/demos/spectrum/app/engine.h	(revision 769)
+++ /trunk/demos/spectrum/app/engine.h	(revision 769)
@@ -0,0 +1,315 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include "spectrum.h"
+#include "spectrumanalyser.h"
+#include "wavfile.h"
+
+#include <QObject>
+#include <QByteArray>
+#include <QBuffer>
+#include <QVector>
+#include <QtMultimedia/QAudioDeviceInfo>
+#include <QtMultimedia/QAudioFormat>
+
+#ifdef DUMP_CAPTURED_AUDIO
+#define DUMP_DATA
+#endif
+
+#ifdef DUMP_SPECTRUM
+#define DUMP_DATA
+#endif
+
+#ifdef DUMP_DATA
+#include <QDir>
+#endif
+
+class FrequencySpectrum;
+
+QT_FORWARD_DECLARE_CLASS(QAudioInput)
+QT_FORWARD_DECLARE_CLASS(QAudioOutput)
+QT_FORWARD_DECLARE_CLASS(QFile)
+
+/**
+ * This class interfaces with the QtMultimedia audio classes, and also with
+ * the SpectrumAnalyser class.  Its role is to manage the capture and playback
+ * of audio data, meanwhile performing real-time analysis of the audio level
+ * and frequency spectrum.
+ */
+class Engine : public QObject {
+    Q_OBJECT
+public:
+    Engine(QObject *parent = 0);
+    ~Engine();
+
+    const QList<QAudioDeviceInfo>& availableAudioInputDevices() const
+                                    { return m_availableAudioInputDevices; }
+
+    const QList<QAudioDeviceInfo>& availableAudioOutputDevices() const
+                                    { return m_availableAudioOutputDevices; }
+
+    QAudio::Mode mode() const       { return m_mode; }
+    QAudio::State state() const     { return m_state; }
+
+    /**
+     * \return Reference to internal audio buffer
+     * \note This reference is valid for the lifetime of the Engine
+     */
+    const QByteArray& buffer() const    { return m_buffer; }
+
+    /**
+     * \return Current audio format
+     * \note May be QAudioFormat() if engine is not initialized
+     */
+    const QAudioFormat& format() const  { return m_format; }
+
+    /**
+     * Stop any ongoing recording or playback, and reset to ground state.
+     */
+    void reset();
+
+    /**
+     * Load data from WAV file
+     */
+    bool loadFile(const QString &fileName);
+
+    /**
+     * Generate tone
+     */
+    bool generateTone(const Tone &tone);
+
+    /**
+     * Generate tone
+     */
+    bool generateSweptTone(qreal amplitude);
+
+    /**
+     * Initialize for recording
+     */
+    bool initializeRecord();
+
+    /**
+     * Position of the audio input device.
+     * \return Position in microseconds.
+     */
+    qint64 recordPosition() const   { return m_recordPosition; }
+
+    /**
+     * RMS level of the most recently processed set of audio samples.
+     * \return Level in range (0.0, 1.0)
+     */
+    qreal rmsLevel() const          { return m_rmsLevel; }
+
+    /**
+     * Peak level of the most recently processed set of audio samples.
+     * \return Level in range (0.0, 1.0)
+     */
+    qreal peakLevel() const         { return m_peakLevel; }
+
+    /**
+     * Position of the audio output device.
+     * \return Position in microseconds.
+     */
+    qint64 playPosition() const     { return m_playPosition; }
+
+    /**
+     * Length of the internal engine buffer.
+     * \return Buffer length in microseconds.
+     */
+    qint64 bufferDuration() const;
+
+    /**
+     * Amount of data held in the buffer.
+     * \return Data duration in microseconds.
+     */
+    qint64 dataDuration() const;
+
+    /**
+     * Returns the size of the underlying audio buffer in bytes.
+     * This should be an approximation of the capture latency.
+     */
+    qint64 audioBufferLength() const;
+
+    /**
+     * Set window function applied to audio data before spectral analysis.
+     */
+    void setWindowFunction(WindowFunction type);
+
+public slots:
+    void startRecording();
+    void startPlayback();
+    void suspend();
+    void setAudioInputDevice(const QAudioDeviceInfo &device);
+    void setAudioOutputDevice(const QAudioDeviceInfo &device);
+
+signals:
+    void stateChanged(QAudio::Mode mode, QAudio::State state);
+
+    /**
+     * Informational message for non-modal display
+     */
+    void infoMessage(const QString &message, int durationMs);
+
+    /**
+     * Error message for modal display
+     */
+    void errorMessage(const QString &heading, const QString &detail);
+
+    /**
+     * Format of audio data has changed
+     */
+    void formatChanged(const QAudioFormat &format);
+
+    /**
+     * Length of buffer has changed.
+     * \param duration Duration in microseconds
+     */
+    void bufferDurationChanged(qint64 duration);
+
+    /**
+     * Amount of data in buffer has changed.
+     * \param duration Duration of data in microseconds
+     */
+    void dataDurationChanged(qint64 duration);
+
+    /**
+     * Position of the audio input device has changed.
+     * \param position Position in microseconds
+     */
+    void recordPositionChanged(qint64 position);
+
+    /**
+     * Position of the audio output device has changed.
+     * \param position Position in microseconds
+     */
+    void playPositionChanged(qint64 position);
+
+    /**
+     * Level changed
+     * \param rmsLevel RMS level in range 0.0 - 1.0
+     * \param peakLevel Peak level in range 0.0 - 1.0
+     * \param numSamples Number of audio samples analysed
+     */
+    void levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples);
+
+    /**
+     * Spectrum has changed.
+     * \param position Position of start of window in microseconds
+     * \param length   Length of window in microseconds
+     * \param spectrum Resulting frequency spectrum
+     */
+    void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
+
+private slots:
+    void audioNotify();
+    void audioStateChanged(QAudio::State state);
+    void audioDataReady();
+    void spectrumChanged(const FrequencySpectrum &spectrum);
+
+private:
+    bool initialize();
+    bool selectFormat();
+    void stopRecording();
+    void stopPlayback();
+    void setState(QAudio::State state);
+    void setState(QAudio::Mode mode, QAudio::State state);
+    void setFormat(const QAudioFormat &format);
+    void setRecordPosition(qint64 position, bool forceEmit = false);
+    void setPlayPosition(qint64 position, bool forceEmit = false);
+    void calculateLevel(qint64 position, qint64 length);
+    void calculateSpectrum(qint64 position);
+    void setLevel(qreal rmsLevel, qreal peakLevel, int numSamples);
+
+#ifdef DUMP_DATA
+    void createOutputDir();
+    QString outputPath() const { return m_outputDir.path(); }
+#endif
+
+#ifdef DUMP_CAPTURED_AUDIO
+    void dumpData();
+#endif
+
+private:
+    QAudio::Mode        m_mode;
+    QAudio::State       m_state;
+
+    bool                m_generateTone;
+    SweptTone           m_tone;
+
+    QFile*              m_file;
+    WavFile             m_wavFile;
+
+    QAudioFormat        m_format;
+
+    const QList<QAudioDeviceInfo> m_availableAudioInputDevices;
+    QAudioDeviceInfo    m_audioInputDevice;
+    QAudioInput*        m_audioInput;
+    QIODevice*          m_audioInputIODevice;
+    qint64              m_recordPosition;
+
+    const QList<QAudioDeviceInfo> m_availableAudioOutputDevices;
+    QAudioDeviceInfo    m_audioOutputDevice;
+    QAudioOutput*       m_audioOutput;
+    qint64              m_playPosition;
+    QBuffer             m_audioOutputIODevice;
+
+    QByteArray          m_buffer;
+    qint64              m_dataLength;
+
+    qreal               m_rmsLevel;
+    qreal               m_peakLevel;
+
+    int                 m_spectrumLengthBytes;
+    QByteArray          m_spectrumBuffer;
+    SpectrumAnalyser    m_spectrumAnalyser;
+    qint64              m_spectrumPosition;
+
+    int                 m_count;
+
+#ifdef DUMP_DATA
+    QDir                m_outputDir;
+#endif
+
+};
+
+#endif // ENGINE_H
Index: /trunk/demos/spectrum/app/frequencyspectrum.cpp
===================================================================
--- /trunk/demos/spectrum/app/frequencyspectrum.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/frequencyspectrum.cpp	(revision 769)
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "frequencyspectrum.h"
+
+FrequencySpectrum::FrequencySpectrum(int numPoints)
+    :   m_elements(numPoints)
+{
+
+}
+
+void FrequencySpectrum::reset()
+{
+    iterator i = begin();
+    for ( ; i != end(); ++i)
+        *i = Element();
+}
+
+int FrequencySpectrum::count() const
+{
+    return m_elements.count();
+}
+
+FrequencySpectrum::Element& FrequencySpectrum::operator[](int index)
+{
+    return m_elements[index];
+}
+
+const FrequencySpectrum::Element& FrequencySpectrum::operator[](int index) const
+{
+    return m_elements[index];
+}
+
+FrequencySpectrum::iterator FrequencySpectrum::begin()
+{
+    return m_elements.begin();
+}
+
+FrequencySpectrum::iterator FrequencySpectrum::end()
+{
+    return m_elements.end();
+}
+
+FrequencySpectrum::const_iterator FrequencySpectrum::begin() const
+{
+    return m_elements.begin();
+}
+
+FrequencySpectrum::const_iterator FrequencySpectrum::end() const
+{
+    return m_elements.end();
+}
Index: /trunk/demos/spectrum/app/frequencyspectrum.h
===================================================================
--- /trunk/demos/spectrum/app/frequencyspectrum.h	(revision 769)
+++ /trunk/demos/spectrum/app/frequencyspectrum.h	(revision 769)
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FREQUENCYSPECTRUM_H
+#define FREQUENCYSPECTRUM_H
+
+#include <QtCore/QVector>
+
+/**
+ * Represents a frequency spectrum as a series of elements, each of which
+ * consists of a frequency, an amplitude and a phase.
+ */
+class FrequencySpectrum {
+public:
+    FrequencySpectrum(int numPoints = 0);
+
+    struct Element {
+        Element()
+        :   frequency(0.0), amplitude(0.0), phase(0.0), clipped(false)
+        { }
+
+        /**
+         * Frequency in Hertz
+         */
+        qreal frequency;
+
+        /**
+         * Amplitude in range [0.0, 1.0]
+         */
+        qreal amplitude;
+
+        /**
+         * Phase in range [0.0, 2*PI]
+         */
+        qreal phase;
+
+        /**
+         * Indicates whether value has been clipped during spectrum analysis
+         */
+        bool clipped;
+    };
+
+    typedef QVector<Element>::iterator iterator;
+    typedef QVector<Element>::const_iterator const_iterator;
+
+    void reset();
+
+    int count() const;
+    Element& operator[](int index);
+    const Element& operator[](int index) const;
+    iterator begin();
+    iterator end();
+    const_iterator begin() const;
+    const_iterator end() const;
+
+private:
+    QVector<Element> m_elements;
+
+};
+
+#endif // FREQUENCYSPECTRUM_H
Index: /trunk/demos/spectrum/app/levelmeter.cpp
===================================================================
--- /trunk/demos/spectrum/app/levelmeter.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/levelmeter.cpp	(revision 769)
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "levelmeter.h"
+
+#include <math.h>
+
+#include <QPainter>
+#include <QTimer>
+#include <QDebug>
+
+
+// Constants
+const int RedrawInterval = 100; // ms
+const qreal PeakDecayRate = 0.001;
+const int PeakHoldLevelDuration = 2000; // ms
+
+
+LevelMeter::LevelMeter(QWidget *parent)
+    :   QWidget(parent)
+    ,   m_rmsLevel(0.0)
+    ,   m_peakLevel(0.0)
+    ,   m_decayedPeakLevel(0.0)
+    ,   m_peakDecayRate(PeakDecayRate)
+    ,   m_peakHoldLevel(0.0)
+    ,   m_redrawTimer(new QTimer(this))
+    ,   m_rmsColor(Qt::red)
+    ,   m_peakColor(255, 200, 200, 255)
+{
+    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+    setMinimumWidth(30);
+
+    connect(m_redrawTimer, SIGNAL(timeout()), this, SLOT(redrawTimerExpired()));
+    m_redrawTimer->start(RedrawInterval);
+}
+
+LevelMeter::~LevelMeter()
+{
+
+}
+
+void LevelMeter::reset()
+{
+    m_rmsLevel = 0.0;
+    m_peakLevel = 0.0;
+    update();
+}
+
+void LevelMeter::levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples)
+{
+    // Smooth the RMS signal
+    const qreal smooth = pow(qreal(0.9), static_cast<qreal>(numSamples) / 256); // TODO: remove this magic number
+    m_rmsLevel = (m_rmsLevel * smooth) + (rmsLevel * (1.0 - smooth));
+
+    if (peakLevel > m_decayedPeakLevel) {
+        m_peakLevel = peakLevel;
+        m_decayedPeakLevel = peakLevel;
+        m_peakLevelChanged.start();
+    }
+
+    if (peakLevel > m_peakHoldLevel) {
+        m_peakHoldLevel = peakLevel;
+        m_peakHoldLevelChanged.start();
+    }
+
+    update();
+}
+
+void LevelMeter::redrawTimerExpired()
+{
+    // Decay the peak signal
+    const int elapsedMs = m_peakLevelChanged.elapsed();
+    const qreal decayAmount = m_peakDecayRate * elapsedMs;
+    if (decayAmount < m_peakLevel)
+        m_decayedPeakLevel = m_peakLevel - decayAmount;
+    else
+        m_decayedPeakLevel = 0.0;
+
+    // Check whether to clear the peak hold level
+    if (m_peakHoldLevelChanged.elapsed() > PeakHoldLevelDuration)
+        m_peakHoldLevel = 0.0;
+
+    update();
+}
+
+void LevelMeter::paintEvent(QPaintEvent *event)
+{
+    Q_UNUSED(event)
+
+    QPainter painter(this);
+    painter.fillRect(rect(), Qt::black);
+
+    QRect bar = rect();
+
+    bar.setTop(rect().top() + (1.0 - m_peakHoldLevel) * rect().height());
+    bar.setBottom(bar.top() + 5);
+    painter.fillRect(bar, m_rmsColor);
+    bar.setBottom(rect().bottom());
+
+    bar.setTop(rect().top() + (1.0 - m_decayedPeakLevel) * rect().height());
+    painter.fillRect(bar, m_peakColor);
+
+    bar.setTop(rect().top() + (1.0 - m_rmsLevel) * rect().height());
+    painter.fillRect(bar, m_rmsColor);
+}
Index: /trunk/demos/spectrum/app/levelmeter.h
===================================================================
--- /trunk/demos/spectrum/app/levelmeter.h	(revision 769)
+++ /trunk/demos/spectrum/app/levelmeter.h	(revision 769)
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LEVELMETER_H
+#define LEVELMETER_H
+
+#include <QTime>
+#include <QWidget>
+
+/**
+ * Widget which displays a vertical audio level meter, indicating the
+ * RMS and peak levels of the window of audio samples most recently analysed
+ * by the Engine.
+ */
+class LevelMeter : public QWidget {
+    Q_OBJECT
+public:
+    LevelMeter(QWidget *parent = 0);
+    ~LevelMeter();
+
+    void paintEvent(QPaintEvent *event);
+
+public slots:
+    void reset();
+    void levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples);
+
+private slots:
+    void redrawTimerExpired();
+
+private:
+    /**
+     * Height of RMS level bar.
+     * Range 0.0 - 1.0.
+     */
+    qreal m_rmsLevel;
+
+    /**
+     * Most recent peak level.
+     * Range 0.0 - 1.0.
+     */
+    qreal m_peakLevel;
+
+    /**
+     * Height of peak level bar.
+     * This is calculated by decaying m_peakLevel depending on the
+     * elapsed time since m_peakLevelChanged, and the value of m_decayRate.
+     */
+    qreal m_decayedPeakLevel;
+
+    /**
+     * Time at which m_peakLevel was last changed.
+     */
+    QTime m_peakLevelChanged;
+
+    /**
+     * Rate at which peak level bar decays.
+     * Expressed in level units / millisecond.
+     */
+    qreal m_peakDecayRate;
+
+    /**
+     * High watermark of peak level.
+     * Range 0.0 - 1.0.
+     */
+    qreal m_peakHoldLevel;
+
+    /**
+     * Time at which m_peakHoldLevel was last changed.
+     */
+    QTime m_peakHoldLevelChanged;
+
+    QTimer *m_redrawTimer;
+
+    QColor m_rmsColor;
+    QColor m_peakColor;
+
+};
+
+#endif // LEVELMETER_H
Index: /trunk/demos/spectrum/app/main.cpp
===================================================================
--- /trunk/demos/spectrum/app/main.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/main.cpp	(revision 769)
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QApplication>
+#include "mainwidget.h"
+
+int main(int argc, char **argv)
+{
+    QApplication app(argc, argv);
+    app.setApplicationName("QtMultimedia spectrum analyser");
+    MainWidget w;
+
+#ifdef Q_OS_SYMBIAN
+    w.showMaximized();
+#else
+    w.show();
+#endif
+
+    return app.exec();
+}
Index: /trunk/demos/spectrum/app/mainwidget.cpp
===================================================================
--- /trunk/demos/spectrum/app/mainwidget.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/mainwidget.cpp	(revision 769)
@@ -0,0 +1,454 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "engine.h"
+#include "levelmeter.h"
+#include "mainwidget.h"
+#include "waveform.h"
+#include "progressbar.h"
+#include "settingsdialog.h"
+#include "spectrograph.h"
+#include "tonegeneratordialog.h"
+#include "utils.h"
+
+#include <QLabel>
+#include <QPushButton>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QStyle>
+#include <QMenu>
+#include <QFileDialog>
+#include <QTimerEvent>
+#include <QMessageBox>
+
+const int NullTimerId = -1;
+
+MainWidget::MainWidget(QWidget *parent)
+    :   QWidget(parent)
+    ,   m_mode(NoMode)
+    ,   m_engine(new Engine(this))
+#ifndef DISABLE_WAVEFORM
+    ,   m_waveform(new Waveform(m_engine->buffer(), this))
+#endif
+    ,   m_progressBar(new ProgressBar(this))
+    ,   m_spectrograph(new Spectrograph(this))
+    ,   m_levelMeter(new LevelMeter(this))
+    ,   m_modeButton(new QPushButton(this))
+    ,   m_recordButton(new QPushButton(this))
+    ,   m_pauseButton(new QPushButton(this))
+    ,   m_playButton(new QPushButton(this))
+    ,   m_settingsButton(new QPushButton(this))
+    ,   m_infoMessage(new QLabel(tr("Select a mode to begin"), this))
+    ,   m_infoMessageTimerId(NullTimerId)
+    ,   m_settingsDialog(new SettingsDialog(
+            m_engine->availableAudioInputDevices(),
+            m_engine->availableAudioOutputDevices(),
+            this))
+    ,   m_toneGeneratorDialog(new ToneGeneratorDialog(this))
+    ,   m_modeMenu(new QMenu(this))
+    ,   m_loadFileAction(0)
+    ,   m_generateToneAction(0)
+    ,   m_recordAction(0)
+{
+    m_spectrograph->setParams(SpectrumNumBands, SpectrumLowFreq, SpectrumHighFreq);
+
+    createUi();
+    connectUi();
+}
+
+MainWidget::~MainWidget()
+{
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Public slots
+//-----------------------------------------------------------------------------
+
+void MainWidget::stateChanged(QAudio::Mode mode, QAudio::State state)
+{
+    Q_UNUSED(mode);
+
+    updateButtonStates();
+
+    if (QAudio::ActiveState != state && QAudio::SuspendedState != state) {
+        m_levelMeter->reset();
+        m_spectrograph->reset();
+    }
+}
+
+void MainWidget::formatChanged(const QAudioFormat &format)
+{
+   infoMessage(formatToString(format), NullMessageTimeout);
+
+#ifndef DISABLE_WAVEFORM
+    if (QAudioFormat() != format) {
+        m_waveform->initialize(format, WaveformTileLength,
+                               WaveformWindowDuration);
+    }
+#endif
+}
+
+void MainWidget::spectrumChanged(qint64 position, qint64 length,
+                                 const FrequencySpectrum &spectrum)
+{
+    m_progressBar->windowChanged(position, length);
+    m_spectrograph->spectrumChanged(spectrum);
+}
+
+void MainWidget::infoMessage(const QString &message, int timeoutMs)
+{
+    m_infoMessage->setText(message);
+
+    if (NullTimerId != m_infoMessageTimerId) {
+        killTimer(m_infoMessageTimerId);
+        m_infoMessageTimerId = NullTimerId;
+    }
+
+    if (NullMessageTimeout != timeoutMs)
+        m_infoMessageTimerId = startTimer(timeoutMs);
+}
+
+void MainWidget::errorMessage(const QString &heading, const QString &detail)
+{
+#ifdef Q_OS_SYMBIAN
+    const QString message = heading + "\n" + detail;
+    QMessageBox::warning(this, "", message, QMessageBox::Close);
+#else
+    QMessageBox::warning(this, heading, detail, QMessageBox::Close);
+#endif
+}
+
+void MainWidget::timerEvent(QTimerEvent *event)
+{
+    Q_ASSERT(event->timerId() == m_infoMessageTimerId);
+    Q_UNUSED(event) // suppress warnings in release builds
+    killTimer(m_infoMessageTimerId);
+    m_infoMessageTimerId = NullTimerId;
+    m_infoMessage->setText("");
+}
+
+void MainWidget::positionChanged(qint64 positionUs)
+{
+#ifndef DISABLE_WAVEFORM
+    qint64 positionBytes = audioLength(m_engine->format(), positionUs);
+    m_waveform->positionChanged(positionBytes);
+#else
+    Q_UNUSED(positionUs)
+#endif
+}
+
+void MainWidget::bufferDurationChanged(qint64 durationUs)
+{
+    m_progressBar->bufferDurationChanged(durationUs);
+}
+
+
+//-----------------------------------------------------------------------------
+// Private slots
+//-----------------------------------------------------------------------------
+
+void MainWidget::dataDurationChanged(qint64 duration)
+{
+#ifndef DISABLE_WAVEFORM
+    const qint64 dataLength = audioLength(m_engine->format(), duration);
+    m_waveform->dataLengthChanged(dataLength);
+#else
+    Q_UNUSED(duration)
+#endif
+
+    updateButtonStates();
+}
+
+void MainWidget::showFileDialog()
+{
+    reset();
+    const QString dir;
+    const QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open WAV file"), dir, "*.wav");
+    if (fileNames.count()) {
+        setMode(LoadFileMode);
+        m_engine->loadFile(fileNames.front());
+        updateButtonStates();
+    }
+}
+
+void MainWidget::showSettingsDialog()
+{
+    reset();
+    m_settingsDialog->exec();
+    if (m_settingsDialog->result() == QDialog::Accepted) {
+        m_engine->setAudioInputDevice(m_settingsDialog->inputDevice());
+        m_engine->setAudioOutputDevice(m_settingsDialog->outputDevice());
+        m_engine->setWindowFunction(m_settingsDialog->windowFunction());
+    }
+}
+
+void MainWidget::showToneGeneratorDialog()
+{
+    reset();
+    m_toneGeneratorDialog->exec();
+    if (m_toneGeneratorDialog->result() == QDialog::Accepted) {
+        setMode(GenerateToneMode);
+        const qreal amplitude = m_toneGeneratorDialog->amplitude();
+        if (m_toneGeneratorDialog->isFrequencySweepEnabled()) {
+            m_engine->generateSweptTone(amplitude);
+        } else {
+            const qreal frequency = m_toneGeneratorDialog->frequency();
+            const Tone tone(frequency, amplitude);
+            m_engine->generateTone(tone);
+            updateButtonStates();
+        }
+    }
+}
+
+void MainWidget::initializeRecord()
+{
+    reset();
+    setMode(RecordMode);
+    if (m_engine->initializeRecord())
+        updateButtonStates();
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MainWidget::createUi()
+{
+    createMenus();
+
+    setWindowTitle(tr("Spectrum Analyser"));
+
+    QVBoxLayout *windowLayout = new QVBoxLayout(this);
+
+    m_infoMessage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    m_infoMessage->setAlignment(Qt::AlignHCenter);
+    windowLayout->addWidget(m_infoMessage);
+
+#ifdef SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+    QScopedPointer<QHBoxLayout> waveformLayout(new QHBoxLayout);
+    waveformLayout->addWidget(m_progressBar);
+    m_progressBar->setMinimumHeight(m_waveform->minimumHeight());
+    waveformLayout->setMargin(0);
+    m_waveform->setLayout(waveformLayout.data());
+    waveformLayout.take();
+    windowLayout->addWidget(m_waveform);
+#else
+#ifndef DISABLE_WAVEFORM
+    windowLayout->addWidget(m_waveform);
+#endif // DISABLE_WAVEFORM
+    windowLayout->addWidget(m_progressBar);
+#endif // SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+
+    // Spectrograph and level meter
+
+    QScopedPointer<QHBoxLayout> analysisLayout(new QHBoxLayout);
+    analysisLayout->addWidget(m_spectrograph);
+    analysisLayout->addWidget(m_levelMeter);
+    windowLayout->addLayout(analysisLayout.data());
+    analysisLayout.take();
+
+    // Button panel
+
+    const QSize buttonSize(30, 30);
+
+    m_modeButton->setText(tr("Mode"));
+
+    m_recordIcon = QIcon(":/images/record.png");
+    m_recordButton->setIcon(m_recordIcon);
+    m_recordButton->setEnabled(false);
+    m_recordButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    m_recordButton->setMinimumSize(buttonSize);
+
+    m_pauseIcon = style()->standardIcon(QStyle::SP_MediaPause);
+    m_pauseButton->setIcon(m_pauseIcon);
+    m_pauseButton->setEnabled(false);
+    m_pauseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    m_pauseButton->setMinimumSize(buttonSize);
+
+    m_playIcon = style()->standardIcon(QStyle::SP_MediaPlay);
+    m_playButton->setIcon(m_playIcon);
+    m_playButton->setEnabled(false);
+    m_playButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    m_playButton->setMinimumSize(buttonSize);
+
+    m_settingsIcon = QIcon(":/images/settings.png");
+    m_settingsButton->setIcon(m_settingsIcon);
+    m_settingsButton->setEnabled(true);
+    m_settingsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    m_settingsButton->setMinimumSize(buttonSize);
+
+    QScopedPointer<QHBoxLayout> buttonPanelLayout(new QHBoxLayout);
+    buttonPanelLayout->addStretch();
+    buttonPanelLayout->addWidget(m_modeButton);
+    buttonPanelLayout->addWidget(m_recordButton);
+    buttonPanelLayout->addWidget(m_pauseButton);
+    buttonPanelLayout->addWidget(m_playButton);
+    buttonPanelLayout->addWidget(m_settingsButton);
+
+    QWidget *buttonPanel = new QWidget(this);
+    buttonPanel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    buttonPanel->setLayout(buttonPanelLayout.data());
+    buttonPanelLayout.take(); // ownership transferred to buttonPanel
+
+    QScopedPointer<QHBoxLayout> bottomPaneLayout(new QHBoxLayout);
+    bottomPaneLayout->addWidget(buttonPanel);
+    windowLayout->addLayout(bottomPaneLayout.data());
+    bottomPaneLayout.take(); // ownership transferred to windowLayout
+
+    // Apply layout
+
+    setLayout(windowLayout);
+}
+
+void MainWidget::connectUi()
+{
+    CHECKED_CONNECT(m_recordButton, SIGNAL(clicked()),
+            m_engine, SLOT(startRecording()));
+
+    CHECKED_CONNECT(m_pauseButton, SIGNAL(clicked()),
+            m_engine, SLOT(suspend()));
+
+    CHECKED_CONNECT(m_playButton, SIGNAL(clicked()),
+            m_engine, SLOT(startPlayback()));
+
+    CHECKED_CONNECT(m_settingsButton, SIGNAL(clicked()),
+            this, SLOT(showSettingsDialog()));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(stateChanged(QAudio::Mode,QAudio::State)),
+            this, SLOT(stateChanged(QAudio::Mode,QAudio::State)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(formatChanged(const QAudioFormat &)),
+            this, SLOT(formatChanged(const QAudioFormat &)));
+
+    m_progressBar->bufferDurationChanged(m_engine->bufferDuration());
+
+    CHECKED_CONNECT(m_engine, SIGNAL(bufferDurationChanged(qint64)),
+            this, SLOT(bufferDurationChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(dataDurationChanged(qint64)),
+            this, SLOT(dataDurationChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)),
+            m_progressBar, SLOT(recordPositionChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(playPositionChanged(qint64)),
+            m_progressBar, SLOT(playPositionChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)),
+            this, SLOT(positionChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(playPositionChanged(qint64)),
+            this, SLOT(positionChanged(qint64)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(levelChanged(qreal, qreal, int)),
+            m_levelMeter, SLOT(levelChanged(qreal, qreal, int)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(spectrumChanged(qint64, qint64, const FrequencySpectrum &)),
+            this, SLOT(spectrumChanged(qint64, qint64, const FrequencySpectrum &)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(infoMessage(QString, int)),
+            this, SLOT(infoMessage(QString, int)));
+
+    CHECKED_CONNECT(m_engine, SIGNAL(errorMessage(QString, QString)),
+            this, SLOT(errorMessage(QString, QString)));
+
+    CHECKED_CONNECT(m_spectrograph, SIGNAL(infoMessage(QString, int)),
+            this, SLOT(infoMessage(QString, int)));
+}
+
+void MainWidget::createMenus()
+{
+    m_modeButton->setMenu(m_modeMenu);
+
+    m_generateToneAction = m_modeMenu->addAction(tr("Play generated tone"));
+    m_recordAction = m_modeMenu->addAction(tr("Record and play back"));
+    m_loadFileAction = m_modeMenu->addAction(tr("Play file"));
+
+    m_loadFileAction->setCheckable(true);
+    m_generateToneAction->setCheckable(true);
+    m_recordAction->setCheckable(true);
+
+    connect(m_loadFileAction, SIGNAL(triggered(bool)), this, SLOT(showFileDialog()));
+    connect(m_generateToneAction, SIGNAL(triggered(bool)), this, SLOT(showToneGeneratorDialog()));
+    connect(m_recordAction, SIGNAL(triggered(bool)), this, SLOT(initializeRecord()));
+}
+
+void MainWidget::updateButtonStates()
+{
+    const bool recordEnabled = ((QAudio::AudioOutput == m_engine->mode() ||
+                                (QAudio::ActiveState != m_engine->state() &&
+                                 QAudio::IdleState != m_engine->state())) &&
+                                RecordMode == m_mode);
+    m_recordButton->setEnabled(recordEnabled);
+
+    const bool pauseEnabled = (QAudio::ActiveState == m_engine->state() ||
+                               QAudio::IdleState == m_engine->state());
+    m_pauseButton->setEnabled(pauseEnabled);
+
+    const bool playEnabled = (m_engine->dataDuration() &&
+                              (QAudio::AudioOutput != m_engine->mode() ||
+                               (QAudio::ActiveState != m_engine->state() &&
+                                QAudio::IdleState != m_engine->state())));
+    m_playButton->setEnabled(playEnabled);
+}
+
+void MainWidget::reset()
+{
+#ifndef DISABLE_WAVEFORM
+    m_waveform->reset();
+#endif
+    m_engine->reset();
+    m_levelMeter->reset();
+    m_spectrograph->reset();
+    m_progressBar->reset();
+}
+
+void MainWidget::setMode(Mode mode)
+{
+
+    m_mode = mode;
+    m_loadFileAction->setChecked(LoadFileMode == mode);
+    m_generateToneAction->setChecked(GenerateToneMode == mode);
+    m_recordAction->setChecked(RecordMode == mode);
+}
+
Index: /trunk/demos/spectrum/app/mainwidget.h
===================================================================
--- /trunk/demos/spectrum/app/mainwidget.h	(revision 769)
+++ /trunk/demos/spectrum/app/mainwidget.h	(revision 769)
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MAINWIDGET_H
+#define MAINWIDGET_H
+
+#include <QWidget>
+#include <QIcon>
+#include <QtMultimedia/qaudio.h>
+
+class Engine;
+class FrequencySpectrum;
+class ProgressBar;
+class Spectrograph;
+class Waveform;
+class LevelMeter;
+class SettingsDialog;
+class ToneGeneratorDialog;
+
+QT_FORWARD_DECLARE_CLASS(QAudioFormat)
+QT_FORWARD_DECLARE_CLASS(QLabel)
+QT_FORWARD_DECLARE_CLASS(QPushButton)
+QT_FORWARD_DECLARE_CLASS(QMenu)
+QT_FORWARD_DECLARE_CLASS(QAction)
+
+/**
+ * Main application widget, responsible for connecting the various UI
+ * elements to the Engine.
+ */
+class MainWidget : public QWidget {
+    Q_OBJECT
+public:
+    MainWidget(QWidget *parent = 0);
+    ~MainWidget();
+
+    // QObject
+    void timerEvent(QTimerEvent *event);
+
+public slots:
+    void stateChanged(QAudio::Mode mode, QAudio::State state);
+    void formatChanged(const QAudioFormat &format);
+    void spectrumChanged(qint64 position, qint64 length,
+                         const FrequencySpectrum &spectrum);
+    void infoMessage(const QString &message, int timeoutMs);
+    void errorMessage(const QString &heading, const QString &detail);
+    void positionChanged(qint64 position);
+    void bufferDurationChanged(qint64 duration);
+
+private slots:
+    void showFileDialog();
+    void showSettingsDialog();
+    void showToneGeneratorDialog();
+    void initializeRecord();
+    void dataDurationChanged(qint64 duration);
+
+private:
+    void createUi();
+    void createMenus();
+    void connectUi();
+    void updateButtonStates();
+    void reset();
+
+    enum Mode {
+        NoMode,
+        RecordMode,
+        GenerateToneMode,
+        LoadFileMode
+    };
+
+    void setMode(Mode mode);
+
+private:
+    Mode                    m_mode;
+
+    Engine*                 m_engine;
+
+    Waveform*               m_waveform;
+    ProgressBar*            m_progressBar;
+    Spectrograph*           m_spectrograph;
+    LevelMeter*             m_levelMeter;
+
+    QPushButton*            m_modeButton;
+    QPushButton*            m_recordButton;
+    QIcon                   m_recordIcon;
+    QPushButton*            m_pauseButton;
+    QIcon                   m_pauseIcon;
+    QPushButton*            m_playButton;
+    QIcon                   m_playIcon;
+    QPushButton*            m_settingsButton;
+    QIcon                   m_settingsIcon;
+
+    QLabel*                 m_infoMessage;
+    int                     m_infoMessageTimerId;
+
+    SettingsDialog*         m_settingsDialog;
+    ToneGeneratorDialog*    m_toneGeneratorDialog;
+
+    QMenu*                  m_modeMenu;
+    QAction*                m_loadFileAction;
+    QAction*                m_generateToneAction;
+    QAction*                m_recordAction;
+
+};
+
+#endif // MAINWIDGET_H
Index: /trunk/demos/spectrum/app/progressbar.cpp
===================================================================
--- /trunk/demos/spectrum/app/progressbar.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/progressbar.cpp	(revision 769)
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "progressbar.h"
+#include "spectrum.h"
+#include <QPainter>
+
+ProgressBar::ProgressBar(QWidget *parent)
+    :   QWidget(parent)
+    ,   m_bufferDuration(0)
+    ,   m_recordPosition(0)
+    ,   m_playPosition(0)
+    ,   m_windowPosition(0)
+    ,   m_windowLength(0)
+{
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    setMinimumHeight(30);
+#ifdef SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+    setAutoFillBackground(false);
+#endif
+}
+
+ProgressBar::~ProgressBar()
+{
+
+}
+
+void ProgressBar::reset()
+{
+    m_bufferDuration = 0;
+    m_recordPosition = 0;
+    m_playPosition = 0;
+    m_windowPosition = 0;
+    m_windowLength = 0;
+    update();
+}
+
+void ProgressBar::paintEvent(QPaintEvent * /*event*/)
+{
+    QPainter painter(this);
+
+    QColor bufferColor(0, 0, 255);
+    QColor windowColor(0, 255, 0);
+
+#ifdef SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+    bufferColor.setAlphaF(0.5);
+    windowColor.setAlphaF(0.5);
+#else
+    painter.fillRect(rect(), Qt::black);
+#endif
+
+    if (m_bufferDuration) {
+        QRect bar = rect();
+        const qreal play = qreal(m_playPosition) / m_bufferDuration;
+        bar.setLeft(rect().left() + play * rect().width());
+        const qreal record = qreal(m_recordPosition) / m_bufferDuration;
+        bar.setRight(rect().left() + record * rect().width());
+        painter.fillRect(bar, bufferColor);
+
+        QRect window = rect();
+        const qreal windowLeft = qreal(m_windowPosition) / m_bufferDuration;
+        window.setLeft(rect().left() + windowLeft * rect().width());
+        const qreal windowWidth = qreal(m_windowLength) / m_bufferDuration;
+        window.setWidth(windowWidth * rect().width());
+        painter.fillRect(window, windowColor);
+    }
+}
+
+void ProgressBar::bufferDurationChanged(qint64 bufferSize)
+{
+    m_bufferDuration = bufferSize;
+    m_recordPosition = 0;
+    m_playPosition = 0;
+    m_windowPosition = 0;
+    m_windowLength = 0;
+    repaint();
+}
+
+void ProgressBar::recordPositionChanged(qint64 recordPosition)
+{
+    Q_ASSERT(recordPosition >= 0);
+    Q_ASSERT(recordPosition <= m_bufferDuration);
+    m_recordPosition = recordPosition;
+    repaint();
+}
+
+void ProgressBar::playPositionChanged(qint64 playPosition)
+{
+    Q_ASSERT(playPosition >= 0);
+    Q_ASSERT(playPosition <= m_bufferDuration);
+    m_playPosition = playPosition;
+    repaint();
+}
+
+void ProgressBar::windowChanged(qint64 position, qint64 length)
+{
+    Q_ASSERT(position >= 0);
+    Q_ASSERT(position <= m_bufferDuration);
+    Q_ASSERT(position + length <= m_bufferDuration);
+    m_windowPosition = position;
+    m_windowLength = length;
+    repaint();
+}
Index: /trunk/demos/spectrum/app/progressbar.h
===================================================================
--- /trunk/demos/spectrum/app/progressbar.h	(revision 769)
+++ /trunk/demos/spectrum/app/progressbar.h	(revision 769)
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PROGRESSBAR_H
+#define PROGRESSBAR_H
+
+#include <QWidget>
+
+/**
+ * Widget which displays a the current fill state of the Engine's internal
+ * buffer, and the current play/record position within that buffer.
+ */
+class ProgressBar : public QWidget {
+    Q_OBJECT
+public:
+    ProgressBar(QWidget *parent = 0);
+    ~ProgressBar();
+
+    void reset();
+    void paintEvent(QPaintEvent *event);
+
+public slots:
+    void bufferDurationChanged(qint64 bufferSize);
+    void recordPositionChanged(qint64 recordPosition);
+    void playPositionChanged(qint64 playPosition);
+    void windowChanged(qint64 position, qint64 length);
+
+private:
+    qint64 m_bufferDuration;
+    qint64 m_recordPosition;
+    qint64 m_playPosition;
+    qint64 m_windowPosition;
+    qint64 m_windowLength;
+
+};
+
+#endif // PROGRESSBAR_H
Index: /trunk/demos/spectrum/app/settingsdialog.cpp
===================================================================
--- /trunk/demos/spectrum/app/settingsdialog.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/settingsdialog.cpp	(revision 769)
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "settingsdialog.h"
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QCheckBox>
+#include <QSlider>
+#include <QSpinBox>
+
+SettingsDialog::SettingsDialog(
+            const QList<QAudioDeviceInfo> &availableInputDevices,
+            const QList<QAudioDeviceInfo> &availableOutputDevices,
+            QWidget *parent)
+    :   QDialog(parent)
+    ,   m_windowFunction(DefaultWindowFunction)
+    ,   m_inputDeviceComboBox(new QComboBox(this))
+    ,   m_outputDeviceComboBox(new QComboBox(this))
+    ,   m_windowFunctionComboBox(new QComboBox(this))
+{
+    QVBoxLayout *dialogLayout = new QVBoxLayout(this);
+
+    // Populate combo boxes
+
+    QAudioDeviceInfo device;
+    foreach (device, availableInputDevices)
+        m_inputDeviceComboBox->addItem(device.deviceName(),
+                                       qVariantFromValue(device));
+    foreach (device, availableOutputDevices)
+        m_outputDeviceComboBox->addItem(device.deviceName(),
+                                       qVariantFromValue(device));
+
+    m_windowFunctionComboBox->addItem(tr("None"), qVariantFromValue(int(NoWindow)));
+    m_windowFunctionComboBox->addItem("Hann", qVariantFromValue(int(HannWindow)));
+    m_windowFunctionComboBox->setCurrentIndex(m_windowFunction);
+
+    // Initialize default devices
+    if (!availableInputDevices.empty())
+        m_inputDevice = availableInputDevices.front();
+    if (!availableOutputDevices.empty())
+        m_outputDevice = availableOutputDevices.front();
+
+    // Add widgets to layout
+
+    QScopedPointer<QHBoxLayout> inputDeviceLayout(new QHBoxLayout);
+    QLabel *inputDeviceLabel = new QLabel(tr("Input device"), this);
+    inputDeviceLayout->addWidget(inputDeviceLabel);
+    inputDeviceLayout->addWidget(m_inputDeviceComboBox);
+    dialogLayout->addLayout(inputDeviceLayout.data());
+    inputDeviceLayout.take(); // ownership transferred to dialogLayout
+
+    QScopedPointer<QHBoxLayout> outputDeviceLayout(new QHBoxLayout);
+    QLabel *outputDeviceLabel = new QLabel(tr("Output device"), this);
+    outputDeviceLayout->addWidget(outputDeviceLabel);
+    outputDeviceLayout->addWidget(m_outputDeviceComboBox);
+    dialogLayout->addLayout(outputDeviceLayout.data());
+    outputDeviceLayout.take(); // ownership transferred to dialogLayout
+
+    QScopedPointer<QHBoxLayout> windowFunctionLayout(new QHBoxLayout);
+    QLabel *windowFunctionLabel = new QLabel(tr("Window function"), this);
+    windowFunctionLayout->addWidget(windowFunctionLabel);
+    windowFunctionLayout->addWidget(m_windowFunctionComboBox);
+    dialogLayout->addLayout(windowFunctionLayout.data());
+    windowFunctionLayout.take(); // ownership transferred to dialogLayout
+
+    // Connect
+    CHECKED_CONNECT(m_inputDeviceComboBox, SIGNAL(activated(int)),
+                    this, SLOT(inputDeviceChanged(int)));
+    CHECKED_CONNECT(m_outputDeviceComboBox, SIGNAL(activated(int)),
+                    this, SLOT(outputDeviceChanged(int)));
+    CHECKED_CONNECT(m_windowFunctionComboBox, SIGNAL(activated(int)),
+                    this, SLOT(windowFunctionChanged(int)));
+
+    // Add standard buttons to layout
+    QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
+    buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+    dialogLayout->addWidget(buttonBox);
+
+    // Connect standard buttons
+    CHECKED_CONNECT(buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()),
+                    this, SLOT(accept()));
+    CHECKED_CONNECT(buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()),
+                    this, SLOT(reject()));
+
+    setLayout(dialogLayout);
+}
+
+SettingsDialog::~SettingsDialog()
+{
+
+}
+
+void SettingsDialog::windowFunctionChanged(int index)
+{
+    m_windowFunction = static_cast<WindowFunction>(
+            m_windowFunctionComboBox->itemData(index).value<int>());
+}
+
+void SettingsDialog::inputDeviceChanged(int index)
+{
+    m_inputDevice = m_inputDeviceComboBox->itemData(index).value<QAudioDeviceInfo>();
+}
+
+void SettingsDialog::outputDeviceChanged(int index)
+{
+    m_outputDevice = m_outputDeviceComboBox->itemData(index).value<QAudioDeviceInfo>();
+}
+
Index: /trunk/demos/spectrum/app/settingsdialog.h
===================================================================
--- /trunk/demos/spectrum/app/settingsdialog.h	(revision 769)
+++ /trunk/demos/spectrum/app/settingsdialog.h	(revision 769)
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include "spectrum.h"
+#include <QDialog>
+#include <QtMultimedia/QAudioDeviceInfo>
+
+QT_FORWARD_DECLARE_CLASS(QComboBox)
+QT_FORWARD_DECLARE_CLASS(QCheckBox)
+QT_FORWARD_DECLARE_CLASS(QSlider)
+QT_FORWARD_DECLARE_CLASS(QSpinBox)
+QT_FORWARD_DECLARE_CLASS(QGridLayout)
+
+/**
+ * Dialog used to control settings such as the audio input / output device
+ * and the windowing function.
+ */
+class SettingsDialog : public QDialog {
+    Q_OBJECT
+public:
+    SettingsDialog(const QList<QAudioDeviceInfo> &availableInputDevices,
+                   const QList<QAudioDeviceInfo> &availableOutputDevices,
+                   QWidget *parent = 0);
+    ~SettingsDialog();
+
+    WindowFunction windowFunction() const           { return m_windowFunction; }
+    const QAudioDeviceInfo& inputDevice() const     { return m_inputDevice; }
+    const QAudioDeviceInfo& outputDevice() const    { return m_outputDevice; }
+
+private slots:
+    void windowFunctionChanged(int index);
+    void inputDeviceChanged(int index);
+    void outputDeviceChanged(int index);
+
+private:
+    WindowFunction   m_windowFunction;
+    QAudioDeviceInfo m_inputDevice;
+    QAudioDeviceInfo m_outputDevice;
+
+    QComboBox*      m_inputDeviceComboBox;
+    QComboBox*      m_outputDeviceComboBox;
+
+    QComboBox*      m_windowFunctionComboBox;
+
+};
+
+#endif // SETTINGSDIALOG_H
Index: /trunk/demos/spectrum/app/spectrograph.cpp
===================================================================
--- /trunk/demos/spectrum/app/spectrograph.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/spectrograph.cpp	(revision 769)
@@ -0,0 +1,241 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "spectrograph.h"
+#include <QPainter>
+#include <QMouseEvent>
+#include <QDebug>
+#include <QTimerEvent>
+
+const int NullTimerId = -1;
+const int NullIndex = -1;
+const int BarSelectionInterval = 2000;
+
+Spectrograph::Spectrograph(QWidget *parent)
+    :   QWidget(parent)
+    ,   m_barSelected(NullIndex)
+    ,   m_timerId(NullTimerId)
+    ,   m_lowFreq(0.0)
+    ,   m_highFreq(0.0)
+{
+    setMinimumHeight(100);
+}
+
+Spectrograph::~Spectrograph()
+{
+
+}
+
+void Spectrograph::setParams(int numBars, qreal lowFreq, qreal highFreq)
+{
+    Q_ASSERT(numBars > 0);
+    Q_ASSERT(highFreq > lowFreq);
+    m_bars.resize(numBars);
+    m_lowFreq = lowFreq;
+    m_highFreq = highFreq;
+    updateBars();
+}
+
+void Spectrograph::timerEvent(QTimerEvent *event)
+{
+    Q_ASSERT(event->timerId() == m_timerId);
+    Q_UNUSED(event) // suppress warnings in release builds
+    killTimer(m_timerId);
+    m_timerId = NullTimerId;
+    m_barSelected = NullIndex;
+    update();
+}
+
+void Spectrograph::paintEvent(QPaintEvent *event)
+{
+    Q_UNUSED(event)
+
+    QPainter painter(this);
+    painter.fillRect(rect(), Qt::black);
+
+    const int numBars = m_bars.count();
+
+    // Highlight region of selected bar
+    if (m_barSelected != NullIndex && numBars) {
+        QRect regionRect = rect();
+        regionRect.setLeft(m_barSelected * rect().width() / numBars);
+        regionRect.setWidth(rect().width() / numBars);
+        QColor regionColor(202, 202, 64);
+        painter.setBrush(Qt::DiagCrossPattern);
+        painter.fillRect(regionRect, regionColor);
+        painter.setBrush(Qt::NoBrush);
+    }
+
+    QColor barColor(51, 204, 102);
+    QColor clipColor(255, 255, 0);
+
+    // Draw the outline
+    const QColor gridColor = barColor.darker();
+    QPen gridPen(gridColor);
+    painter.setPen(gridPen);
+    painter.drawLine(rect().topLeft(), rect().topRight());
+    painter.drawLine(rect().topRight(), rect().bottomRight());
+    painter.drawLine(rect().bottomRight(), rect().bottomLeft());
+    painter.drawLine(rect().bottomLeft(), rect().topLeft());
+
+    QVector<qreal> dashes;
+    dashes << 2 << 2;
+    gridPen.setDashPattern(dashes);
+    painter.setPen(gridPen);
+
+    // Draw vertical lines between bars
+    if (numBars) {
+        const int numHorizontalSections = numBars;
+        QLine line(rect().topLeft(), rect().bottomLeft());
+        for (int i=1; i<numHorizontalSections; ++i) {
+            line.translate(rect().width()/numHorizontalSections, 0);
+            painter.drawLine(line);
+        }
+    }
+
+    // Draw horizontal lines
+    const int numVerticalSections = 10;
+    QLine line(rect().topLeft(), rect().topRight());
+    for (int i=1; i<numVerticalSections; ++i) {
+        line.translate(0, rect().height()/numVerticalSections);
+        painter.drawLine(line);
+    }
+
+    barColor = barColor.lighter();
+    barColor.setAlphaF(0.75);
+    clipColor.setAlphaF(0.75);
+
+    // Draw the bars
+    if (numBars) {
+        // Calculate width of bars and gaps
+        const int widgetWidth = rect().width();
+        const int barPlusGapWidth = widgetWidth / numBars;
+        const int barWidth = 0.8 * barPlusGapWidth;
+        const int gapWidth = barPlusGapWidth - barWidth;
+        const int paddingWidth = widgetWidth - numBars * (barWidth + gapWidth);
+        const int leftPaddingWidth = (paddingWidth + gapWidth) / 2;
+        const int barHeight = rect().height() - 2 * gapWidth;
+
+        for (int i=0; i<numBars; ++i) {
+            const qreal value = m_bars[i].value;
+            Q_ASSERT(value >= 0.0 && value <= 1.0);
+            QRect bar = rect();
+            bar.setLeft(rect().left() + leftPaddingWidth + (i * (gapWidth + barWidth)));
+            bar.setWidth(barWidth);
+            bar.setTop(rect().top() + gapWidth + (1.0 - value) * barHeight);
+            bar.setBottom(rect().bottom() - gapWidth);
+
+            QColor color = barColor;
+            if (m_bars[i].clipped)
+                color = clipColor;
+
+            painter.fillRect(bar, color);
+        }
+    }
+}
+
+void Spectrograph::mousePressEvent(QMouseEvent *event)
+{
+    const QPoint pos = event->pos();
+    const int index = m_bars.count() * (pos.x() - rect().left()) / rect().width();
+    selectBar(index);
+}
+
+void Spectrograph::reset()
+{
+    m_spectrum.reset();
+    spectrumChanged(m_spectrum);
+}
+
+void Spectrograph::spectrumChanged(const FrequencySpectrum &spectrum)
+{
+    m_spectrum = spectrum;
+    updateBars();
+}
+
+int Spectrograph::barIndex(qreal frequency) const
+{
+    Q_ASSERT(frequency >= m_lowFreq && frequency < m_highFreq);
+    const qreal bandWidth = (m_highFreq - m_lowFreq) / m_bars.count();
+    const int index = (frequency - m_lowFreq) / bandWidth;
+    if(index <0 || index >= m_bars.count())
+        Q_ASSERT(false);
+    return index;
+}
+
+QPair<qreal, qreal> Spectrograph::barRange(int index) const
+{
+    Q_ASSERT(index >= 0 && index < m_bars.count());
+    const qreal bandWidth = (m_highFreq - m_lowFreq) / m_bars.count();
+    return QPair<qreal, qreal>(index * bandWidth, (index+1) * bandWidth);
+}
+
+void Spectrograph::updateBars()
+{
+    m_bars.fill(Bar());
+    FrequencySpectrum::const_iterator i = m_spectrum.begin();
+    const FrequencySpectrum::const_iterator end = m_spectrum.end();
+    for ( ; i != end; ++i) {
+        const FrequencySpectrum::Element e = *i;
+        if (e.frequency >= m_lowFreq && e.frequency < m_highFreq) {
+            Bar &bar = m_bars[barIndex(e.frequency)];
+            bar.value = qMax(bar.value, e.amplitude);
+            bar.clipped |= e.clipped;
+        }
+    }
+    update();
+}
+
+void Spectrograph::selectBar(int index) {
+    const QPair<qreal, qreal> frequencyRange = barRange(index);
+    const QString message = QString("%1 - %2 Hz")
+                                .arg(frequencyRange.first)
+                                .arg(frequencyRange.second);
+    emit infoMessage(message, BarSelectionInterval);
+
+    if (NullTimerId != m_timerId)
+        killTimer(m_timerId);
+    m_timerId = startTimer(BarSelectionInterval);
+
+    m_barSelected = index;
+    update();
+}
+
+
Index: /trunk/demos/spectrum/app/spectrograph.h
===================================================================
--- /trunk/demos/spectrum/app/spectrograph.h	(revision 769)
+++ /trunk/demos/spectrum/app/spectrograph.h	(revision 769)
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SPECTROGRAPH_H
+#define SPECTROGRAPH_H
+
+#include <QWidget>
+#include "frequencyspectrum.h"
+
+QT_FORWARD_DECLARE_CLASS(QMouseEvent)
+
+/**
+ * Widget which displays a spectrograph showing the frequency spectrum
+ * of the window of audio samples most recently analysed by the Engine.
+ */
+class Spectrograph : public QWidget {
+    Q_OBJECT
+public:
+    Spectrograph(QWidget *parent = 0);
+    ~Spectrograph();
+
+    void setParams(int numBars, qreal lowFreq, qreal highFreq);
+
+    // QObject
+    void timerEvent(QTimerEvent *event);
+
+    // QWidget
+    void paintEvent(QPaintEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+
+signals:
+    void infoMessage(const QString &message, int intervalMs);
+
+public slots:
+    void reset();
+    void spectrumChanged(const FrequencySpectrum &spectrum);
+
+private:
+    int barIndex(qreal frequency) const;
+    QPair<qreal, qreal> barRange(int barIndex) const;
+    void updateBars();
+
+    void selectBar(int index);
+
+private:
+    struct Bar {
+        Bar() : value(0.0), clipped(false) { }
+        qreal   value;
+        bool    clipped;
+    };
+
+    QVector<Bar>        m_bars;
+    int                 m_barSelected;
+    int                 m_timerId;
+    qreal               m_lowFreq;
+    qreal               m_highFreq;
+    FrequencySpectrum   m_spectrum;
+
+
+};
+
+#endif // SPECTROGRAPH_H
Index: /trunk/demos/spectrum/app/spectrum.h
===================================================================
--- /trunk/demos/spectrum/app/spectrum.h	(revision 769)
+++ /trunk/demos/spectrum/app/spectrum.h	(revision 769)
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SPECTRUM_H
+#define SPECTRUM_H
+
+#include <QtCore/qglobal.h>
+#include "utils.h"
+#include "fftreal_wrapper.h" // For FFTLengthPowerOfTwo
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+// Number of audio samples used to calculate the frequency spectrum
+const int    SpectrumLengthSamples  = PowerOfTwo<FFTLengthPowerOfTwo>::Result;
+
+// Number of bands in the frequency spectrum
+const int    SpectrumNumBands       = 10;
+
+// Lower bound of first band in the spectrum
+const qreal  SpectrumLowFreq        = 0.0; // Hz
+
+// Upper band of last band in the spectrum
+const qreal  SpectrumHighFreq       = 1000.0; // Hz
+
+// Waveform window size in microseconds
+const qint64 WaveformWindowDuration = 500 * 1000;
+
+// Length of waveform tiles in bytes
+// Ideally, these would match the QAudio*::bufferSize(), but that isn't
+// available until some time after QAudio*::start() has been called, and we
+// need this value in order to initialize the waveform display.
+// We therefore just choose a sensible value.
+const int   WaveformTileLength      = 4096;
+
+// Fudge factor used to calculate the spectrum bar heights
+const qreal SpectrumAnalyserMultiplier = 0.15;
+
+// Disable message timeout
+const int   NullMessageTimeout      = -1;
+
+
+//-----------------------------------------------------------------------------
+// Types and data structures
+//-----------------------------------------------------------------------------
+
+enum WindowFunction {
+    NoWindow,
+    HannWindow
+};
+
+const WindowFunction DefaultWindowFunction = HannWindow;
+
+struct Tone {
+    Tone(qreal freq = 0.0, qreal amp = 0.0)
+    :   frequency(freq), amplitude(amp)
+    { }
+
+    // Start and end frequencies for swept tone generation
+    qreal   frequency;
+
+    // Amplitude in range [0.0, 1.0]
+    qreal   amplitude;
+};
+
+struct SweptTone {
+    SweptTone(qreal start = 0.0, qreal end = 0.0, qreal amp = 0.0)
+    :   startFreq(start), endFreq(end), amplitude(amp)
+    { Q_ASSERT(end >= start); }
+
+    SweptTone(const Tone &tone)
+    :   startFreq(tone.frequency), endFreq(tone.frequency), amplitude(tone.amplitude)
+    { }
+
+    // Start and end frequencies for swept tone generation
+    qreal   startFreq;
+    qreal   endFreq;
+
+    // Amplitude in range [0.0, 1.0]
+    qreal   amplitude;
+};
+
+
+//-----------------------------------------------------------------------------
+// Macros
+//-----------------------------------------------------------------------------
+
+// Macro which connects a signal to a slot, and which causes application to
+// abort if the connection fails.  This is intended to catch programming errors
+// such as mis-typing a signal or slot name.  It is necessary to write our own
+// macro to do this - the following idiom
+//     Q_ASSERT(connect(source, signal, receiver, slot));
+// will not work because Q_ASSERT compiles to a no-op in release builds.
+
+#define CHECKED_CONNECT(source, signal, receiver, slot) \
+    if(!connect(source, signal, receiver, slot)) \
+        qt_assert_x(Q_FUNC_INFO, "CHECKED_CONNECT failed", __FILE__, __LINE__);
+
+// Handle some dependencies between macros defined in the .pro file
+
+#ifdef DISABLE_WAVEFORM
+#undef SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+#endif
+
+#endif // SPECTRUM_H
+
Index: /trunk/demos/spectrum/app/spectrum.qrc
===================================================================
--- /trunk/demos/spectrum/app/spectrum.qrc	(revision 769)
+++ /trunk/demos/spectrum/app/spectrum.qrc	(revision 769)
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/record.png</file>
+    <file>images/settings.png</file>
+</qresource>
+</RCC>
+
Index: /trunk/demos/spectrum/app/spectrum.sh
===================================================================
--- /trunk/demos/spectrum/app/spectrum.sh	(revision 769)
+++ /trunk/demos/spectrum/app/spectrum.sh	(revision 769)
@@ -0,0 +1,50 @@
+#!/bin/sh
+#############################################################################
+##
+## 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 examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt Commercial License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Nokia.
+##
+## 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.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3.0 as published by the Free Software
+## Foundation and appearing in the file LICENSE.GPL included in the
+## packaging of this file.  Please review the following information to
+## ensure the GNU General Public License version 3.0 requirements will be
+## met: http://www.gnu.org/copyleft/gpl.html.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info@nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+# Shell script for launching spectrum application on Unix systems other than Mac OSX
+
+bindir=`dirname "$0"`
+LD_LIBRARY_PATH="${bindir}:${LD_LIBRARY_PATH}"
+export LD_LIBRARY_PATH
+exec "${bindir}/spectrum.bin" ${1+"$@"}
+
Index: /trunk/demos/spectrum/app/spectrumanalyser.cpp
===================================================================
--- /trunk/demos/spectrum/app/spectrumanalyser.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/spectrumanalyser.cpp	(revision 769)
@@ -0,0 +1,279 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "spectrumanalyser.h"
+#include "utils.h"
+
+#include <QtCore/qmath.h>
+#include <QtCore/qmetatype.h>
+#include <QtMultimedia/QAudioFormat>
+#include <QThread>
+
+#include "fftreal_wrapper.h"
+
+SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent)
+    :   QObject(parent)
+#ifndef DISABLE_FFT
+    ,   m_fft(new FFTRealWrapper)
+#endif
+    ,   m_numSamples(SpectrumLengthSamples)
+    ,   m_windowFunction(DefaultWindowFunction)
+    ,   m_window(SpectrumLengthSamples, 0.0)
+    ,   m_input(SpectrumLengthSamples, 0.0)
+    ,   m_output(SpectrumLengthSamples, 0.0)
+    ,   m_spectrum(SpectrumLengthSamples)
+#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
+    ,   m_thread(new QThread(this))
+#endif
+{
+#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
+    moveToThread(m_thread);
+    m_thread->start();
+#endif
+    calculateWindow();
+}
+
+SpectrumAnalyserThread::~SpectrumAnalyserThread()
+{
+#ifndef DISABLE_FFT
+    delete m_fft;
+#endif
+}
+
+void SpectrumAnalyserThread::setWindowFunction(WindowFunction type)
+{
+    m_windowFunction = type;
+    calculateWindow();
+}
+
+void SpectrumAnalyserThread::calculateWindow()
+{
+    for (int i=0; i<m_numSamples; ++i) {
+        DataType x = 0.0;
+
+        switch (m_windowFunction) {
+        case NoWindow:
+            x = 1.0;
+            break;
+        case HannWindow:
+            x = 0.5 * (1 - qCos((2 * M_PI * i) / (m_numSamples - 1)));
+            break;
+        default:
+            Q_ASSERT(false);
+        }
+
+        m_window[i] = x;
+    }
+}
+
+void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer,
+                                                int inputFrequency,
+                                                int bytesPerSample)
+{
+#ifndef DISABLE_FFT
+    Q_ASSERT(buffer.size() == m_numSamples * bytesPerSample);
+
+    // Initialize data array
+    const char *ptr = buffer.constData();
+    for (int i=0; i<m_numSamples; ++i) {
+        const qint16 pcmSample = *reinterpret_cast<const qint16*>(ptr);
+        // Scale down to range [-1.0, 1.0]
+        const DataType realSample = pcmToReal(pcmSample);
+        const DataType windowedSample = realSample * m_window[i];
+        m_input[i] = windowedSample;
+        ptr += bytesPerSample;
+    }
+
+    // Calculate the FFT
+    m_fft->calculateFFT(m_output.data(), m_input.data());
+
+    // Analyse output to obtain amplitude and phase for each frequency
+    for (int i=2; i<=m_numSamples/2; ++i) {
+        // Calculate frequency of this complex sample
+        m_spectrum[i].frequency = qreal(i * inputFrequency) / (m_numSamples);
+
+        const qreal real = m_output[i];
+        qreal imag = 0.0;
+        if (i>0 && i<m_numSamples/2)
+            imag = m_output[m_numSamples/2 + i];
+
+        const qreal magnitude = sqrt(real*real + imag*imag);
+        qreal amplitude = SpectrumAnalyserMultiplier * log(magnitude);
+
+        // Bound amplitude to [0.0, 1.0]
+        m_spectrum[i].clipped = (amplitude > 1.0);
+        amplitude = qMax(qreal(0.0), amplitude);
+        amplitude = qMin(qreal(1.0), amplitude);
+        m_spectrum[i].amplitude = amplitude;
+    }
+#endif
+
+    emit calculationComplete(m_spectrum);
+}
+
+
+//=============================================================================
+// SpectrumAnalyser
+//=============================================================================
+
+SpectrumAnalyser::SpectrumAnalyser(QObject *parent)
+    :   QObject(parent)
+    ,   m_thread(new SpectrumAnalyserThread(this))
+    ,   m_state(Idle)
+#ifdef DUMP_SPECTRUMANALYSER
+    ,   m_count(0)
+#endif
+{
+    CHECKED_CONNECT(m_thread, SIGNAL(calculationComplete(FrequencySpectrum)),
+                    this, SLOT(calculationComplete(FrequencySpectrum)));
+}
+
+SpectrumAnalyser::~SpectrumAnalyser()
+{
+
+}
+
+#ifdef DUMP_SPECTRUMANALYSER
+void SpectrumAnalyser::setOutputPath(const QString &outputDir)
+{
+    m_outputDir.setPath(outputDir);
+    m_textFile.setFileName(m_outputDir.filePath("spectrum.txt"));
+    m_textFile.open(QIODevice::WriteOnly | QIODevice::Text);
+    m_textStream.setDevice(&m_textFile);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void SpectrumAnalyser::setWindowFunction(WindowFunction type)
+{
+    const bool b = QMetaObject::invokeMethod(m_thread, "setWindowFunction",
+                              Qt::AutoConnection,
+                              Q_ARG(WindowFunction, type));
+    Q_ASSERT(b);
+    Q_UNUSED(b) // suppress warnings in release builds
+}
+
+void SpectrumAnalyser::calculate(const QByteArray &buffer,
+                         const QAudioFormat &format)
+{
+    // QThread::currentThread is marked 'for internal use only', but
+    // we're only using it for debug output here, so it's probably OK :)
+    SPECTRUMANALYSER_DEBUG << "SpectrumAnalyser::calculate"
+                           << QThread::currentThread()
+                           << "state" << m_state;
+
+    if (isReady()) {
+        Q_ASSERT(isPCMS16LE(format));
+
+        const int bytesPerSample = format.sampleSize() * format.channels() / 8;
+
+#ifdef DUMP_SPECTRUMANALYSER
+        m_count++;
+        const QString pcmFileName = m_outputDir.filePath(QString("spectrum_%1.pcm").arg(m_count, 4, 10, QChar('0')));
+        QFile pcmFile(pcmFileName);
+        pcmFile.open(QIODevice::WriteOnly);
+        const int bufferLength = m_numSamples * bytesPerSample;
+        pcmFile.write(buffer, bufferLength);
+
+        m_textStream << "TimeDomain " << m_count << "\n";
+        const qint16* input = reinterpret_cast<const qint16*>(buffer);
+        for (int i=0; i<m_numSamples; ++i) {
+            m_textStream << i << "\t" << *input << "\n";
+            input += format.channels();
+        }
+#endif
+
+        m_state = Busy;
+
+        // Invoke SpectrumAnalyserThread::calculateSpectrum using QMetaObject.  If
+        // m_thread is in a different thread from the current thread, the
+        // calculation will be done in the child thread.
+        // Once the calculation is finished, a calculationChanged signal will be
+        // emitted by m_thread.
+        const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum",
+                                  Qt::AutoConnection,
+                                  Q_ARG(QByteArray, buffer),
+                                  Q_ARG(int, format.frequency()),
+                                  Q_ARG(int, bytesPerSample));
+        Q_ASSERT(b);
+        Q_UNUSED(b) // suppress warnings in release builds
+
+#ifdef DUMP_SPECTRUMANALYSER
+        m_textStream << "FrequencySpectrum " << m_count << "\n";
+        FrequencySpectrum::const_iterator x = m_spectrum.begin();
+        for (int i=0; i<m_numSamples; ++i, ++x)
+            m_textStream << i << "\t"
+                         << x->frequency << "\t"
+                         << x->amplitude<< "\t"
+                         << x->phase << "\n";
+#endif
+    }
+}
+
+bool SpectrumAnalyser::isReady() const
+{
+    return (Idle == m_state);
+}
+
+void SpectrumAnalyser::cancelCalculation()
+{
+    if (Busy == m_state)
+        m_state = Cancelled;
+}
+
+
+//-----------------------------------------------------------------------------
+// Private slots
+//-----------------------------------------------------------------------------
+
+void SpectrumAnalyser::calculationComplete(const FrequencySpectrum &spectrum)
+{
+    Q_ASSERT(Idle != m_state);
+    if (Busy == m_state)
+        emit spectrumChanged(spectrum);
+    m_state = Idle;
+}
+
+
+
+
Index: /trunk/demos/spectrum/app/spectrumanalyser.h
===================================================================
--- /trunk/demos/spectrum/app/spectrumanalyser.h	(revision 769)
+++ /trunk/demos/spectrum/app/spectrumanalyser.h	(revision 769)
@@ -0,0 +1,194 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SPECTRUMANALYSER_H
+#define SPECTRUMANALYSER_H
+
+#include <QByteArray>
+#include <QObject>
+#include <QVector>
+
+#ifdef DUMP_SPECTRUMANALYSER
+#include <QDir>
+#include <QFile>
+#include <QTextStream>
+#endif
+
+#include "frequencyspectrum.h"
+#include "spectrum.h"
+
+#ifndef DISABLE_FFT
+#include "FFTRealFixLenParam.h"
+#endif
+
+QT_FORWARD_DECLARE_CLASS(QAudioFormat)
+QT_FORWARD_DECLARE_CLASS(QThread)
+
+class FFTRealWrapper;
+
+class SpectrumAnalyserThreadPrivate;
+
+/**
+ * Implementation of the spectrum analysis which can be run in a
+ * separate thread.
+ */
+class SpectrumAnalyserThread : public QObject
+{
+    Q_OBJECT
+public:
+    SpectrumAnalyserThread(QObject *parent);
+    ~SpectrumAnalyserThread();
+
+public slots:
+    void setWindowFunction(WindowFunction type);
+    void calculateSpectrum(const QByteArray &buffer,
+                           int inputFrequency,
+                           int bytesPerSample);
+
+signals:
+    void calculationComplete(const FrequencySpectrum &spectrum);
+
+private:
+    void calculateWindow();
+
+private:
+#ifndef DISABLE_FFT
+    FFTRealWrapper*                             m_fft;
+#endif
+
+    const int                                   m_numSamples;
+
+    WindowFunction                              m_windowFunction;
+
+#ifdef DISABLE_FFT
+    typedef qreal                               DataType;
+#else
+    typedef FFTRealFixLenParam::DataType        DataType;
+#endif
+    QVector<DataType>                           m_window;
+
+    QVector<DataType>                           m_input;
+    QVector<DataType>                           m_output;
+
+    FrequencySpectrum                           m_spectrum;
+
+#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
+    QThread*                                    m_thread;
+#endif
+};
+
+/**
+ * Class which performs frequency spectrum analysis on a window of
+ * audio samples, provided to it by the Engine.
+ */
+class SpectrumAnalyser : public QObject
+{
+    Q_OBJECT
+public:
+    SpectrumAnalyser(QObject *parent = 0);
+    ~SpectrumAnalyser();
+
+#ifdef DUMP_SPECTRUMANALYSER
+    void setOutputPath(const QString &outputPath);
+#endif
+
+public:
+    /*
+     * Set the windowing function which is applied before calculating the FFT
+     */
+    void setWindowFunction(WindowFunction type);
+
+    /*
+     * Calculate a frequency spectrum
+     *
+     * \param buffer       Audio data
+     * \param format       Format of audio data
+     *
+     * Frequency spectrum is calculated asynchronously.  The result is returned
+     * via the spectrumChanged signal.
+     *
+     * An ongoing calculation can be cancelled by calling cancelCalculation().
+     *
+     */
+    void calculate(const QByteArray &buffer, const QAudioFormat &format);
+
+    /*
+     * Check whether the object is ready to perform another calculation
+     */
+    bool isReady() const;
+
+    /*
+     * Cancel an ongoing calculation
+     *
+     * Note that cancelling is asynchronous.
+     */
+    void cancelCalculation();
+
+signals:
+    void spectrumChanged(const FrequencySpectrum &spectrum);
+
+private slots:
+    void calculationComplete(const FrequencySpectrum &spectrum);
+
+private:
+    void calculateWindow();
+
+private:
+
+    SpectrumAnalyserThread*    m_thread;
+
+    enum State {
+        Idle,
+        Busy,
+        Cancelled
+    };
+
+    State              m_state;
+
+#ifdef DUMP_SPECTRUMANALYSER
+    QDir                m_outputDir;
+    int                 m_count;
+    QFile               m_textFile;
+    QTextStream         m_textStream;
+#endif
+};
+
+#endif // SPECTRUMANALYSER_H
+
Index: /trunk/demos/spectrum/app/tonegenerator.cpp
===================================================================
--- /trunk/demos/spectrum/app/tonegenerator.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/tonegenerator.cpp	(revision 769)
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "spectrum.h"
+#include "utils.h"
+#include <QByteArray>
+#include <QtMultimedia/QAudioFormat>
+#include <QtCore/qmath.h>
+#include <QtCore/qendian.h>
+
+void generateTone(const SweptTone &tone, const QAudioFormat &format, QByteArray &buffer)
+{
+    Q_ASSERT(isPCMS16LE(format));
+
+    const int channelBytes = format.sampleSize() / 8;
+    const int sampleBytes = format.channels() * channelBytes;
+    int length = buffer.size();
+    const int numSamples = buffer.size() / sampleBytes;
+
+    Q_ASSERT(length % sampleBytes == 0);
+    Q_UNUSED(sampleBytes) // suppress warning in release builds
+
+    unsigned char *ptr = reinterpret_cast<unsigned char *>(buffer.data());
+
+    qreal phase = 0.0;
+
+    const qreal d = 2 * M_PI / format.frequency();
+
+    // We can't generate a zero-frequency sine wave
+    const qreal startFreq = tone.startFreq ? tone.startFreq : 1.0;
+
+    // Amount by which phase increases on each sample
+    qreal phaseStep = d * startFreq;
+
+    // Amount by which phaseStep increases on each sample
+    // If this is non-zero, the output is a frequency-swept tone
+    const qreal phaseStepStep = d * (tone.endFreq - startFreq) / numSamples;
+
+    while (length) {
+        const qreal x = tone.amplitude * qSin(phase);
+        const qint16 value = realToPcm(x);
+        for (int i=0; i<format.channels(); ++i) {
+            qToLittleEndian<qint16>(value, ptr);
+            ptr += channelBytes;
+            length -= channelBytes;
+        }
+
+        phase += phaseStep;
+        while (phase > 2 * M_PI)
+            phase -= 2 * M_PI;
+        phaseStep += phaseStepStep;
+    }
+}
+
Index: /trunk/demos/spectrum/app/tonegenerator.h
===================================================================
--- /trunk/demos/spectrum/app/tonegenerator.h	(revision 769)
+++ /trunk/demos/spectrum/app/tonegenerator.h	(revision 769)
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TONEGENERATOR_H
+#define TONEGENERATOR_H
+
+#include <QtCore/qglobal.h>
+#include "spectrum.h"
+
+QT_FORWARD_DECLARE_CLASS(QAudioFormat)
+QT_FORWARD_DECLARE_CLASS(QByteArray)
+
+/**
+ * Generate a sine wave
+ */
+void generateTone(const SweptTone &tone, const QAudioFormat &format, QByteArray &buffer);
+
+#endif // TONEGENERATOR_H
+
Index: /trunk/demos/spectrum/app/tonegeneratordialog.cpp
===================================================================
--- /trunk/demos/spectrum/app/tonegeneratordialog.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/tonegeneratordialog.cpp	(revision 769)
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "tonegeneratordialog.h"
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QCheckBox>
+#include <QSlider>
+#include <QSpinBox>
+
+const int ToneGeneratorFreqMin = 1;
+const int ToneGeneratorFreqMax = 1000;
+const int ToneGeneratorFreqDefault = 440;
+const int ToneGeneratorAmplitudeDefault = 75;
+
+ToneGeneratorDialog::ToneGeneratorDialog(QWidget *parent)
+    :   QDialog(parent)
+    ,   m_toneGeneratorSweepCheckBox(new QCheckBox(tr("Frequency sweep"), this))
+    ,   m_frequencySweepEnabled(true)
+    ,   m_toneGeneratorControl(new QWidget(this))
+    ,   m_toneGeneratorFrequencyControl(new QWidget(this))
+    ,   m_frequencySlider(new QSlider(Qt::Horizontal, this))
+    ,   m_frequencySpinBox(new QSpinBox(this))
+    ,   m_frequency(ToneGeneratorFreqDefault)
+    ,   m_amplitudeSlider(new QSlider(Qt::Horizontal, this))
+{
+    QVBoxLayout *dialogLayout = new QVBoxLayout(this);
+
+    m_toneGeneratorSweepCheckBox->setChecked(true);
+
+    // Configure tone generator controls
+    m_frequencySlider->setRange(ToneGeneratorFreqMin, ToneGeneratorFreqMax);
+    m_frequencySlider->setValue(ToneGeneratorFreqDefault);
+    m_frequencySpinBox->setRange(ToneGeneratorFreqMin, ToneGeneratorFreqMax);
+    m_frequencySpinBox->setValue(ToneGeneratorFreqDefault);
+    m_amplitudeSlider->setRange(0, 100);
+    m_amplitudeSlider->setValue(ToneGeneratorAmplitudeDefault);
+
+    // Add widgets to layout
+
+    QScopedPointer<QGridLayout> frequencyControlLayout(new QGridLayout);
+    QLabel *frequencyLabel = new QLabel(tr("Frequency (Hz)"), this);
+    frequencyControlLayout->addWidget(frequencyLabel, 0, 0, 2, 1);
+    frequencyControlLayout->addWidget(m_frequencySlider, 0, 1);
+    frequencyControlLayout->addWidget(m_frequencySpinBox, 1, 1);
+    m_toneGeneratorFrequencyControl->setLayout(frequencyControlLayout.data());
+    frequencyControlLayout.take(); // ownership transferred to m_toneGeneratorFrequencyControl
+    m_toneGeneratorFrequencyControl->setEnabled(false);
+
+    QScopedPointer<QGridLayout> toneGeneratorLayout(new QGridLayout);
+    QLabel *amplitudeLabel = new QLabel(tr("Amplitude"), this);
+    toneGeneratorLayout->addWidget(m_toneGeneratorSweepCheckBox, 0, 1);
+    toneGeneratorLayout->addWidget(m_toneGeneratorFrequencyControl, 1, 0, 1, 2);
+    toneGeneratorLayout->addWidget(amplitudeLabel, 2, 0);
+    toneGeneratorLayout->addWidget(m_amplitudeSlider, 2, 1);
+    m_toneGeneratorControl->setLayout(toneGeneratorLayout.data());
+    m_toneGeneratorControl->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    dialogLayout->addWidget(m_toneGeneratorControl);
+    toneGeneratorLayout.take(); // ownership transferred
+
+    // Connect
+    CHECKED_CONNECT(m_toneGeneratorSweepCheckBox, SIGNAL(toggled(bool)),
+                    this, SLOT(frequencySweepEnabled(bool)));
+    CHECKED_CONNECT(m_frequencySlider, SIGNAL(valueChanged(int)),
+                    m_frequencySpinBox, SLOT(setValue(int)));
+    CHECKED_CONNECT(m_frequencySpinBox, SIGNAL(valueChanged(int)),
+                    m_frequencySlider, SLOT(setValue(int)));
+
+    // Add standard buttons to layout
+    QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
+    buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+    dialogLayout->addWidget(buttonBox);
+
+    // Connect standard buttons
+    CHECKED_CONNECT(buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()),
+                    this, SLOT(accept()));
+    CHECKED_CONNECT(buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()),
+                    this, SLOT(reject()));
+
+    setLayout(dialogLayout);
+}
+
+ToneGeneratorDialog::~ToneGeneratorDialog()
+{
+
+}
+
+bool ToneGeneratorDialog::isFrequencySweepEnabled() const
+{
+    return m_toneGeneratorSweepCheckBox->isChecked();
+}
+
+qreal ToneGeneratorDialog::frequency() const
+{
+    return qreal(m_frequencySlider->value());
+}
+
+qreal ToneGeneratorDialog::amplitude() const
+{
+    return qreal(m_amplitudeSlider->value()) / 100.0;
+}
+
+void ToneGeneratorDialog::frequencySweepEnabled(bool enabled)
+{
+    m_frequencySweepEnabled = enabled;
+    m_toneGeneratorFrequencyControl->setEnabled(!enabled);
+}
Index: /trunk/demos/spectrum/app/tonegeneratordialog.h
===================================================================
--- /trunk/demos/spectrum/app/tonegeneratordialog.h	(revision 769)
+++ /trunk/demos/spectrum/app/tonegeneratordialog.h	(revision 769)
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TONEGENERATORDIALOG_H
+#define TONEGENERATORDIALOG_H
+
+#include "spectrum.h"
+#include <QDialog>
+#include <QtMultimedia/QAudioDeviceInfo>
+
+QT_FORWARD_DECLARE_CLASS(QCheckBox)
+QT_FORWARD_DECLARE_CLASS(QSlider)
+QT_FORWARD_DECLARE_CLASS(QSpinBox)
+QT_FORWARD_DECLARE_CLASS(QGridLayout)
+
+/**
+ * Dialog which controls the parameters of the tone generator.
+ */
+class ToneGeneratorDialog : public QDialog {
+    Q_OBJECT
+public:
+    ToneGeneratorDialog(QWidget *parent = 0);
+    ~ToneGeneratorDialog();
+
+    bool isFrequencySweepEnabled() const;
+    qreal frequency() const;
+    qreal amplitude() const;
+
+private slots:
+    void frequencySweepEnabled(bool enabled);
+
+private:
+    QCheckBox*      m_toneGeneratorSweepCheckBox;
+    bool            m_frequencySweepEnabled;
+    QWidget*        m_toneGeneratorControl;
+    QWidget*        m_toneGeneratorFrequencyControl;
+    QSlider*        m_frequencySlider;
+    QSpinBox*       m_frequencySpinBox;
+    qreal           m_frequency;
+    QSlider*        m_amplitudeSlider;
+
+};
+
+#endif // TONEGENERATORDIALOG_H
Index: /trunk/demos/spectrum/app/utils.cpp
===================================================================
--- /trunk/demos/spectrum/app/utils.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/utils.cpp	(revision 769)
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtMultimedia/QAudioFormat>
+#include "utils.h"
+
+qint64 audioDuration(const QAudioFormat &format, qint64 bytes)
+{
+    return (bytes * 1000000) /
+        (format.frequency() * format.channels() * (format.sampleSize() / 8));
+}
+
+qint64 audioLength(const QAudioFormat &format, qint64 microSeconds)
+{
+   return (format.frequency() * format.channels() * (format.sampleSize() / 8))
+       * microSeconds / 1000000;
+}
+
+qreal nyquistFrequency(const QAudioFormat &format)
+{
+    return format.frequency() / 2;
+}
+
+QString formatToString(const QAudioFormat &format)
+{
+    QString result;
+
+    if (QAudioFormat() != format) {
+        if (format.codec() == "audio/pcm") {
+            Q_ASSERT(format.sampleType() == QAudioFormat::SignedInt);
+
+            const QString formatEndian = (format.byteOrder() == QAudioFormat::LittleEndian)
+                ?   QString("LE") : QString("BE");
+
+            QString formatType;
+            switch(format.sampleType()) {
+            case QAudioFormat::SignedInt:
+                formatType = "signed";
+                break;
+            case QAudioFormat::UnSignedInt:
+                formatType = "unsigned";
+                break;
+            case QAudioFormat::Float:
+                formatType = "float";
+                break;
+            case QAudioFormat::Unknown:
+                formatType = "unknown";
+                break;
+            }
+
+            QString formatChannels = QString("%1 channels").arg(format.channels());
+            switch (format.channels()) {
+            case 1:
+                formatChannels = "mono";
+                break;
+            case 2:
+                formatChannels = "stereo";
+                break;
+            }
+
+            result = QString("%1 Hz %2 bit %3 %4 %5")
+                .arg(format.frequency())
+                .arg(format.sampleSize())
+                .arg(formatType)
+                .arg(formatEndian)
+                .arg(formatChannels);
+        } else {
+            result = format.codec();
+        }
+    }
+
+    return result;
+}
+
+bool isPCM(const QAudioFormat &format)
+{
+    return (format.codec() == "audio/pcm");
+}
+
+
+bool isPCMS16LE(const QAudioFormat &format)
+{
+    return (isPCM(format) &&
+            format.sampleType() == QAudioFormat::SignedInt &&
+            format.sampleSize() == 16 &&
+            format.byteOrder() == QAudioFormat::LittleEndian);
+}
+
+const qint16  PCMS16MaxValue     =  32767;
+const quint16 PCMS16MaxAmplitude =  32768; // because minimum is -32768
+
+qreal pcmToReal(qint16 pcm)
+{
+    return qreal(pcm) / PCMS16MaxAmplitude;
+}
+
+qint16 realToPcm(qreal real)
+{
+    return real * PCMS16MaxValue;
+}
Index: /trunk/demos/spectrum/app/utils.h
===================================================================
--- /trunk/demos/spectrum/app/utils.h	(revision 769)
+++ /trunk/demos/spectrum/app/utils.h	(revision 769)
@@ -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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include <QtCore/qglobal.h>
+#include <QDebug>
+
+QT_FORWARD_DECLARE_CLASS(QAudioFormat)
+
+//-----------------------------------------------------------------------------
+// Miscellaneous utility functions
+//-----------------------------------------------------------------------------
+
+qint64 audioDuration(const QAudioFormat &format, qint64 bytes);
+qint64 audioLength(const QAudioFormat &format, qint64 microSeconds);
+
+QString formatToString(const QAudioFormat &format);
+
+qreal nyquistFrequency(const QAudioFormat &format);
+
+// Scale PCM value to [-1.0, 1.0]
+qreal pcmToReal(qint16 pcm);
+
+// Scale real value in [-1.0, 1.0] to PCM
+qint16 realToPcm(qreal real);
+
+// Check whether the audio format is PCM
+bool isPCM(const QAudioFormat &format);
+
+// Check whether the audio format is signed, little-endian, 16-bit PCM
+bool isPCMS16LE(const QAudioFormat &format);
+
+// Compile-time calculation of powers of two
+
+template<int N> class PowerOfTwo
+{ public: static const int Result = PowerOfTwo<N-1>::Result * 2; };
+
+template<> class PowerOfTwo<0>
+{ public: static const int Result = 1; };
+
+
+//-----------------------------------------------------------------------------
+// Debug output
+//-----------------------------------------------------------------------------
+
+class NullDebug
+{
+public:
+    template <typename T>
+    NullDebug& operator<<(const T&) { return *this; }
+};
+
+inline NullDebug nullDebug() { return NullDebug(); }
+
+#ifdef LOG_ENGINE
+#   define ENGINE_DEBUG qDebug()
+#else
+#   define ENGINE_DEBUG nullDebug()
+#endif
+
+#ifdef LOG_SPECTRUMANALYSER
+#   define SPECTRUMANALYSER_DEBUG qDebug()
+#else
+#   define SPECTRUMANALYSER_DEBUG nullDebug()
+#endif
+
+#ifdef LOG_WAVEFORM
+#   define WAVEFORM_DEBUG qDebug()
+#else
+#   define WAVEFORM_DEBUG nullDebug()
+#endif
+
+#endif // UTILS_H
Index: /trunk/demos/spectrum/app/waveform.cpp
===================================================================
--- /trunk/demos/spectrum/app/waveform.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/waveform.cpp	(revision 769)
@@ -0,0 +1,418 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "waveform.h"
+#include "utils.h"
+#include <QPainter>
+#include <QResizeEvent>
+#include <QDebug>
+
+
+Waveform::Waveform(const QByteArray &buffer, QWidget *parent)
+    :   QWidget(parent)
+    ,   m_buffer(buffer)
+    ,   m_dataLength(0)
+    ,   m_position(0)
+    ,   m_active(false)
+    ,   m_tileLength(0)
+    ,   m_tileArrayStart(0)
+    ,   m_windowPosition(0)
+    ,   m_windowLength(0)
+{
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    setMinimumHeight(50);
+}
+
+Waveform::~Waveform()
+{
+    deletePixmaps();
+}
+
+void Waveform::paintEvent(QPaintEvent * /*event*/)
+{
+    QPainter painter(this);
+
+    painter.fillRect(rect(), Qt::black);
+
+    if (m_active) {
+        WAVEFORM_DEBUG << "Waveform::paintEvent"
+                       << "windowPosition" << m_windowPosition
+                       << "windowLength" << m_windowLength;
+        qint64 pos = m_windowPosition;
+        const qint64 windowEnd = m_windowPosition + m_windowLength;
+        int destLeft = 0;
+        int destRight = 0;
+        while (pos < windowEnd) {
+            const TilePoint point = tilePoint(pos);
+            WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos
+                           << "tileIndex" << point.index
+                           << "positionOffset" << point.positionOffset
+                           << "pixelOffset" << point.pixelOffset;
+
+            if (point.index != NullIndex) {
+                const Tile &tile = m_tiles[point.index];
+                if (tile.painted) {
+                    const qint64 sectionLength = qMin((m_tileLength - point.positionOffset),
+                                                     (windowEnd - pos));
+                    Q_ASSERT(sectionLength > 0);
+
+                    const int sourceRight = tilePixelOffset(point.positionOffset + sectionLength);
+                    destRight = windowPixelOffset(pos - m_windowPosition + sectionLength);
+
+                    QRect destRect = rect();
+                    destRect.setLeft(destLeft);
+                    destRect.setRight(destRight);
+
+                    QRect sourceRect(QPoint(), m_pixmapSize);
+                    sourceRect.setLeft(point.pixelOffset);
+                    sourceRect.setRight(sourceRight);
+
+                    WAVEFORM_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index
+                                   << "source" << point.pixelOffset << sourceRight
+                                   << "dest" << destLeft << destRight;
+
+                    painter.drawPixmap(destRect, *tile.pixmap, sourceRect);
+
+                    destLeft = destRight;
+
+                    if (point.index < m_tiles.count()) {
+                        pos = tilePosition(point.index + 1);
+                        WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos ->" << pos;
+                    } else {
+                        // Reached end of tile array
+                        WAVEFORM_DEBUG << "Waveform::paintEvent" << "reached end of tile array";
+                        break;
+                    }
+                } else {
+                    // Passed last tile which is painted
+                    WAVEFORM_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted";
+                    break;
+                }
+            } else {
+                // pos is past end of tile array
+                WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array";
+                break;
+            }
+        }
+
+        WAVEFORM_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight;
+    }
+}
+
+void Waveform::resizeEvent(QResizeEvent *event)
+{
+    if (event->size() != event->oldSize())
+        createPixmaps(event->size());
+}
+
+void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, qint64 windowDurationUs)
+{
+    WAVEFORM_DEBUG << "Waveform::initialize"
+                   << "audioBufferSize" << audioBufferSize
+                   << "m_buffer.size()" << m_buffer.size()
+                   << "windowDurationUs" << windowDurationUs;
+
+    reset();
+
+    m_format = format;
+
+    // Calculate tile size
+    m_tileLength = audioBufferSize;
+
+    // Calculate window size
+    m_windowLength = audioLength(m_format, windowDurationUs);
+
+    // Calculate number of tiles required
+    int nTiles;
+    if (m_tileLength > m_windowLength) {
+        nTiles = 2;
+    } else {
+        nTiles = m_windowLength / m_tileLength + 1;
+        if (m_windowLength % m_tileLength)
+            ++nTiles;
+    }
+
+    WAVEFORM_DEBUG << "Waveform::initialize"
+                   << "tileLength" << m_tileLength
+                   << "windowLength" << m_windowLength
+                   << "nTiles" << nTiles;
+
+    m_pixmaps.fill(0, nTiles);
+    m_tiles.resize(nTiles);
+
+    createPixmaps(rect().size());
+
+    m_active = true;
+}
+
+void Waveform::reset()
+{
+    WAVEFORM_DEBUG << "Waveform::reset";
+
+    m_dataLength = 0;
+    m_position = 0;
+    m_format = QAudioFormat();
+    m_active = false;
+    deletePixmaps();
+    m_tiles.clear();
+    m_tileLength = 0;
+    m_tileArrayStart = 0;
+    m_windowPosition = 0;
+    m_windowLength = 0;
+}
+
+void Waveform::dataLengthChanged(qint64 length)
+{
+    WAVEFORM_DEBUG << "Waveform::dataLengthChanged" << length;
+    const qint64 oldLength = m_dataLength;
+    m_dataLength = length;
+
+    if (m_active) {
+        if (m_dataLength < oldLength)
+            positionChanged(m_dataLength);
+        else
+            paintTiles();
+    }
+}
+
+void Waveform::positionChanged(qint64 position)
+{
+    WAVEFORM_DEBUG << "Waveform::positionChanged" << position;
+
+    if (position + m_windowLength > m_dataLength)
+        position = m_dataLength - m_windowLength;
+
+    m_position = position;
+
+    setWindowPosition(position);
+}
+
+void Waveform::deletePixmaps()
+{
+    QPixmap *pixmap;
+    foreach (pixmap, m_pixmaps)
+        delete pixmap;
+    m_pixmaps.clear();
+}
+
+void Waveform::createPixmaps(const QSize &widgetSize)
+{
+    m_pixmapSize = widgetSize;
+    m_pixmapSize.setWidth(qreal(widgetSize.width()) * m_tileLength / m_windowLength);
+
+    WAVEFORM_DEBUG << "Waveform::createPixmaps"
+                   << "widgetSize" << widgetSize
+                   << "pixmapSize" << m_pixmapSize;
+
+    Q_ASSERT(m_tiles.count() == m_pixmaps.count());
+
+    // (Re)create pixmaps
+    for (int i=0; i<m_pixmaps.size(); ++i) {
+        delete m_pixmaps[i];
+        m_pixmaps[i] = 0;
+        m_pixmaps[i] = new QPixmap(m_pixmapSize);
+    }
+
+    // Update tile pixmap pointers, and mark for repainting
+    for (int i=0; i<m_tiles.count(); ++i) {
+        m_tiles[i].pixmap = m_pixmaps[i];
+        m_tiles[i].painted = false;
+    }
+
+    paintTiles();
+}
+
+void Waveform::setWindowPosition(qint64 position)
+{
+    WAVEFORM_DEBUG << "Waveform::setWindowPosition"
+                   << "old" << m_windowPosition << "new" << position
+                   << "tileArrayStart" << m_tileArrayStart;
+
+    const qint64 oldPosition = m_windowPosition;
+    m_windowPosition = position;
+
+    if((m_windowPosition >= oldPosition) &&
+        (m_windowPosition - m_tileArrayStart < (m_tiles.count() * m_tileLength))) {
+        // Work out how many tiles need to be shuffled
+        const qint64 offset = m_windowPosition - m_tileArrayStart;
+        const int nTiles = offset / m_tileLength;
+        shuffleTiles(nTiles);
+    } else {
+        resetTiles(m_windowPosition);
+    }
+
+    if(!paintTiles() && m_windowPosition != oldPosition)
+        update();
+}
+
+qint64 Waveform::tilePosition(int index) const
+{
+    return m_tileArrayStart + index * m_tileLength;
+}
+
+Waveform::TilePoint Waveform::tilePoint(qint64 position) const
+{
+    TilePoint result;
+    if (position >= m_tileArrayStart) {
+        const qint64 tileArrayEnd = m_tileArrayStart + m_tiles.count() * m_tileLength;
+        if (position < tileArrayEnd) {
+            const qint64 offsetIntoTileArray = position - m_tileArrayStart;
+            result.index = offsetIntoTileArray / m_tileLength;
+            Q_ASSERT(result.index >= 0 && result.index <= m_tiles.count());
+            result.positionOffset = offsetIntoTileArray % m_tileLength;
+            result.pixelOffset = tilePixelOffset(result.positionOffset);
+            Q_ASSERT(result.pixelOffset >= 0 && result.pixelOffset <= m_pixmapSize.width());
+        }
+    }
+
+    return result;
+}
+
+int Waveform::tilePixelOffset(qint64 positionOffset) const
+{
+    Q_ASSERT(positionOffset >= 0 && positionOffset <= m_tileLength);
+    const int result = (qreal(positionOffset) / m_tileLength) * m_pixmapSize.width();
+    return result;
+}
+
+int Waveform::windowPixelOffset(qint64 positionOffset) const
+{
+    Q_ASSERT(positionOffset >= 0 && positionOffset <= m_windowLength);
+    const int result = (qreal(positionOffset) / m_windowLength) * rect().width();
+    return result;
+}
+
+bool Waveform::paintTiles()
+{
+    WAVEFORM_DEBUG << "Waveform::paintTiles";
+    bool updateRequired = false;
+
+    for (int i=0; i<m_tiles.count(); ++i) {
+        const Tile &tile = m_tiles[i];
+        if (!tile.painted) {
+            const qint64 tileEnd = m_tileArrayStart + (i + 1) * m_tileLength;
+            if (m_dataLength >= tileEnd) {
+                paintTile(i);
+                updateRequired = true;
+            }
+        }
+    }
+
+    if (updateRequired)
+        update();
+
+    return updateRequired;
+}
+
+void Waveform::paintTile(int index)
+{
+    WAVEFORM_DEBUG << "Waveform::paintTile" << "index" << index;
+
+    const qint64 tileStart = m_tileArrayStart + index * m_tileLength;
+    Q_ASSERT(m_dataLength >= tileStart + m_tileLength);
+
+    Tile &tile = m_tiles[index];
+    Q_ASSERT(!tile.painted);
+
+    const qint16* base = reinterpret_cast<const qint16*>(m_buffer.constData());
+    const qint16* buffer = base + (tileStart / 2);
+    const int numSamples = m_tileLength / (2 * m_format.channels());
+
+    QPainter painter(tile.pixmap);
+
+    painter.fillRect(tile.pixmap->rect(), Qt::black);
+
+    QPen pen(Qt::white);
+    painter.setPen(pen);
+
+    // Calculate initial PCM value
+    qint16 previousPcmValue = 0;
+    if (buffer > base)
+        previousPcmValue = *(buffer - m_format.channels());
+
+    // Calculate initial point
+    const qreal previousRealValue = pcmToReal(previousPcmValue);
+    const int originY = ((previousRealValue + 1.0) / 2) * m_pixmapSize.height();
+    const QPoint origin(0, originY);
+
+    QLine line(origin, origin);
+
+    for (int i=0; i<numSamples; ++i) {
+        const qint16* ptr = buffer + i * m_format.channels();
+        const qint16 pcmValue = *ptr;
+        const qreal realValue = pcmToReal(pcmValue);
+
+        const int x = tilePixelOffset(i * 2 * m_format.channels());
+        const int y = ((realValue + 1.0) / 2) * m_pixmapSize.height();
+
+        line.setP2(QPoint(x, y));
+        painter.drawLine(line);
+        line.setP1(line.p2());
+    }
+
+    tile.painted = true;
+}
+
+void Waveform::shuffleTiles(int n)
+{
+    WAVEFORM_DEBUG << "Waveform::shuffleTiles" << "n" << n;
+
+    while (n--) {
+        Tile tile = m_tiles.first();
+        tile.painted = false;
+        m_tiles.erase(m_tiles.begin());
+        m_tiles += tile;
+        m_tileArrayStart += m_tileLength;
+    }
+
+    WAVEFORM_DEBUG << "Waveform::shuffleTiles" << "tileArrayStart" << m_tileArrayStart;
+}
+
+void Waveform::resetTiles(qint64 newStartPos)
+{
+    WAVEFORM_DEBUG << "Waveform::resetTiles" << "newStartPos" << newStartPos;
+
+    QVector<Tile>::iterator i = m_tiles.begin();
+    for ( ; i != m_tiles.end(); ++i)
+        i->painted = false;
+
+    m_tileArrayStart = newStartPos;
+}
+
Index: /trunk/demos/spectrum/app/waveform.h
===================================================================
--- /trunk/demos/spectrum/app/waveform.h	(revision 769)
+++ /trunk/demos/spectrum/app/waveform.h	(revision 769)
@@ -0,0 +1,201 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WAVEFORM_H
+#define WAVEFORM_H
+
+#include <QWidget>
+#include <QtMultimedia/QAudioFormat>
+#include <QPixmap>
+#include <QScopedPointer>
+
+QT_FORWARD_DECLARE_CLASS(QByteArray)
+
+/**
+ * Widget which displays a section of the audio waveform.
+ *
+ * The waveform is rendered on a set of QPixmaps which form a group of tiles
+ * whose extent covers the widget.  As the audio position is updated, these
+ * tiles are scrolled from left to right; when the left-most tile scrolls
+ * outside the widget, it is moved to the right end of the tile array and
+ * painted with the next section of the waveform.
+ */
+class Waveform : public QWidget {
+    Q_OBJECT
+public:
+    Waveform(const QByteArray &buffer, QWidget *parent = 0);
+    ~Waveform();
+
+    // QWidget
+    void paintEvent(QPaintEvent *event);
+    void resizeEvent(QResizeEvent *event);
+
+    void initialize(const QAudioFormat &format, qint64 audioBufferSize, qint64 windowDurationUs);
+    void reset();
+
+    void setAutoUpdatePosition(bool enabled);
+
+public slots:
+    void dataLengthChanged(qint64 length);
+    void positionChanged(qint64 position);
+
+private:
+    static const int NullIndex = -1;
+
+    void deletePixmaps();
+
+    /*
+     * (Re)create all pixmaps, repaint and update the display.
+     * Triggers an update();
+     */
+    void createPixmaps(const QSize &newSize);
+
+    /*
+     * Update window position.
+     * Triggers an update().
+     */
+    void setWindowPosition(qint64 position);
+
+    /*
+     * Base position of tile
+     */
+    qint64 tilePosition(int index) const;
+
+    /*
+     * Structure which identifies a point within a given
+     * tile.
+     */
+    struct TilePoint
+    {
+        TilePoint(int idx = 0, qint64 pos = 0, qint64 pix = 0)
+        :   index(idx), positionOffset(pos), pixelOffset(pix)
+        { }
+
+        // Index of tile
+        int     index;
+
+        // Number of bytes from start of tile
+        qint64  positionOffset;
+
+        // Number of pixels from left of corresponding pixmap
+        int     pixelOffset;
+    };
+
+    /*
+     * Convert position in m_buffer into a tile index and an offset in pixels
+     * into the corresponding pixmap.
+     *
+     * \param position  Offset into m_buffer, in bytes
+
+     * If position is outside the tile array, index is NullIndex and
+     * offset is zero.
+     */
+    TilePoint tilePoint(qint64 position) const;
+
+    /*
+     * Convert offset in bytes into a tile into an offset in pixels
+     * within that tile.
+     */
+    int tilePixelOffset(qint64 positionOffset) const;
+
+    /*
+     * Convert offset in bytes into the window into an offset in pixels
+     * within the widget rect().
+     */
+    int windowPixelOffset(qint64 positionOffset) const;
+
+    /*
+     * Paint all tiles which can be painted.
+     * \return true iff update() was called
+     */
+    bool paintTiles();
+
+    /*
+     * Paint the specified tile
+     *
+     * \pre Sufficient data is available to completely paint the tile, i.e.
+     *      m_dataLength is greater than the upper bound of the tile.
+     */
+    void paintTile(int index);
+
+    /*
+     * Move the first n tiles to the end of the array, and mark them as not
+     * painted.
+     */
+    void shuffleTiles(int n);
+
+    /*
+     * Reset tile array
+     */
+    void resetTiles(qint64 newStartPos);
+
+private:
+    const QByteArray&       m_buffer;
+    qint64                  m_dataLength;
+    qint64                  m_position;
+    QAudioFormat            m_format;
+
+    bool                    m_active;
+
+    QSize                   m_pixmapSize;
+    QVector<QPixmap*>       m_pixmaps;
+
+    struct Tile {
+        // Pointer into parent m_pixmaps array
+        QPixmap*            pixmap;
+
+        // Flag indicating whether this tile has been painted
+        bool                painted;
+    };
+
+    QVector<Tile>           m_tiles;
+
+    // Length of audio data in bytes depicted by each tile
+    qint64                  m_tileLength;
+
+    // Position in bytes of the first tile, relative to m_buffer
+    qint64                  m_tileArrayStart;
+
+    qint64                  m_windowPosition;
+    qint64                  m_windowLength;
+
+};
+
+#endif // WAVEFORM_H
Index: /trunk/demos/spectrum/app/wavfile.cpp
===================================================================
--- /trunk/demos/spectrum/app/wavfile.cpp	(revision 769)
+++ /trunk/demos/spectrum/app/wavfile.cpp	(revision 769)
@@ -0,0 +1,246 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qendian.h>
+#include <QVector>
+#include <QDebug>
+#include "utils.h"
+#include "wavfile.h"
+
+struct chunk
+{
+    char        id[4];
+    quint32     size;
+};
+
+struct RIFFHeader
+{
+    chunk       descriptor;     // "RIFF"
+    char        type[4];        // "WAVE"
+};
+
+struct WAVEHeader
+{
+    chunk       descriptor;
+    quint16     audioFormat;
+    quint16     numChannels;
+    quint32     sampleRate;
+    quint32     byteRate;
+    quint16     blockAlign;
+    quint16     bitsPerSample;
+};
+
+struct DATAHeader
+{
+    chunk       descriptor;
+};
+
+struct CombinedHeader
+{
+    RIFFHeader  riff;
+    WAVEHeader  wave;
+    DATAHeader  data;
+};
+
+static const int HeaderLength = sizeof(CombinedHeader);
+
+
+WavFile::WavFile(const QAudioFormat &format, qint64 dataLength)
+    :   m_format(format)
+    ,   m_dataLength(dataLength)
+{
+
+}
+
+bool WavFile::readHeader(QIODevice &device)
+{
+    bool result = true;
+
+    if (!device.isSequential())
+        result = device.seek(0);
+    // else, assume that current position is the start of the header
+
+    if (result) {
+        CombinedHeader header;
+        result = (device.read(reinterpret_cast<char *>(&header), HeaderLength) == HeaderLength);
+        if (result) {
+            if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0
+                || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0)
+                && memcmp(&header.riff.type, "WAVE", 4) == 0
+                && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0
+                && header.wave.audioFormat == 1 // PCM
+            ) {
+                if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0)
+                    m_format.setByteOrder(QAudioFormat::LittleEndian);
+                else
+                    m_format.setByteOrder(QAudioFormat::BigEndian);
+
+                m_format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
+                m_format.setCodec("audio/pcm");
+                m_format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
+                m_format.setSampleSize(qFromLittleEndian<quint16>(header.wave.bitsPerSample));
+
+                switch(header.wave.bitsPerSample) {
+                case 8:
+                    m_format.setSampleType(QAudioFormat::UnSignedInt);
+                    break;
+                case 16:
+                    m_format.setSampleType(QAudioFormat::SignedInt);
+                    break;
+                default:
+                    result = false;
+                }
+
+                m_dataLength = device.size() - HeaderLength;
+            } else {
+                result = false;
+            }
+        }
+    }
+
+    return result;
+}
+
+bool WavFile::writeHeader(QIODevice &device)
+{
+    CombinedHeader header;
+
+    memset(&header, 0, HeaderLength);
+
+    // RIFF header
+    if (m_format.byteOrder() == QAudioFormat::LittleEndian)
+        strncpy(&header.riff.descriptor.id[0], "RIFF", 4);
+    else
+        strncpy(&header.riff.descriptor.id[0], "RIFX", 4);
+    qToLittleEndian<quint32>(quint32(m_dataLength + HeaderLength - 8),
+                             reinterpret_cast<unsigned char*>(&header.riff.descriptor.size));
+    strncpy(&header.riff.type[0], "WAVE", 4);
+
+    // WAVE header
+    strncpy(&header.wave.descriptor.id[0], "fmt ", 4);
+    qToLittleEndian<quint32>(quint32(16),
+                             reinterpret_cast<unsigned char*>(&header.wave.descriptor.size));
+    qToLittleEndian<quint16>(quint16(1),
+                             reinterpret_cast<unsigned char*>(&header.wave.audioFormat));
+    qToLittleEndian<quint16>(quint16(m_format.channels()),
+                             reinterpret_cast<unsigned char*>(&header.wave.numChannels));
+    qToLittleEndian<quint32>(quint32(m_format.frequency()),
+                             reinterpret_cast<unsigned char*>(&header.wave.sampleRate));
+    qToLittleEndian<quint32>(quint32(m_format.frequency() * m_format.channels() * m_format.sampleSize() / 8),
+                             reinterpret_cast<unsigned char*>(&header.wave.byteRate));
+    qToLittleEndian<quint16>(quint16(m_format.channels() * m_format.sampleSize() / 8),
+                             reinterpret_cast<unsigned char*>(&header.wave.blockAlign));
+    qToLittleEndian<quint16>(quint16(m_format.sampleSize()),
+                             reinterpret_cast<unsigned char*>(&header.wave.bitsPerSample));
+
+    // DATA header
+    strncpy(&header.data.descriptor.id[0], "data", 4);
+    qToLittleEndian<quint32>(quint32(m_dataLength),
+                             reinterpret_cast<unsigned char*>(&header.data.descriptor.size));
+
+    return (device.write(reinterpret_cast<const char *>(&header), HeaderLength) == HeaderLength);
+}
+
+const QAudioFormat& WavFile::format() const
+{
+    return m_format;
+}
+
+qint64 WavFile::dataLength() const
+{
+    return m_dataLength;
+}
+
+qint64 WavFile::headerLength()
+{
+    return HeaderLength;
+}
+
+bool WavFile::writeDataLength(QIODevice &device, qint64 dataLength)
+{
+    bool result = false;
+    if (!device.isSequential()) {
+        device.seek(40);
+        unsigned char dataLengthLE[4];
+        qToLittleEndian<quint32>(quint32(dataLength), dataLengthLE);
+        result = (device.write(reinterpret_cast<const char *>(dataLengthLE), 4) == 4);
+    }
+    return result;
+}
+
+#include <QFile>
+#include <QTextStream>
+
+qint64 WavFile::readData(QIODevice &device, QByteArray &buffer,
+                         QAudioFormat outputFormat)
+{
+    if (QAudioFormat() == outputFormat)
+        outputFormat = m_format;
+
+    qint64 result = 0;
+
+    QFile file("wav.txt");
+    file.open(QIODevice::WriteOnly | QIODevice::Text);
+    QTextStream stream;
+    stream.setDevice(&file);
+
+    if (isPCMS16LE(outputFormat) && isPCMS16LE(m_format)) {
+        QVector<char> inputSample(2 * m_format.channels());
+
+        qint16 *output = reinterpret_cast<qint16*>(buffer.data());
+
+        while (result < buffer.size()) {
+            if (device.read(inputSample.data(), inputSample.count())) {
+                int inputIdx = 0;
+                for (int outputIdx = 0; outputIdx < outputFormat.channels(); ++outputIdx) {
+                    const qint16* input = reinterpret_cast<const qint16*>(inputSample.data() + 2 * inputIdx);
+                    *output++ = qFromLittleEndian<qint16>(*input);
+                    result += 2;
+                    if (inputIdx < m_format.channels())
+                        ++inputIdx;
+                }
+            } else {
+                break;
+            }
+        }
+    }
+    return result;
+}
+
Index: /trunk/demos/spectrum/app/wavfile.h
===================================================================
--- /trunk/demos/spectrum/app/wavfile.h	(revision 769)
+++ /trunk/demos/spectrum/app/wavfile.h	(revision 769)
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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 examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef WAVFILE_H
+#define WAVFILE_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qfile.h>
+#include <QtMultimedia/qaudioformat.h>
+
+/**
+ * Helper class for reading WAV files
+ *
+ * See https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
+ */
+class WavFile
+{
+public:
+    WavFile(const QAudioFormat &format = QAudioFormat(),
+              qint64 dataLength = 0);
+
+    // Reads WAV header and seeks to start of data
+    bool readHeader(QIODevice &device);
+
+    // Writes WAV header
+    bool writeHeader(QIODevice &device);
+
+    // Read PCM data
+    qint64 readData(QIODevice &device, QByteArray &buffer,
+                    QAudioFormat outputFormat = QAudioFormat());
+
+    const QAudioFormat& format() const;
+    qint64 dataLength() const;
+
+    static qint64 headerLength();
+
+    static bool writeDataLength(QIODevice &device, qint64 dataLength);
+
+private:
+    QAudioFormat m_format;
+    qint64 m_dataLength;
+};
+
+#endif
+
Index: /trunk/demos/spectrum/spectrum.pri
===================================================================
--- /trunk/demos/spectrum/spectrum.pri	(revision 769)
+++ /trunk/demos/spectrum/spectrum.pri	(revision 769)
@@ -0,0 +1,37 @@
+# The following macros allow certain features and debugging output
+# to be disabled / enabled at compile time.
+
+# Debug output from spectrum calculation
+DEFINES += LOG_SPECTRUMANALYSER
+
+# Debug output from waveform generation
+#DEFINES += LOG_WAVEFORM
+
+# Debug output from engine
+DEFINES += LOG_ENGINE
+
+# Dump input data to spectrum analyer, plus artefact data files
+#DEFINES += DUMP_SPECTRUMANALYSER
+
+# Dump captured audio data
+#DEFINES += DUMP_CAPTURED_AUDIO
+
+# Disable calculation of level
+#DEFINES += DISABLE_LEVEL
+
+# Disable calculation of frequency spectrum
+# If this macro is defined, the FFTReal DLL will not be built
+#DEFINES += DISABLE_FFT
+
+# Disables rendering of the waveform
+#DEFINES += DISABLE_WAVEFORM
+
+# If defined, superimpose the progress bar on the waveform
+DEFINES += SUPERIMPOSE_PROGRESS_ON_WAVEFORM
+
+# Perform spectrum analysis calculation in a separate thread
+DEFINES += SPECTRUM_ANALYSER_SEPARATE_THREAD
+
+# Suppress warnings about strncpy potentially being unsafe, emitted by MSVC
+win32: DEFINES += _CRT_SECURE_NO_WARNINGS
+
Index: /trunk/demos/spectrum/spectrum.pro
===================================================================
--- /trunk/demos/spectrum/spectrum.pro	(revision 769)
+++ /trunk/demos/spectrum/spectrum.pro	(revision 769)
@@ -0,0 +1,30 @@
+include(spectrum.pri)
+
+TEMPLATE = subdirs
+
+# Ensure that library is built before application
+CONFIG  += ordered
+
+!contains(DEFINES, DISABLE_FFT) {
+    SUBDIRS += 3rdparty/fftreal
+}
+
+SUBDIRS += app
+
+TARGET = spectrum
+
+symbian {
+    load(data_caging_paths)
+
+    # Create a 'make sis' rule which can be run from the top-level
+
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
+    # UID for the SIS file
+    TARGET.UID3 = 0xA000E3FA
+}
+
+sources.files = README.txt spectrum.pri spectrum.pro TODO.txt
+sources.path = $$[QT_INSTALL_DEMOS]/spectrum
+INSTALLS += sources
+
Index: /trunk/demos/sqlbrowser/browser.cpp
===================================================================
--- /trunk/demos/sqlbrowser/browser.cpp	(revision 768)
+++ /trunk/demos/sqlbrowser/browser.cpp	(revision 769)
@@ -147,5 +147,5 @@
     QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
     model->setEditStrategy(QSqlTableModel::OnRowChange);
-    model->setTable(t);
+    model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
     model->select();
     if (model->lastError().type() != QSqlError::NoError)
Index: /trunk/demos/symbianpkgrules.pri
===================================================================
--- /trunk/demos/symbianpkgrules.pri	(revision 768)
+++ /trunk/demos/symbianpkgrules.pri	(revision 769)
@@ -11,5 +11,6 @@
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+demos_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += demos_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
Index: /trunk/doc/doc.pri
===================================================================
--- /trunk/doc/doc.pri	(revision 768)
+++ /trunk/doc/doc.pri	(revision 769)
@@ -48,9 +48,9 @@
 htmldocs.files = $$QT_BUILD_TREE/doc/html
 htmldocs.path = $$[QT_INSTALL_DOCS]
-htmldocs.CONFIG += no_check_exist
+htmldocs.CONFIG += no_check_exist directory
 
 qchdocs.files= $$QT_BUILD_TREE/doc/qch
 qchdocs.path = $$[QT_INSTALL_DOCS]
-qchdocs.CONFIG += no_check_exist
+qchdocs.CONFIG += no_check_exist directory
 
 docimages.files = $$QT_BUILD_TREE/doc/src/images
Index: /trunk/doc/src/classes/phonon-api.qdoc
===================================================================
--- /trunk/doc/src/classes/phonon-api.qdoc	(revision 768)
+++ /trunk/doc/src/classes/phonon-api.qdoc	(revision 769)
@@ -1652,4 +1652,14 @@
     different one. A user readable error message is given by
     errorString().
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which access media via the network must
+    have the \c NetworkServices platform security capability. If the client
+    process lacks this capability, operations will result in errors.
+    This failure is indicated by a state() of Phonon::ErrorState.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
 
     \sa Phonon::MediaSource, Phonon::AudioOutput, VideoWidget,
Index: /trunk/doc/src/deployment/deployment.qdoc
===================================================================
--- /trunk/doc/src/deployment/deployment.qdoc	(revision 768)
+++ /trunk/doc/src/deployment/deployment.qdoc	(revision 769)
@@ -933,5 +933,5 @@
 
     "C:/customPath/plugins " 
-    "C:/Qt/4.6.2/plugins" 
+    "C:/Qt/4.6.3/plugins" 
     "E:/myApplication/directory/"
 
Index: /trunk/doc/src/development/qmake-manual.qdoc
===================================================================
--- /trunk/doc/src/development/qmake-manual.qdoc	(revision 768)
+++ /trunk/doc/src/development/qmake-manual.qdoc	(revision 769)
@@ -859,5 +859,5 @@
     XCode build system.
 
-    Furthermore, The selected "Active Build Configuration" is stored
+    Furthermore, the selected "Active Build Configuration" is stored
     in a .pbxuser file, which is generated by xcode on first load, not
     created by qmake.
@@ -980,5 +980,5 @@
     If \c UID3 is not specified, qmake will automatically generate a \c UID3
     suitable for development and debugging. This value should be manually
-    specified for applications that are to be released. In order to optain
+    specified for applications that are to be released. In order to obtain
     an official UID, please contact Nokia. Both \c SID and \c VID default to empty values.
 
@@ -1422,10 +1422,18 @@
     override languages statement, you must override also package-header
     statement and all other statements which are language specific.
+
+    On the Symbian platform, the \c default_deployment item specifies
+    default platform and package dependencies. Those dependencies can be
+    selectively disabled if alternative dependencies need to be defined
+    - e.g. if a specific device is required to run the application or
+    more languages need to be supported by the package file. The supported
+    \c default_deployment rules that can be disabled are:
     
-    On the Symbian platform, the \c default_deployment item specifies 
-    default platform dependencies. It can be overwritten if a more 
-    restrictive set is needed - e.g. if a specific
-    device is required to run the application.
-    
+    \list
+    \o pkg_depends_qt
+    \o pkg_depends_webkit
+    \o pkg_platform_dependencies
+    \endlist
+
     For example:
     
@@ -1728,6 +1736,13 @@
     \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 139
 
+    There is also a convenience function for adding conditional rules
+    called \c{addMMPRules}. Suppose you need certain functionality
+    to require different library depending on architecture. This
+    can be specified with \c{addMMPRules} as follows:
+
+    \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 148
+
     \note You should not use this variable to add MMP statements that are
-    explicitly supported by their own variables, such as 
+    explicitly supported by their own variables, such as
     \c TARGET.EPOCSTACKSIZE. 
     Doing so could result in duplicate statements in the MMP file.
@@ -2878,7 +2893,7 @@
     \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 144
     
-    This will add the specified statement to the end of the generated 
-    registration resource file. As an impact of this statement, the application
-    will not be visible in application shell.
+    This will add the specified statement to the end of the \c APP_REGISTRATION_INFO
+    resource struct in the generated registration resource file.
+    As an impact of this statement, the application will not be visible in application shell.
     
     It is also possible to add multiple rows in a single block. Each double
@@ -2893,14 +2908,34 @@
     be launched in background.
 
-    For detailed list of possible RSS statements, please refer to the
-    Symbian platform help.    
+    For detailed list of possible \c APP_REGISTRATION_INFO statements, please refer to the
+    Symbian platform help.
 
     \note You should not use \c RSS_RULES variable to set the following RSS statements:
-    
-    app_file
-    localisable_resource_file
-    localisable_resource_id
-
-    These statements are internally handled by qmake.     
+    \c app_file, \c localisable_resource_file, and \c localisable_resource_id.
+
+    These statements are internally handled by qmake.
+
+    There is a number of special modifiers you can attach to \c RSS_RULES to specify where
+    in the application registration file the rule will be written:
+
+    \table
+    \header \o Modifier \o Location of the rule
+    \row \o <no modifier>        \o Inside \c APP_REGISTRATION_INFO resource struct.
+    \row \o .header              \o Before \c APP_REGISTRATION_INFO resource struct.
+    \row \o .footer              \o After \c APP_REGISTRATION_INFO resource struct.
+    \row \o .service_list        \o Inside a \c SERVICE_INFO item in the \c service_list
+                                 of \c APP_REGISTRATION_INFO
+    \row \o .file_ownership_list \o Inside a \c FILE_OWNERSHIP_INFO item in the
+                                 \c file_ownership_list of \c APP_REGISTRATION_INFO
+    \row \o .datatype_list       \o Inside a \c DATATYPE item in the \c datatype_list of
+                                 \c APP_REGISTRATION_INFO
+    \endtable
+
+    For example:
+
+    \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 151
+
+    This example will define service information for a fictional service that requires
+    an icon to be supplied via the \c opaque_data of the service information.
 
     \target S60_VERSION
@@ -2961,4 +2996,32 @@
 
     \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 51
+
+    It is possible to modify this default behavior of \c SUBDIRS by giving
+    additional modifiers to \c SUBDIRS elements. Supported modifiers are:
+
+    \table
+    \header \o Modifier \o Effect
+    \row \o .subdir     \o Use the specified subdirectory instead of \c SUBDIRS value.
+    \row \o .file       \o Specify the subproject \c pro file explicitly. Cannot be
+                        used in conjunction with \c .subdir modifier.
+    \row \o .condition  \o Specifies a \c bld.inf define that must be true for
+                        subproject to be built. Available only on Symbian platform.
+    \row \o .depends    \o This subproject depends on specified subproject.
+                        Available only on platforms that use makefiles.
+    \row \o .makefile   \o The makefile of subproject.
+                        Available only on platforms that use makefiles.
+    \row \o .target     \o Base string used for makefile targets related to this
+                        subproject.
+                        Available only on platforms that use makefiles.
+    \endtable
+
+    For example, define two subdirectories, both of which reside in a different directory
+    than the \c SUBDIRS value, and one of the subdirectories must be built before the other:
+
+    \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 149
+
+    For example, define a subdirectory that is only build for emulator builds in Qt for Symbian:
+
+    \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 150
 
     \target TARGET
@@ -3505,5 +3568,5 @@
     \section1 Properties
 
-    \c qmake has a system of persistant information, this allows you to
+    \c qmake has a system of persistent information, this allows you to
     \c set a variable in qmake once, and each time qmake is invoked this
     value can be queried. Use the following to set a property in qmake:
@@ -3683,5 +3746,5 @@
     dependent .prl files, continuing until all libraries have been resolved.
     At this point, the Makefile is created as usual, and the libraries are
-    linked explicitlyy against the application.
+    linked explicitly against the application.
 
     The internals of the .prl file are left closed so they can easily
Index: /trunk/doc/src/development/qtestlib.qdoc
===================================================================
--- /trunk/doc/src/development/qtestlib.qdoc	(revision 768)
+++ /trunk/doc/src/development/qtestlib.qdoc	(revision 769)
@@ -238,5 +238,5 @@
     The code insde the QBENCHMARK macro will be measured, and possibly also repeated
     several times in order to get an accurate measurement. This depends on the selected
-    measurement back-end. Several back-ends are available an can be selected on the
+    measurement back-end. Several back-ends are available. They can be selected on the
     command line:
     
@@ -245,5 +245,5 @@
     \table
     \header \o Name
-         \o Commmand-line Arguemnt
+         \o Commmand-line Argument
          \o Availability
     \row \o Walltime
Index: /trunk/doc/src/examples/googlesuggest.qdoc
===================================================================
--- /trunk/doc/src/examples/googlesuggest.qdoc	(revision 768)
+++ /trunk/doc/src/examples/googlesuggest.qdoc	(revision 769)
@@ -112,5 +112,5 @@
 
     Key event handling is implemented so that Enter and Return execute the
-    selected link, while the Escape key hides the popup. Sine we want to be
+    selected link, while the Escape key hides the popup. Since we want to be
     able to navigate the list of suggestions using the different navigation
     keys on the keyboard we let Qt continue regular event processing for those
Index: /trunk/doc/src/examples/scribble.qdoc
===================================================================
--- /trunk/doc/src/examples/scribble.qdoc	(revision 768)
+++ /trunk/doc/src/examples/scribble.qdoc	(revision 769)
@@ -75,7 +75,6 @@
     \endlist
 
-    We will start by reviewing the \c ScribbleArea class, which
-    contains the interesting, then we will take a look at the \c
-    MainWindow class that uses it.
+    We will start by reviewing the \c ScribbleArea class. Then we will
+    review the \c MainWindow class, which uses \c ScribbleArea.
 
     \section1 ScribbleArea Class Definition
Index: /trunk/doc/src/examples/svgalib.qdoc
===================================================================
--- /trunk/doc/src/examples/svgalib.qdoc	(revision 768)
+++ /trunk/doc/src/examples/svgalib.qdoc	(revision 769)
@@ -43,4 +43,7 @@
     \example qws/svgalib
     \title Accelerated Graphics Driver Example
+
+    \warning This example was designed to work with Qt 4.4 and will not work
+    with current versions of Qt. It will be removed from Qt 4.7.
 
     The Accelerated Graphics Driver example shows how you can write
Index: /trunk/doc/src/frameworks-technologies/activeqt.qdoc
===================================================================
--- /trunk/doc/src/frameworks-technologies/activeqt.qdoc	(revision 768)
+++ /trunk/doc/src/frameworks-technologies/activeqt.qdoc	(revision 769)
@@ -58,4 +58,5 @@
 
     \ingroup platform-specific
+    \ingroup frameworks-technologies
     \keyword ActiveQt
 
@@ -70,16 +71,23 @@
     \endlist
 
+    For more information about using ActiveX with Qt, see
+    \l{Building ActiveX servers and controls with Qt}.
+
     The ActiveQt framework consists of two modules:
 
     \list
-    \o The \l QAxContainer module is a static
-       library implementing QObject and QWidget subclasses, QAxObject and
-       QAxWidget, that act as containers for COM objects and ActiveX
-       controls.
-    \o The \l QAxServer module is a static library that implements
+    \o The \l{Using ActiveX controls and COM objects in Qt}{QAxContainer}
+       module is a static library implementing QObject and QWidget subclasses,
+       QAxObject and QAxWidget, that act as containers for COM objects and
+       ActiveX controls.
+    \o The \l{Building ActiveX servers and controls with Qt}{QAxServer}
+       module is a static library that implements
        functionality for in-process and executable COM servers. This
        module provides the QAxAggregated, QAxBindable and QAxFactory
        classes.
     \endlist
+
+    A set of \l{Tools for ActiveQt}{tools} is provided to simplify the
+    developing and building of Qt projects that use ActiveX.
 
     To build the static libraries, change into the \c activeqt directory 
Index: /trunk/doc/src/getting-started/examples.qdoc
===================================================================
--- /trunk/doc/src/getting-started/examples.qdoc	(revision 768)
+++ /trunk/doc/src/getting-started/examples.qdoc	(revision 769)
@@ -407,5 +407,5 @@
     \section1 \l{D-Bus Examples}{D-Bus}
     \beginfloatleft
-    \l{D-Bus Examples}{\inlineimage qt-embedded-examples.png
+    \l{D-Bus Examples}{\inlineimage dbus-examples.png
     }
 
@@ -417,5 +417,5 @@
     \section1 \l{Qt for Embedded Linux Examples}{Qt for Embedded Linux}
     \beginfloatleft
-    \l{Qt for Embedded Linux Examples}{\inlineimage dbus-examples.png
+    \l{Qt for Embedded Linux Examples}{\inlineimage qt-embedded-examples.png
     }
 
Index: /trunk/doc/src/getting-started/installation.qdoc
===================================================================
--- /trunk/doc/src/getting-started/installation.qdoc	(revision 768)
+++ /trunk/doc/src/getting-started/installation.qdoc	(revision 769)
@@ -67,10 +67,10 @@
 
 \o  Unpack the archive if you have not done so already. For example,
-    if you have the \c{qt-everywhere-opensource-src-4.6.2.tar.gz}
+    if you have the \c{qt-everywhere-opensource-src-4.6.3.tar.gz}
     package, type the following commands at a command line prompt:
 
 \snippet doc/src/snippets/code/doc_src_installation.qdoc 0
 
-    This creates the directory \c{/tmp/qt-everywhere-opensource-src-4.6.2}
+    This creates the directory \c{/tmp/qt-everywhere-opensource-src-4.6.3}
     containing the files from the archive. We only support the GNU version of
     the tar archiving utility. Note that on some systems it is called gtar.
@@ -82,5 +82,5 @@
 
     By default, Qt is configured for installation in the
-    \c{/usr/local/Trolltech/Qt-4.6.2} directory, but this can be
+    \c{/usr/local/Trolltech/Qt-4.6.3} directory, but this can be
     changed by using the \c{-prefix} option.
 
@@ -134,5 +134,5 @@
     For compilers that do not support rpath you must also extended the
     \c LD_LIBRARY_PATH environment variable to include
-    \c{/usr/local/Trolltech/Qt-4.6.2/lib}. On Linux with GCC this step
+    \c{/usr/local/Trolltech/Qt-4.6.3/lib}. On Linux with GCC this step
     is not needed.
 
@@ -194,5 +194,5 @@
 
 \o  Uncompress the files into the directory you want Qt installed;
-    e.g. \c{C:\Qt\4.6.2}.
+    e.g. \c{C:\Qt\4.6.3}.
 
     \note The install path must not contain any spaces or Windows specific
@@ -206,5 +206,5 @@
 \snippet doc/src/snippets/code/doc_src_installation.qdoc 7
 
-    This is done by adding \c{c:\Qt\4.6.2\bin} to the \c PATH variable.
+    This is done by adding \c{c:\Qt\4.6.3\bin} to the \c PATH variable.
 
     For newer versions of Windows, \c PATH can be extended through
@@ -300,10 +300,10 @@
 
 \o  Unpack the archive if you have not done so already. For example,
-    if you have the \c{qt-everywhere-opensource-src-4.6.2.tar.gz}
+    if you have the \c{qt-everywhere-opensource-src-4.6.3.tar.gz}
     package, type the following commands at a command line prompt:
 
 \snippet doc/src/snippets/code/doc_src_installation.qdoc 11
 
-    This creates the directory \c{/tmp/qt-everywhere-opensource-src-4.6.2}
+    This creates the directory \c{/tmp/qt-everywhere-opensource-src-4.6.3}
     containing the files from the archive.
 
@@ -314,5 +314,5 @@
 
     By default, Qt is configured for installation in the
-    \c{/usr/local/Trolltech/Qt-4.6.2} directory, but this can be
+    \c{/usr/local/Trolltech/Qt-4.6.3} directory, but this can be
     changed by using the \c{-prefix} option.
 
@@ -407,5 +407,5 @@
 \list 1
     \o  Uncompress the files into the directory you want to install Qt into;
-        e.g., \c{C:\Qt\4.6.2}.
+        e.g., \c{C:\Qt\4.6.3}.
 
         \note The install path must not contain any spaces.
@@ -418,5 +418,5 @@
         \snippet doc/src/snippets/code/doc_src_installation.qdoc 18
 
-        This is done by adding \c{c:\Qt\4.6.2\bin} to the \c PATH variable.
+        This is done by adding \c{c:\Qt\4.6.3\bin} to the \c PATH variable.
 
         For newer versions of Windows, \c PATH can be extended through
@@ -507,5 +507,5 @@
     \o  Install Qt
 
-        Run \c{qt-symbian-opensource-4.6.2.exe} and follow the instructions.
+        Run \c{qt-symbian-opensource-4.6.3.exe} and follow the instructions.
 
         \note Qt must be installed on the same drive as the Symbian SDK you are
@@ -587,5 +587,5 @@
 
         Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
-        directory you want Qt installed, e.g. \c{C:\Qt\4.6.2}.
+        directory you want Qt installed, e.g. \c{C:\Qt\4.6.3}.
 
         \note Qt must be installed on the same drive as the Symbian SDK you are
@@ -599,5 +599,5 @@
         \snippet doc/src/snippets/code/doc_src_installation.qdoc 18
 
-        This is done by adding \c{c:\Qt\4.6.2\bin} to the \c PATH variable.
+        This is done by adding \c{c:\Qt\4.6.3\bin} to the \c PATH variable.
 
         On Windows the PATH can be extended by navigating to
@@ -755,5 +755,5 @@
     \endlist
 
-    \sa {Known Issues in 4.6.2}
+    \sa {Known Issues in 4.6.3}
 */
 
@@ -765,5 +765,5 @@
     \previouspage General Qt Requirements
 
-    \sa {Known Issues in 4.6.2}
+    \sa {Known Issues in 4.6.3}
 */
 
@@ -904,5 +904,5 @@
     distribution's package repository to find suitable packages.
 
-    \sa {Known Issues in 4.6.2}
+    \sa {Known Issues in 4.6.3}
 */
 
@@ -958,5 +958,5 @@
     \l{Windows CE - Working with Custom SDKs}{here}.
 
-    \sa {Known Issues in 4.6.2}
+    \sa {Known Issues in 4.6.3}
 */
 
@@ -968,5 +968,5 @@
     \previouspage General Qt Requirements
 
-    \sa {Known Issues in 4.6.2}
+    \sa {Known Issues in 4.6.3}
 
     \section1 Building Qt for Embedded Linux with uclibc
@@ -1068,4 +1068,4 @@
     to get more information about how to setup the development environment.
 
-    \sa {Known Issues in 4.6.2}
-*/
+    \sa {Known Issues in 4.6.3}
+*/
Index: /trunk/doc/src/getting-started/known-issues.qdoc
===================================================================
--- /trunk/doc/src/getting-started/known-issues.qdoc	(revision 768)
+++ /trunk/doc/src/getting-started/known-issues.qdoc	(revision 769)
@@ -42,12 +42,12 @@
 /*!
     \page known-issues.html
-    \title Known Issues in 4.6.2
+    \title Known Issues in 4.6.3
     \ingroup platform-specific
-    \brief A summary of known issues in Qt 4.6.2 at the time of release.
+    \brief A summary of known issues in Qt 4.6.3 at the time of release.
 
-    An up-to-date list of known issues with Qt 4.6.2 can be found via the
+    An up-to-date list of known issues with Qt 4.6.3 can be found via the
     \l{http://bugreports.qt.nokia.com/}{Qt Bug Tracker}.
 
-    For a list list of known bugs in Qt 4.6.2, see the \l{Task Tracker}
+    For a list list of known bugs in Qt 4.6.3, see the \l{Task Tracker}
     on the Qt website.
 
Index: /trunk/doc/src/howtos/openvg.qdoc
===================================================================
--- /trunk/doc/src/howtos/openvg.qdoc	(revision 768)
+++ /trunk/doc/src/howtos/openvg.qdoc	(revision 769)
@@ -173,6 +173,23 @@
 
     The other members of QPainter::CompositionMode are not supported
-    because OpenVG 1.1 does not have an equivalent in its \c VGBlendMode
-    enumeration.  Any attempt to set an unsupported mode will result in
+    unless the \c{VG_KHR_advanced_blending} extension is present,
+    in which case the following additional modes are supported:
+
+    \list
+    \o QPainter::CompositionMode_Overlay
+    \o QPainter::CompositionMode_ColorDodge
+    \o QPainter::CompositionMode_ColorBurn
+    \o QPainter::CompositionMode_HardLight
+    \o QPainter::CompositionMode_SoftLight
+    \o QPainter::CompositionMode_Difference
+    \o QPainter::CompositionMode_Exclusion
+    \o QPainter::CompositionMode_SourceOut
+    \o QPainter::CompositionMode_DestinationOut
+    \o QPainter::CompositionMode_SourceAtop
+    \o QPainter::CompositionMode_DestinationAtop
+    \o QPainter::CompositionMode_Xor
+    \endlist
+
+    Any attempt to set an unsupported mode will result in
     the actual mode being set to QPainter::CompositionMode_SourceOver.
     Client applications should avoid using unsupported modes.
@@ -296,4 +313,14 @@
     using OpenVG operations.
 
+    \section2 Scrolling
+
+    By default, accelerated scrolling is not enabled because the impact on
+    performance is very much tied to the hardware platform. To enable
+    accelerated scrolling, you should ensure that QVG_BUFFER_SCROLLING is
+    defined when compiling the QtOpenVG module.
+
+    You should only enable this feature if vgCopyPixels() is known to be
+    efficient on your hardware platform.
+
     \section1 Known issues
 
Index: /trunk/doc/src/internationalization/linguist-manual.qdoc
===================================================================
--- /trunk/doc/src/internationalization/linguist-manual.qdoc	(revision 768)
+++ /trunk/doc/src/internationalization/linguist-manual.qdoc	(revision 769)
@@ -725,5 +725,5 @@
     keyboard accelerators: Alt key and Ctrl key accelerators.
 
-    \section3 Alt Key Accellerators
+    \section3 Alt Key Accelerators
 
     Alt key accelerators are used in menu selection and on buttons.
Index: /trunk/doc/src/modules.qdoc
===================================================================
--- /trunk/doc/src/modules.qdoc	(revision 768)
+++ /trunk/doc/src/modules.qdoc	(revision 769)
@@ -518,4 +518,11 @@
     \l{Open Source Versions of Qt}.
 
+    \section1 Further Links
+
+    General overviews of XQuery and XSchema can be found in the
+    \l{Using XML Technologies} document.
+
+    An introduction to the XQuery language can be found in \l{A Short Path to XQuery}.
+
     \section1 License Information
 
@@ -855,4 +862,6 @@
     \brief The QAxContainer module is a Windows-only extension for
     accessing ActiveX controls and COM objects.
+
+    QAxServer is part of the \l{ActiveQt Framework}.
 
     \section1 License Information
@@ -905,4 +914,6 @@
     \brief The QAxServer module is a Windows-only static library that
     you can use to turn a standard Qt binary into a COM server. 
+
+    QAxServer is part of the \l{ActiveQt Framework}.
 
     \section1 License Information
Index: /trunk/doc/src/objectmodel/signalsandslots.qdoc
===================================================================
--- /trunk/doc/src/objectmodel/signalsandslots.qdoc	(revision 768)
+++ /trunk/doc/src/objectmodel/signalsandslots.qdoc	(revision 769)
@@ -380,5 +380,5 @@
 
     The signatures of signals and slots may contain arguments, and the
-    arguments can have defualt values. Consider QObject::destroyed():
+    arguments can have default values. Consider QObject::destroyed():
 
     \code
Index: /trunk/doc/src/platforms/emb-directfb-EmbLinux.qdoc
===================================================================
--- /trunk/doc/src/platforms/emb-directfb-EmbLinux.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/emb-directfb-EmbLinux.qdoc	(revision 769)
@@ -268,5 +268,6 @@
     \o By default Qt will use DirectFB to load QPixmaps from disk/memory. If
 your DirectFB implementation does not support this it might make sense to
-define this.
+define this. If you see strange rendering issues with pixmaps that have an
+alpha channel defining this could solve the problem.
 
  \row
@@ -328,3 +329,8 @@
 defines should only be used when optimizing the application. 
 
+\section2 Top level transparency
+\note DirectFB supports partially or fully transparent top level windows,
+either through QWidget::setWindowOpacity or through setting a non-opaque
+background brush. Note that for the latter it is not supported to change an
+opaque window to be transparent at runtime.
 */
Index: /trunk/doc/src/platforms/emb-features.qdoc
===================================================================
--- /trunk/doc/src/platforms/emb-features.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/emb-features.qdoc	(revision 769)
@@ -106,7 +106,4 @@
     desktop platforms.
 
-    \bold{Windows CE:} The Qt for Windows CE package contains a \c qconfig
-    executable that you can run on a Windows desktop to configure the build.
-
     \image qt-embedded-qconfigtool.png
 
Index: /trunk/doc/src/platforms/emb-install.qdoc
===================================================================
--- /trunk/doc/src/platforms/emb-install.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/emb-install.qdoc	(revision 769)
@@ -85,8 +85,10 @@
     ./configure script to configure the library for your development
     architecture. You can list all of the configuration system's
-    options by typing \c {./configure -help}.
+    options by typing
+
+    \snippet doc/src/snippets/code/doc_src_emb-install.qdoc embedded help
 
     Note that by default, \l{Qt for Embedded Linux} is configured for
-    installation in the \c{/usr/local/Trolltech/QtEmbedded-4.6.2}
+    installation in the \c{/usr/local/Trolltech/QtEmbedded-4.6.3}
     directory, but this can be changed by using the \c{-prefix}
     option. Alternatively, the \c{-prefix-install} option can be used
@@ -148,5 +150,5 @@
     For compilers that do not support \c rpath you must also extend
     the \c LD_LIBRARY_PATH environment variable to include
-    \c /usr/local/Trolltech/QtEmbedded-4.6.2/lib. Note that on Linux
+    \c /usr/local/Trolltech/QtEmbedded-4.6.3/lib. Note that on Linux
     with GCC, this step is not needed.
 
Index: /trunk/doc/src/platforms/emb-openvg.qdocinc
===================================================================
--- /trunk/doc/src/platforms/emb-openvg.qdocinc	(revision 768)
+++ /trunk/doc/src/platforms/emb-openvg.qdocinc	(revision 769)
@@ -136,6 +136,23 @@
 
 The other members of QPainter::CompositionMode are not supported
-because OpenVG 1.1 does not have an equivalent in its \c VGBlendMode
-enumeration.  Any attempt to set an unsupported mode will result in
+unless the \c{VG_KHR_advanced_blending} extension is present,
+in which case the following additional modes are supported:
+
+\list
+\o QPainter::CompositionMode_Overlay
+\o QPainter::CompositionMode_ColorDodge
+\o QPainter::CompositionMode_ColorBurn
+\o QPainter::CompositionMode_HardLight
+\o QPainter::CompositionMode_SoftLight
+\o QPainter::CompositionMode_Difference
+\o QPainter::CompositionMode_Exclusion
+\o QPainter::CompositionMode_SourceOut
+\o QPainter::CompositionMode_DestinationOut
+\o QPainter::CompositionMode_SourceAtop
+\o QPainter::CompositionMode_DestinationAtop
+\o QPainter::CompositionMode_Xor
+\endlist
+
+Any attempt to set an unsupported mode will result in
 the actual mode being set to QPainter::CompositionMode_SourceOver.
 Client applications should avoid using unsupported modes.
@@ -260,4 +277,10 @@
 accelerated using OpenVG operations.
 
+    \row
+        \o Scrolling
+        \o Accelerated scrolling is implemented but disabled by default
+unless QVG_BUFFER_SCROLLING is defined. This should only be enabled on
+OpenVG engines where vgCopyPixels() is known to be efficient.
+
 \endtable
 
Index: /trunk/doc/src/platforms/platform-notes.qdoc
===================================================================
--- /trunk/doc/src/platforms/platform-notes.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/platform-notes.qdoc	(revision 769)
@@ -251,5 +251,5 @@
     \section1 Windows Vista
 
-    At the time Qt 4.6.2 was released, there were no known Vista-specific issues.
+    At the time Qt 4.6.3 was released, there were no known Vista-specific issues.
 
     \target Windows NT
@@ -420,5 +420,5 @@
 
     Qt for Symbian provides the same level of source compatibility guarantee as
-    given for other platforms. Â That is, a program which compiles against a given
+    given for other platforms. That is, a program which compiles against a given
     version of Qt for Symbian will also compile against all future versions of the
     same major release.
@@ -503,4 +503,32 @@
     \l{Exception Safety with Symbian}.
 
+    \section1 Required Capabilities
+
+    The Qt libraries are typically signed with \c{All -TCB} capabilites, but
+    that does not mean your Qt application needs to be signed with the same
+    capabilities to function properly. The capabilities your application needs
+    to function properly depends on which parts of Qt you use, here is an
+    overview:
+
+    \table
+    \header \o Module
+            \o Required Symbian Capability
+    \row    \o QtCore
+            \o \c PowerMgmt if QProcess::kill(...) or QProcess::terminate(...) is called.
+    \row    \o QtCore
+            \o \c AllFiles when \l{http://developer.symbian.org/wiki/index.php/Capabilities_%28Symbian_Signed%29/AllFiles_Capability}{accessing specific areas.}
+    \row    \o QtNetwork
+            \o \c NetworkServices is basically always required for this module.
+    \row    \o QtMultiMedia
+            \o \c UserEnvironment if QAudioInput is used.
+    \endtable
+
+    Note that some modules rely on other modules. If your application uses
+    QtXmlPatterns, QtWebkit or QtScript it may still require \c NetworkServices
+    \o as these modules rely on QtNetwork to go online.
+
+    For more information see the documentation of the individual Qt classes. If
+    a class does not mention Symbian capabilities, it requires none.
+
     \section1 Multimedia and Phonon Support
 
Index: /trunk/doc/src/platforms/supported-platforms.qdoc
===================================================================
--- /trunk/doc/src/platforms/supported-platforms.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/supported-platforms.qdoc	(revision 769)
@@ -117,5 +117,5 @@
     \row    \o HPUXi 11.23
                                      \o aCC 6.10
-    \row    \o Solaris 10 UltraSparc
+    \row    \o Solaris 10 (UltraSparc, x86)
                                      \o Sun Studio 12
     \row    \o AIX 6
Index: /trunk/doc/src/platforms/symbian-introduction.qdoc
===================================================================
--- /trunk/doc/src/platforms/symbian-introduction.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/symbian-introduction.qdoc	(revision 769)
@@ -133,4 +133,6 @@
                                 missing dependencies in addition to
                                 just installing the application.
+    \row \o \c stub_sis      \o Create a stub sis to allow upgradability of projects
+                                that are deployed in ROM
     \endtable
 
Index: /trunk/doc/src/platforms/wince-customization.qdoc
===================================================================
--- /trunk/doc/src/platforms/wince-customization.qdoc	(revision 768)
+++ /trunk/doc/src/platforms/wince-customization.qdoc	(revision 769)
@@ -214,5 +214,5 @@
     \o The shadow build directory must be on the same level as the Qt source
         package.\br
-    If the Qt package is in \c{C:\Qt\4.6.2} the shadow build directory
+    If the Qt package is in \c{C:\Qt\4.6.3} the shadow build directory
     could be \c{C:\Qt\shadowbuild}. A shadow build from a directory like
     \c{C:\shadowbuild} will not compile.
@@ -225,5 +225,5 @@
     \endlist
 
-    So lets assume you have installed Qt in \c{C:\Qt\4.6.2} and you want
+    So lets assume you have installed Qt in \c{C:\Qt\4.6.3} and you want
     to create a shadow build in \c{C:\Qt\mobile5-shadow}:
 
Index: /trunk/doc/src/porting/porting4.qdoc
===================================================================
--- /trunk/doc/src/porting/porting4.qdoc	(revision 768)
+++ /trunk/doc/src/porting/porting4.qdoc	(revision 769)
@@ -3202,6 +3202,6 @@
     The \c QShared class has been obsoleted by the more powerful
     QSharedData and QSharedDataPointer as a means of creating custom
-    implicitly shared classes. It has been renamed Q3Shared moved to
-    the Qt3Support library.
+    implicitly shared classes. It has been renamed Q3Shared and moved
+    to the Qt3Support library.
 
     An easy way of porting to Qt 4 is to include this class into your
@@ -3227,5 +3227,5 @@
 
     QSimpleRichText has been obsoleted by QTextDocument. It has
-    bene renamed Q3SimpleRichText and moved to the Qt3Support
+    been renamed Q3SimpleRichText and moved to the Qt3Support
     library.
 
Index: /trunk/doc/src/porting/qt4-network.qdoc
===================================================================
--- /trunk/doc/src/porting/qt4-network.qdoc	(revision 768)
+++ /trunk/doc/src/porting/qt4-network.qdoc	(revision 769)
@@ -200,5 +200,5 @@
     eliminated. These classes attempted the impossible (unify FTP and
     HTTP under one roof), and unsurprisingly failed at that. Qt 4
-    still provides QFtp, and it also proveds the QNetworkAccessManager.
+    still provides QFtp, and it also provides the QNetworkAccessManager.
 
     The QSocket class in Qt 3 has been renamed QTcpSocket. The new
Index: /trunk/doc/src/qt4-intro.qdoc
===================================================================
--- /trunk/doc/src/qt4-intro.qdoc	(revision 768)
+++ /trunk/doc/src/qt4-intro.qdoc	(revision 769)
@@ -469,10 +469,10 @@
     included in the \c changes-4.6.0 file
     \l{http://qt.nokia.com/developer/changes/changes-4.6.0}{available
-    online}. A \l{Known Issues in 4.6.2}{list of known issues}
+    online}. A \l{Known Issues in 4.6.3}{list of known issues}
     for this release is also available.
 
     Changes between this release and the previous release are provided
-    in the \c{changes-4.6.2} file (also
-    \l{http://qt.nokia.com/developer/changes/changes-4.6.2}{available online}).
+    in the \c{changes-4.6.3} file (also
+    \l{http://qt.nokia.com/developer/changes/changes-4.6.3}{available online}).
 \endomit
 
@@ -683,10 +683,10 @@
     in the \c changes-4.5.0 file
     \l{http://qt.nokia.com/developer/changes/changes-4.5.0}{available online}.
-    A \l{Known Issues in 4.6.2}{list of known issues} for this release is also
+    A \l{Known Issues in 4.6.3}{list of known issues} for this release is also
     available.
 
     Changes between this release and the previous release are provided
-    in the \c{changes-4.6.2} file (also
-    \l{http://qt.nokia.com/developer/changes/changes-4.6.2}{available online}).
+    in the \c{changes-4.6.3} file (also
+    \l{http://qt.nokia.com/developer/changes/changes-4.6.3}{available online}).
 
     A list of other Qt 4 features can be found on the
Index: /trunk/doc/src/scripting/scripting.qdoc
===================================================================
--- /trunk/doc/src/scripting/scripting.qdoc	(revision 768)
+++ /trunk/doc/src/scripting/scripting.qdoc	(revision 769)
@@ -1008,5 +1008,5 @@
   implementing functions that take a variable number of arguments
   is simple. In fact, as we have seen, in the technical sense \e{all}
-  Qt Script functions can be seen as variable-argument functions).
+  Qt Script functions can be seen as variable-argument functions.
   As an example, consider a concat() function that takes an arbitrary
   number of arguments, converts the arguments to their string
Index: /trunk/doc/src/snippets/code/doc_src_deployment.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_deployment.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_deployment.qdoc	(revision 769)
@@ -464,5 +464,6 @@
     ":\"Example Vendor\""
 
-default_deployment.pkg_prerules = vendorinfo
+my_deployment.pkg_prerules = vendorinfo
+DEPLOYMENT += my_deployment
 //! [56]
 
@@ -472,5 +473,7 @@
     "[0x1028315F],0,0,0,{\"S60ProductID\"}"
 
-default_deployment.pkg_prerules += supported_platforms
+default_deployment.pkg_prerules -= pkg_platform_dependencies
+my_deployment.pkg_prerules += supported_platforms
+DEPLOYMENT += my_deployment
 //! [57]
 
Index: /trunk/doc/src/snippets/code/doc_src_emb-install.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_emb-install.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_emb-install.qdoc	(revision 769)
@@ -42,16 +42,20 @@
 //! [0]
 cd <anywhere>
-gunzip qt-embedded-linux-commercial-src-4.6.2.tar.gz
-tar xf qt-embedded-linux-commercial-src-4.6.2.tar
+gunzip qt-everywhere-opensource-src-4.6.3.tar.gz
+tar xf qt-everywhere-opensource-src-4.6.3.tar
 //! [0]
 
 
 //! [1]
-~/qt-embedded-linux-commercial-src-4.6.2
+~/qt-everywhere-opensource-src-4.6.3
 //! [1]
 
 
+//! [embedded help]
+./configure -embedded -help
+//! [embedded help]
+
 //! [2]
-cd  ~/qt-embedded-linux-commercial-src-4.6.2
+cd  ~/qt-everywhere-opensource-src-4.6.3
 ./configure -embedded [architecture]
 //! [2]
@@ -69,5 +73,5 @@
 
 //! [5]
-PATH=/usr/local/Trolltech/QtEmbedded-4.6.2/bin:$PATH
+PATH=/usr/local/Trolltech/QtEmbedded-4.6.3/bin:$PATH
 export PATH
 //! [5]
@@ -75,4 +79,4 @@
 
 //! [6]
-setenv PATH /usr/local/Trolltech/QtEmbedded-4.6.2/bin:$PATH
+setenv PATH /usr/local/Trolltech/QtEmbedded-4.6.3/bin:$PATH
 //! [6]
Index: /trunk/doc/src/snippets/code/doc_src_installation.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_installation.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_installation.qdoc	(revision 769)
@@ -42,11 +42,11 @@
 //! [0]
 cd /tmp
-gunzip qt-everywhere-opensource-src-4.6.2.tar.gz        # uncompress the archive
-tar xvf qt-everywhere-opensource-src-4.6.2.tar          # unpack it
+gunzip qt-everywhere-opensource-src-4.6.3.tar.gz        # uncompress the archive
+tar xvf qt-everywhere-opensource-src-4.6.3.tar          # unpack it
 //! [0]
 
 
 //! [1]
-cd /tmp/qt-everywhere-opensource-src-4.6.2
+cd /tmp/qt-everywhere-opensource-src-4.6.3
 ./configure
 //! [1]
@@ -69,5 +69,5 @@
 
 //! [5]
-PATH=/usr/local/Trolltech/Qt-4.6.2/bin:$PATH
+PATH=/usr/local/Trolltech/Qt-4.6.3/bin:$PATH
 export PATH
 //! [5]
@@ -75,5 +75,5 @@
 
 //! [6]
-setenv PATH /usr/local/Trolltech/Qt-4.6.2/bin:$PATH
+setenv PATH /usr/local/Trolltech/Qt-4.6.3/bin:$PATH
 //! [6]
 
@@ -86,5 +86,5 @@
 //! [8]
 C:
-cd /D C:\Qt\4.6.2
+cd /D C:\Qt\4.6.3
 configure
 //! [8]
@@ -103,11 +103,11 @@
 //! [11]
 cd /tmp
-gunzip qt-everywhere-opensource-src-4.6.2.tar.gz        # uncompress the archive
-tar xvf qt-everywhere-opensource-src-4.6.2.tar          # unpack it
+gunzip qt-everywhere-opensource-src-4.6.3.tar.gz        # uncompress the archive
+tar xvf qt-everywhere-opensource-src-4.6.3.tar          # unpack it
 //! [11]
 
 
 //! [12]
-cd /tmp/qt-everywhere-opensource-src-4.6.2
+cd /tmp/qt-everywhere-opensource-src-4.6.3
 ./configure
 //! [12]
@@ -130,5 +130,5 @@
 
 //! [16]
-PATH=/usr/local/Trolltech/Qt-4.6.2/bin:$PATH
+PATH=/usr/local/Trolltech/Qt-4.6.3/bin:$PATH
 export PATH
 //! [16]
@@ -136,5 +136,5 @@
 
 //! [17]
-setenv PATH /usr/local/Trolltech/Qt-4.6.2/bin:$PATH
+setenv PATH /usr/local/Trolltech/Qt-4.6.3/bin:$PATH
 //! [17]
 
@@ -147,5 +147,5 @@
 //! [19]
 C:
-cd \Qt\4.6.2
+cd \Qt\4.6.3
 configure -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005
 //! [19]
@@ -170,5 +170,5 @@
 
 //! [23]
-cd \Qt\4.6.2
+cd \Qt\4.6.3
 configure -platform win32-g++ -xplatform symbian-abld
 //! [23]
@@ -209,5 +209,5 @@
 
 //! [31]
-cd \Qt\4.6.2
+cd \Qt\4.6.3
 configure -platform win32-g++ -xplatform symbian-sbsv2
 //! [31]
Index: /trunk/doc/src/snippets/code/doc_src_porting4.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_porting4.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_porting4.qdoc	(revision 769)
@@ -453,5 +453,5 @@
 richText.setWidth(w);
 
-// Or set a resonable default size
+// Or set a reasonable default size
 richText.adjustSize();
 
Index: /trunk/doc/src/snippets/code/doc_src_qmake-manual.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_qmake-manual.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_qmake-manual.qdoc	(revision 769)
@@ -934,5 +934,7 @@
 
 //! [141]
-default_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}"
+default_deployment.pkg_prerules -= pkg_platform_dependencies
+my_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}"
+DEPLOYMENT += my_deployment
 //! [141]
 
@@ -970,2 +972,34 @@
 DEPLOYMENT.installer_header = "$${LITERAL_HASH}{\"My Application Installer\"},(0x12345678),1,0,0"
 //! [147]
+
+//! [148]
+# Set conditional libraries
+LIB.MARM = "LIBRARY myarm.lib"
+LIB.WINSCW = "LIBRARY mywinscw.lib"
+LIB.default = "LIBRARY mydefault.lib"
+
+# Add the conditional MMP rules
+MYCONDITIONS = MARM WINSCW
+MYVARIABLES = LIB
+
+addMMPRules(MYCONDITIONS, MYVARIABLES)
+//! [148]
+
+//! [149]
+SUBDIRS += my_executable my_library
+my_executable.subdir = app
+my_executable.depends = my_library
+my_library.subdir = lib
+//! [149]
+
+//! [150]
+symbian {
+    SUBDIRS += emulator_dll
+    emulator_dll.condition = WINSCW
+}
+//! [150]
+
+//! [151]
+RSS_RULES.service_list += "uid = 0x12345678; datatype_list = \{\}; opaque_data = r_my_icon;"
+RSS_RULES.footer +="RESOURCE CAPTION_AND_ICON_INFO r_my_icon \{ icon_file =\"$$PWD/my_icon.svg\"; \}"
+//! [151]
Index: /trunk/doc/src/snippets/code/doc_src_qtestlib.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_qtestlib.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_qtestlib.qdoc	(revision 769)
@@ -111,5 +111,5 @@
 //! [10]
 ********* Start testing of TestQString *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
 PASS   : TestQString::initTestCase()
 PASS   : TestQString::toUpper()
Index: /trunk/doc/src/snippets/code/doc_src_wince-customization.qdoc
===================================================================
--- /trunk/doc/src/snippets/code/doc_src_wince-customization.qdoc	(revision 768)
+++ /trunk/doc/src/snippets/code/doc_src_wince-customization.qdoc	(revision 769)
@@ -63,5 +63,5 @@
 //! [4]
 cd c:\Qt\mobile5-shadow
-C:\Qt\4.6.2\configure.exe -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005 -release
+C:\Qt\4.6.3\configure.exe -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005 -release
 //! [4]
 
Index: /trunk/doc/src/snippets/code/src_corelib_kernel_qobject.cpp
===================================================================
--- /trunk/doc/src/snippets/code/src_corelib_kernel_qobject.cpp	(revision 768)
+++ /trunk/doc/src/snippets/code/src_corelib_kernel_qobject.cpp	(revision 769)
@@ -375,8 +375,11 @@
            [WRITE setFunction]
            [RESET resetFunction]
+           [NOTIFY notifySignal]
            [DESIGNABLE bool]
            [SCRIPTABLE bool]
            [STORED bool]
-	   [USER bool])
+	   [USER bool]
+           [CONSTANT]
+           [FINAL])
 //! [36]
 
Index: /trunk/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp
===================================================================
--- /trunk/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp	(revision 768)
+++ /trunk/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp	(revision 769)
@@ -129,5 +129,5 @@
 
 // this QScopedPointer frees its data using free():
-QScopedPointer<int, QScopedPointerPodDeleter<int> > podPointer(reinterpret_cast<int *>(malloc(42)));
+QScopedPointer<int, QScopedPointerPodDeleter> podPointer(reinterpret_cast<int *>(malloc(42)));
 
 // this struct calls "myCustomDeallocator" to delete the pointer
Index: /trunk/doc/src/widgets-and-layouts/styles.qdoc
===================================================================
--- /trunk/doc/src/widgets-and-layouts/styles.qdoc	(revision 768)
+++ /trunk/doc/src/widgets-and-layouts/styles.qdoc	(revision 769)
@@ -126,5 +126,5 @@
     QStyle draw widgets without linking in any code for the widget. This
     makes it possible to use \l{QStyle}'s draw functions on any paint
-    device. Ie you can draw a combobox on any widget, not just on a
+    device, i.e., you can draw a combobox on any widget, not just on a
     QComboBox.
 
Index: /trunk/doc/src/widgets-and-layouts/stylesheet.qdoc
===================================================================
--- /trunk/doc/src/widgets-and-layouts/stylesheet.qdoc	(revision 768)
+++ /trunk/doc/src/widgets-and-layouts/stylesheet.qdoc	(revision 769)
@@ -3823,5 +3823,5 @@
     \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 148
 
-    Sine Qt 4.6 the close button can be customized as follow:
+    Since Qt 4.6 the close button can be customized as follow:
     \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 159
 
Index: /trunk/doc/src/windows-and-dialogs/mainwindow.qdoc
===================================================================
--- /trunk/doc/src/windows-and-dialogs/mainwindow.qdoc	(revision 768)
+++ /trunk/doc/src/windows-and-dialogs/mainwindow.qdoc	(revision 769)
@@ -52,5 +52,5 @@
     \nextpage The Application Main Window
 
-    A \l{Widgets}{widget} that is not embedded in a parent widget is called a window.
+    A \l{Widgets Tutorial}{widget} that is not embedded in a parent widget is called a window.
     Usually, windows have a frame and a title bar, although it is also possible to create
     windows without such decoration using suitable window flags). In Qt, QMainWindow
Index: /trunk/examples/animation/animatedtiles/animatedtiles.pro
===================================================================
--- /trunk/examples/animation/animatedtiles/animatedtiles.pro	(revision 768)
+++ /trunk/examples/animation/animatedtiles/animatedtiles.pro	(revision 769)
@@ -7,2 +7,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/animatedtiles
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7D1
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/animation/appchooser/appchooser.pro
===================================================================
--- /trunk/examples/animation/appchooser/appchooser.pro	(revision 768)
+++ /trunk/examples/animation/appchooser/appchooser.pro	(revision 769)
@@ -7,2 +7,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/appchooser
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F5
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/animation/easing/easing.pro
===================================================================
--- /trunk/examples/animation/easing/easing.pro	(revision 768)
+++ /trunk/examples/animation/easing/easing.pro	(revision 769)
@@ -13,2 +13,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/easing
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F6
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/animation/moveblocks/moveblocks.pro
===================================================================
--- /trunk/examples/animation/moveblocks/moveblocks.pro	(revision 768)
+++ /trunk/examples/animation/moveblocks/moveblocks.pro	(revision 769)
@@ -6,2 +6,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/moveblocks
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F7
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/animation/states/states.pro
===================================================================
--- /trunk/examples/animation/states/states.pro	(revision 768)
+++ /trunk/examples/animation/states/states.pro	(revision 769)
@@ -7,2 +7,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/states
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F8
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/animation/stickman/stickman.pro
===================================================================
--- /trunk/examples/animation/stickman/stickman.pro	(revision 768)
+++ /trunk/examples/animation/stickman/stickman.pro	(revision 769)
@@ -18,2 +18,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/stickman
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F9
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/assistant/simpletextviewer/findfiledialog.cpp
===================================================================
--- /trunk/examples/assistant/simpletextviewer/findfiledialog.cpp	(revision 768)
+++ /trunk/examples/assistant/simpletextviewer/findfiledialog.cpp	(revision 769)
@@ -103,5 +103,5 @@
         QString data(file.readAll());
 
-        if (fileName.endsWith(".html"))
+        if (fileName.endsWith(QLatin1String(".html")))
             currentEditor->setHtml(data);
         else
@@ -120,5 +120,5 @@
 void FindFileDialog::findFiles()
 {
-    QRegExp filePattern(fileNameComboBox->currentText() + "*");
+    QRegExp filePattern(fileNameComboBox->currentText() + '*');
     filePattern.setPatternSyntax(QRegExp::Wildcard);
 
@@ -128,5 +128,5 @@
     QStringList matchingFiles;
 
-    foreach (QString file, allFiles) {
+    foreach (const QString &file, allFiles) {
         if (filePattern.exactMatch(file))
             matchingFiles << file;
Index: /trunk/examples/designer/taskmenuextension/tictactoedialog.h
===================================================================
--- /trunk/examples/designer/taskmenuextension/tictactoedialog.h	(revision 768)
+++ /trunk/examples/designer/taskmenuextension/tictactoedialog.h	(revision 769)
@@ -56,5 +56,5 @@
 
 public:
-    TicTacToeDialog(TicTacToe *plugin = 0, QWidget *parent = 0);
+    explicit TicTacToeDialog(TicTacToe *plugin = 0, QWidget *parent = 0);
 
     QSize sizeHint() const;
Index: /trunk/examples/examples.pro
===================================================================
--- /trunk/examples/examples.pro	(revision 768)
+++ /trunk/examples/examples.pro	(revision 769)
@@ -37,4 +37,6 @@
                 sql \
                 uitools \
+                animation \
+                gestures \
                 xml
 
Index: /trunk/examples/gestures/imagegestures/imagegestures.pro
===================================================================
--- /trunk/examples/gestures/imagegestures/imagegestures.pro	(revision 768)
+++ /trunk/examples/gestures/imagegestures/imagegestures.pro	(revision 769)
@@ -15,2 +15,7 @@
 INSTALLS += target \
     sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7D0
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/multimedia/audiodevices/audiodevices.cpp
===================================================================
--- /trunk/examples/multimedia/audiodevices/audiodevices.cpp	(revision 768)
+++ /trunk/examples/multimedia/audiodevices/audiodevices.cpp	(revision 769)
@@ -44,4 +44,38 @@
 
 #include "audiodevices.h"
+
+// Utility functions for converting QAudioFormat fields into text
+
+QString toString(QAudioFormat::SampleType sampleType)
+{
+    QString result("Unknown");
+    switch (sampleType) {
+    case QAudioFormat::SignedInt:
+        result = "SignedInt";
+        break;
+    case QAudioFormat::UnSignedInt:
+        result = "UnSignedInt";
+        break;
+    case QAudioFormat::Float:
+        result = "Float";
+        break;
+    }
+    return result;
+}
+
+QString toString(QAudioFormat::Endian endian)
+{
+    QString result("Unknown");
+    switch (endian) {
+    case QAudioFormat::LittleEndian:
+        result = "LittleEndian";
+        break;
+    case QAudioFormat::BigEndian:
+        result = "BigEndian";
+        break;
+    }
+    return result;
+}
+
 
 AudioDevicesBase::AudioDevicesBase(QWidget *parent, Qt::WFlags f)
@@ -68,4 +102,5 @@
     connect(sampleTypesBox, SIGNAL(activated(int)), SLOT(sampleTypeChanged(int)));
     connect(endianBox, SIGNAL(activated(int)), SLOT(endianChanged(int)));
+    connect(populateTableButton, SIGNAL(clicked()), SLOT(populateTable()));
 
     modeBox->setCurrentIndex(0);
@@ -82,10 +117,9 @@
 {
     // tries to set all the settings picked.
-    logOutput->clear();
-    logOutput->append("NOTE: an invalid codec audio/test exists for testing, to get a fail condition.");
+    testResult->clear();
 
     if (!deviceInfo.isNull()) {
         if (deviceInfo.isFormatSupported(settings)) {
-            logOutput->append(tr("Success"));
+            testResult->setText(tr("Success"));
             nearestFreq->setText("");
             nearestChannel->setText("");
@@ -96,38 +130,21 @@
         } else {
             QAudioFormat nearest = deviceInfo.nearestFormat(settings);
-            logOutput->append(tr("Failed"));
+            testResult->setText(tr("Failed"));
             nearestFreq->setText(QString("%1").arg(nearest.frequency()));
             nearestChannel->setText(QString("%1").arg(nearest.channels()));
             nearestCodec->setText(nearest.codec());
             nearestSampleSize->setText(QString("%1").arg(nearest.sampleSize()));
-
-            switch(nearest.sampleType()) {
-                case QAudioFormat::SignedInt:
-                    nearestSampleType->setText("SignedInt");
-                    break;
-                case QAudioFormat::UnSignedInt:
-                    nearestSampleType->setText("UnSignedInt");
-                    break;
-                case QAudioFormat::Float:
-                    nearestSampleType->setText("Float");
-                    break;
-                case QAudioFormat::Unknown:
-                    nearestSampleType->setText("Unknown");
-            }
-            switch(nearest.byteOrder()) {
-                case QAudioFormat::LittleEndian:
-                    nearestEndian->setText("LittleEndian");
-                    break;
-                case QAudioFormat::BigEndian:
-                    nearestEndian->setText("BigEndian");
-            }
+            nearestSampleType->setText(toString(nearest.sampleType()));
+            nearestEndian->setText(toString(nearest.byteOrder()));
         }
     }
     else
-        logOutput->append(tr("No Device"));
+        testResult->setText(tr("No Device"));
 }
 
 void AudioTest::modeChanged(int idx)
 {
+    testResult->clear();
+
     // mode has changed
     if (idx == 0)
@@ -139,8 +156,13 @@
     foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(mode))
         deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
+
+    deviceBox->setCurrentIndex(0);
+    deviceChanged(0);
 }
 
 void AudioTest::deviceChanged(int idx)
 {
+    testResult->clear();
+
     if (deviceBox->count() == 0)
         return;
@@ -181,36 +203,66 @@
     sampleTypesBox->clear();
     QList<QAudioFormat::SampleType> sampleTypez = deviceInfo.supportedSampleTypes();
-    for (int i = 0; i < sampleTypez.size(); ++i) {
-        switch(sampleTypez.at(i)) {
-            case QAudioFormat::SignedInt:
-                sampleTypesBox->addItem("SignedInt");
-                break;
-            case QAudioFormat::UnSignedInt:
-                sampleTypesBox->addItem("UnSignedInt");
-                break;
-            case QAudioFormat::Float:
-                sampleTypesBox->addItem("Float");
-                break;
-            case QAudioFormat::Unknown:
-                sampleTypesBox->addItem("Unknown");
-        }
-	if (sampleTypez.size())
-            settings.setSampleType(sampleTypez.at(0));
-    }
+
+    for (int i = 0; i < sampleTypez.size(); ++i)
+        sampleTypesBox->addItem(toString(sampleTypez.at(i)));
+    if (sampleTypez.size())
+        settings.setSampleType(sampleTypez.at(0));
 
     endianBox->clear();
     QList<QAudioFormat::Endian> endianz = deviceInfo.supportedByteOrders();
-    for (int i = 0; i < endianz.size(); ++i) {
-        switch (endianz.at(i)) {
-            case QAudioFormat::LittleEndian:
-                endianBox->addItem("Little Endian");
-                break;
-            case QAudioFormat::BigEndian:
-                endianBox->addItem("Big Endian");
-                break;
-        }
-    }
+    for (int i = 0; i < endianz.size(); ++i)
+        endianBox->addItem(toString(endianz.at(i)));
     if (endianz.size())
         settings.setByteOrder(endianz.at(0));
+
+    allFormatsTable->clearContents();
+}
+
+void AudioTest::populateTable()
+{
+    int row = 0;
+
+    QAudioFormat format;
+    foreach (QString codec, deviceInfo.supportedCodecs()) {
+        format.setCodec(codec);
+        foreach (int frequency, deviceInfo.supportedFrequencies()) {
+            format.setFrequency(frequency);
+            foreach (int channels, deviceInfo.supportedChannels()) {
+                format.setChannels(channels);
+                foreach (QAudioFormat::SampleType sampleType, deviceInfo.supportedSampleTypes()) {
+                    format.setSampleType(sampleType);
+                    foreach (int sampleSize, deviceInfo.supportedSampleSizes()) {
+                        format.setSampleSize(sampleSize);
+                        foreach (QAudioFormat::Endian endian, deviceInfo.supportedByteOrders()) {
+                            format.setByteOrder(endian);
+                            if (deviceInfo.isFormatSupported(format)) {
+                                allFormatsTable->setRowCount(row + 1);
+
+                                QTableWidgetItem *codecItem = new QTableWidgetItem(format.codec());
+                                allFormatsTable->setItem(row, 0, codecItem);
+
+                                QTableWidgetItem *frequencyItem = new QTableWidgetItem(QString("%1").arg(format.frequency()));
+                                allFormatsTable->setItem(row, 1, frequencyItem);
+
+                                QTableWidgetItem *channelsItem = new QTableWidgetItem(QString("%1").arg(format.channels()));
+                                allFormatsTable->setItem(row, 2, channelsItem);
+
+                                QTableWidgetItem *sampleTypeItem = new QTableWidgetItem(toString(format.sampleType()));
+                                allFormatsTable->setItem(row, 3, sampleTypeItem);
+
+                                QTableWidgetItem *sampleSizeItem = new QTableWidgetItem(QString("%1").arg(format.sampleSize()));
+                                allFormatsTable->setItem(row, 4, sampleSizeItem);
+
+                                QTableWidgetItem *byteOrderItem = new QTableWidgetItem(toString(format.byteOrder()));
+                                allFormatsTable->setItem(row, 5, byteOrderItem);
+
+                                ++row;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
Index: /trunk/examples/multimedia/audiodevices/audiodevices.h
===================================================================
--- /trunk/examples/multimedia/audiodevices/audiodevices.h	(revision 768)
+++ /trunk/examples/multimedia/audiodevices/audiodevices.h	(revision 769)
@@ -75,4 +75,6 @@
     void endianChanged(int idx);
     void test();
+    void populateTable();
+
 };
 
Index: /trunk/examples/multimedia/audiodevices/audiodevicesbase.ui
===================================================================
--- /trunk/examples/multimedia/audiodevices/audiodevicesbase.ui	(revision 768)
+++ /trunk/examples/multimedia/audiodevices/audiodevicesbase.ui	(revision 769)
@@ -7,6 +7,6 @@
     <x>0</x>
     <y>0</y>
-    <width>504</width>
-    <height>702</height>
+    <width>679</width>
+    <height>598</height>
    </rect>
   </property>
@@ -17,239 +17,377 @@
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QLabel" name="deviceLabel">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-          <horstretch>1</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>Device</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLabel" name="modeLabel">
-        <property name="text">
-         <string>Mode</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QComboBox" name="deviceBox"/>
-      </item>
-      <item row="1" column="1">
-       <widget class="QComboBox" name="modeBox">
-        <item>
-         <property name="text">
-          <string>Input</string>
-         </property>
+     <widget class="QScrollArea" name="scrollArea">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="widgetResizable">
+       <bool>true</bool>
+      </property>
+      <widget class="QWidget" name="scrollAreaWidgetContents">
+       <property name="geometry">
+        <rect>
+         <x>0</x>
+         <y>0</y>
+         <width>659</width>
+         <height>558</height>
+        </rect>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_4">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0">
+           <widget class="QLabel" name="modeLabel">
+            <property name="text">
+             <string>Mode</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLabel" name="deviceLabel">
+            <property name="text">
+             <string>Device</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QComboBox" name="modeBox">
+            <item>
+             <property name="text">
+              <string>Input</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Output</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QComboBox" name="deviceBox"/>
+          </item>
+          <item row="2" column="0" colspan="2">
+           <widget class="QTabWidget" name="tabWidget">
+            <property name="currentIndex">
+             <number>0</number>
+            </property>
+            <widget class="QWidget" name="testFormatTab">
+             <attribute name="title">
+              <string>Test format</string>
+             </attribute>
+             <layout class="QGridLayout" name="gridLayout">
+              <item row="0" column="1">
+               <widget class="QLabel" name="actualLabel">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="frameShape">
+                 <enum>QFrame::NoFrame</enum>
+                </property>
+                <property name="frameShadow">
+                 <enum>QFrame::Plain</enum>
+                </property>
+                <property name="text">
+                 <string>&lt;i&gt;Actual Settings&lt;/i&gt;</string>
+                </property>
+                <property name="textFormat">
+                 <enum>Qt::RichText</enum>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="2">
+               <widget class="QLabel" name="nearestLabel">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="frameShape">
+                 <enum>QFrame::NoFrame</enum>
+                </property>
+                <property name="frameShadow">
+                 <enum>QFrame::Plain</enum>
+                </property>
+                <property name="text">
+                 <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Nearest Settings&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                </property>
+                <property name="textFormat">
+                 <enum>Qt::RichText</enum>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="1">
+               <widget class="QComboBox" name="frequencyBox">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="2">
+               <widget class="QLineEdit" name="nearestFreq">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="5" column="1">
+               <widget class="QComboBox" name="channelsBox"/>
+              </item>
+              <item row="5" column="2">
+               <widget class="QLineEdit" name="nearestChannel">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="9" column="1">
+               <widget class="QComboBox" name="sampleSizesBox"/>
+              </item>
+              <item row="9" column="2">
+               <widget class="QLineEdit" name="nearestSampleSize">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="14" column="1">
+               <widget class="QComboBox" name="endianBox"/>
+              </item>
+              <item row="14" column="2">
+               <widget class="QLineEdit" name="nearestEndian">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="15" column="1">
+               <widget class="QPushButton" name="testButton">
+                <property name="text">
+                 <string>Test</string>
+                </property>
+               </widget>
+              </item>
+              <item row="15" column="2">
+               <widget class="QLabel" name="testResult">
+                <property name="text">
+                 <string/>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="0">
+               <widget class="QLabel" name="actualFreqLabel">
+                <property name="text">
+                 <string>Frequency (Hz)</string>
+                </property>
+               </widget>
+              </item>
+              <item row="5" column="0">
+               <widget class="QLabel" name="actualChannelLabel">
+                <property name="text">
+                 <string>Channels</string>
+                </property>
+               </widget>
+              </item>
+              <item row="9" column="0">
+               <widget class="QLabel" name="actualSampleSizeLabel">
+                <property name="text">
+                 <string>Sample size (bits)</string>
+                </property>
+               </widget>
+              </item>
+              <item row="14" column="0">
+               <widget class="QLabel" name="actualEndianLabel">
+                <property name="text">
+                 <string>Endianess</string>
+                </property>
+               </widget>
+              </item>
+              <item row="16" column="0" colspan="3">
+               <widget class="QLabel" name="label">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="text">
+                 <string>Note: an invalid codec 'audio/test' exists in order to allow an invalid format to be constructed, and therefore to trigger a 'nearest format' calculation.</string>
+                </property>
+                <property name="wordWrap">
+                 <bool>true</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="0">
+               <widget class="QLabel" name="actualCodecLabel">
+                <property name="text">
+                 <string>Codec</string>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="2">
+               <widget class="QLineEdit" name="nearestCodec">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="1">
+               <widget class="QComboBox" name="codecsBox"/>
+              </item>
+              <item row="6" column="0">
+               <widget class="QLabel" name="actualSampleTypeLabel">
+                <property name="text">
+                 <string>SampleType</string>
+                </property>
+               </widget>
+              </item>
+              <item row="6" column="1">
+               <widget class="QComboBox" name="sampleTypesBox"/>
+              </item>
+              <item row="6" column="2">
+               <widget class="QLineEdit" name="nearestSampleType">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+            <widget class="QWidget" name="tab">
+             <attribute name="title">
+              <string>All formats</string>
+             </attribute>
+             <layout class="QVBoxLayout" name="verticalLayout_2">
+              <item>
+               <widget class="QPushButton" name="populateTableButton">
+                <property name="text">
+                 <string>Populate table</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QTableWidget" name="allFormatsTable">
+                <property name="editTriggers">
+                 <set>QAbstractItemView::NoEditTriggers</set>
+                </property>
+                <property name="dragDropOverwriteMode">
+                 <bool>false</bool>
+                </property>
+                <property name="selectionMode">
+                 <enum>QAbstractItemView::NoSelection</enum>
+                </property>
+                <property name="selectionBehavior">
+                 <enum>QAbstractItemView::SelectItems</enum>
+                </property>
+                <property name="textElideMode">
+                 <enum>Qt::ElideNone</enum>
+                </property>
+                <property name="sortingEnabled">
+                 <bool>false</bool>
+                </property>
+                <property name="wordWrap">
+                 <bool>false</bool>
+                </property>
+                <property name="cornerButtonEnabled">
+                 <bool>false</bool>
+                </property>
+                <attribute name="horizontalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderVisible">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderVisible">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="horizontalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <column>
+                 <property name="text">
+                  <string>Codec</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Frequency (Hz)</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Channels</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Sample type</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Sample size (bits)</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Endianness</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+           </widget>
+          </item>
+         </layout>
         </item>
-        <item>
-         <property name="text">
-          <string>Output</string>
-         </property>
-        </item>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QLabel" name="actualLabel">
-        <property name="frameShape">
-         <enum>QFrame::Panel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Raised</enum>
-        </property>
-        <property name="text">
-         <string>Actual Settings</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QLabel" name="nearestLabel">
-        <property name="frameShape">
-         <enum>QFrame::Panel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Raised</enum>
-        </property>
-        <property name="text">
-         <string>Nearest Settings</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QLabel" name="actualFreqLabel">
-        <property name="text">
-         <string>Frequency</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="QLabel" name="nearestFreqLabel">
-        <property name="text">
-         <string>Frequency</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QComboBox" name="frequencyBox"/>
-      </item>
-      <item row="4" column="1">
-       <widget class="QLineEdit" name="nearestFreq">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="0">
-       <widget class="QLabel" name="actualChannelsLabel">
-        <property name="text">
-         <string>Channels</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="1">
-       <widget class="QLabel" name="nearestChannelLabel">
-        <property name="text">
-         <string>Channel</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="0">
-       <widget class="QComboBox" name="channelsBox"/>
-      </item>
-      <item row="6" column="1">
-       <widget class="QLineEdit" name="nearestChannel">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="0">
-       <widget class="QLabel" name="actualCodecLabel">
-        <property name="text">
-         <string>Codecs</string>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="1">
-       <widget class="QLabel" name="nearestCodecLabel">
-        <property name="text">
-         <string>Codec</string>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="0">
-       <widget class="QComboBox" name="codecsBox"/>
-      </item>
-      <item row="8" column="1">
-       <widget class="QLineEdit" name="nearestCodec">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="9" column="0">
-       <widget class="QLabel" name="actualSampleSizeLabel">
-        <property name="text">
-         <string>SampleSize</string>
-        </property>
-       </widget>
-      </item>
-      <item row="9" column="1">
-       <widget class="QLabel" name="nearestSampleSizeLabel">
-        <property name="text">
-         <string>SampleSize</string>
-        </property>
-       </widget>
-      </item>
-      <item row="10" column="0">
-       <widget class="QComboBox" name="sampleSizesBox"/>
-      </item>
-      <item row="10" column="1">
-       <widget class="QLineEdit" name="nearestSampleSize">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="11" column="0">
-       <widget class="QLabel" name="actualSampleTypeLabel">
-        <property name="text">
-         <string>SampleType</string>
-        </property>
-       </widget>
-      </item>
-      <item row="11" column="1">
-       <widget class="QLabel" name="nearestSampleTypeLabel">
-        <property name="text">
-         <string>SampleType</string>
-        </property>
-       </widget>
-      </item>
-      <item row="12" column="0">
-       <widget class="QComboBox" name="sampleTypesBox"/>
-      </item>
-      <item row="12" column="1">
-       <widget class="QLineEdit" name="nearestSampleType">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="13" column="0">
-       <widget class="QLabel" name="actualEndianLabel">
-        <property name="text">
-         <string>Endianess</string>
-        </property>
-       </widget>
-      </item>
-      <item row="13" column="1">
-       <widget class="QLabel" name="nearestEndianLabel">
-        <property name="text">
-         <string>Endianess</string>
-        </property>
-       </widget>
-      </item>
-      <item row="14" column="0">
-       <widget class="QComboBox" name="endianBox"/>
-      </item>
-      <item row="14" column="1">
-       <widget class="QLineEdit" name="nearestEndian">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="15" column="0" colspan="2">
-       <widget class="QTextEdit" name="logOutput">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>0</width>
-          <height>40</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item row="16" column="0" colspan="2">
-       <widget class="QPushButton" name="testButton">
-        <property name="text">
-         <string>Test</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
+       </layout>
+      </widget>
+     </widget>
     </item>
    </layout>
Index: /trunk/examples/multimedia/audiodevices/main.cpp
===================================================================
--- /trunk/examples/multimedia/audiodevices/main.cpp	(revision 768)
+++ /trunk/examples/multimedia/audiodevices/main.cpp	(revision 769)
@@ -50,5 +50,9 @@
 
     AudioTest audio;
+#ifdef Q_OS_SYMBIAN
+    audio.showMaximized();
+#else
     audio.show();
+#endif
 
     return app.exec();
Index: /trunk/examples/multimedia/audioinput/audioinput.cpp
===================================================================
--- /trunk/examples/multimedia/audioinput/audioinput.cpp	(revision 768)
+++ /trunk/examples/multimedia/audioinput/audioinput.cpp	(revision 769)
@@ -49,14 +49,47 @@
 #include <QAudioDeviceInfo>
 #include <QAudioInput>
+
+#include <QtCore/qendian.h>
+
 #include "audioinput.h"
 
-#define BUFFER_SIZE 4096
-
-AudioInfo::AudioInfo(QObject *parent, QAudioInput *device)
-    :QIODevice(parent)
-{
-    input = device;
-
-    m_maxValue = 0;
+const QString InputTest::PushModeLabel(tr("Enable push mode"));
+const QString InputTest::PullModeLabel(tr("Enable pull mode"));
+const QString InputTest::SuspendLabel(tr("Suspend recording"));
+const QString InputTest::ResumeLabel(tr("Resume recording"));
+
+const int BufferSize = 4096;
+
+AudioInfo::AudioInfo(const QAudioFormat &format, QObject *parent)
+    :   QIODevice(parent)
+    ,   m_format(format)
+    ,   m_maxAmplitude(0)
+    ,   m_level(0.0)
+
+{
+    switch (m_format.sampleSize()) {
+    case 8:
+        switch (m_format.sampleType()) {
+        case QAudioFormat::UnSignedInt:
+            m_maxAmplitude = 255;
+            break;
+        case QAudioFormat::SignedInt:
+            m_maxAmplitude = 127;
+            break;
+        default: ;
+        }
+        break;
+    case 16:
+        switch (m_format.sampleType()) {
+        case QAudioFormat::UnSignedInt:
+            m_maxAmplitude = 65535;
+            break;
+        case QAudioFormat::SignedInt:
+            m_maxAmplitude = 32767;
+            break;
+        default: ;
+        }
+        break;
+    }
 }
 
@@ -85,37 +118,45 @@
 qint64 AudioInfo::writeData(const char *data, qint64 len)
 {
-    int samples = len/2; // 2 bytes per sample
-    int maxAmp = 32768; // max for S16 samples
-    bool clipping = false;
-
-    m_maxValue = 0;
-
-    qint16 *s = (qint16*)data;
-
-    // sample format is S16LE, only!
-
-    for (int i = 0; i < samples; ++i) {
-        qint16 sample = *s;
-        s++;
-        if (abs(sample) > m_maxValue) m_maxValue = abs(sample);
-    }
-    // check for clipping
-    if (m_maxValue >= (maxAmp - 1))
-        clipping = true;
-
-    float value = ((float)m_maxValue/(float)maxAmp);
-    if (clipping)
-        m_maxValue = 100;
-    else
-        m_maxValue = (int)(value*100);
+    if (m_maxAmplitude) {
+        Q_ASSERT(m_format.sampleSize() % 8 == 0);
+        const int channelBytes = m_format.sampleSize() / 8;
+        const int sampleBytes = m_format.channels() * channelBytes;
+        Q_ASSERT(len % sampleBytes == 0);
+        const int numSamples = len / sampleBytes;
+
+        quint16 maxValue = 0;
+        const unsigned char *ptr = reinterpret_cast<const unsigned char *>(data);
+
+        for (int i = 0; i < numSamples; ++i) {
+            for(int j = 0; j < m_format.channels(); ++j) {
+                quint16 value = 0;
+
+                if (m_format.sampleSize() == 8 && m_format.sampleType() == QAudioFormat::UnSignedInt) {
+                    value = *reinterpret_cast<const quint8*>(ptr);
+                } else if (m_format.sampleSize() == 8 && m_format.sampleType() == QAudioFormat::SignedInt) {
+                    value = qAbs(*reinterpret_cast<const qint8*>(ptr));
+                } else if (m_format.sampleSize() == 16 && m_format.sampleType() == QAudioFormat::UnSignedInt) {
+                    if (m_format.byteOrder() == QAudioFormat::LittleEndian)
+                        value = qFromLittleEndian<quint16>(ptr);
+                    else
+                        value = qFromBigEndian<quint16>(ptr);
+                } else if (m_format.sampleSize() == 16 && m_format.sampleType() == QAudioFormat::SignedInt) {
+                    if (m_format.byteOrder() == QAudioFormat::LittleEndian)
+                        value = qAbs(qFromLittleEndian<qint16>(ptr));
+                    else
+                        value = qAbs(qFromBigEndian<qint16>(ptr));
+                }
+
+                maxValue = qMax(value, maxValue);
+                ptr += channelBytes;
+            }
+        }
+
+        maxValue = qMin(maxValue, m_maxAmplitude);
+        m_level = qreal(maxValue) / m_maxAmplitude;
+    }
 
     emit update();
-
     return len;
-}
-
-int AudioInfo::LinearMax()
-{
-    return m_maxValue;
 }
 
@@ -126,5 +167,5 @@
     setAutoFillBackground(true);
 
-    level = 0;
+    m_level = 0;
     setMinimumHeight(30);
     setMinimumWidth(200);
@@ -140,10 +181,10 @@
                            painter.viewport().right()-20,
                            painter.viewport().bottom()-20));
-    if (level == 0)
+    if (m_level == 0.0)
         return;
 
     painter.setPen(Qt::red);
 
-    int pos = ((painter.viewport().right()-20)-(painter.viewport().left()+11))*level/100;
+    int pos = ((painter.viewport().right()-20)-(painter.viewport().left()+11))*m_level;
     for (int i = 0; i < 10; ++i) {
         int x1 = painter.viewport().left()+11;
@@ -158,7 +199,7 @@
 }
 
-void RenderArea::setLevel(int value)
-{
-    level = value;
+void RenderArea::setLevel(qreal value)
+{
+    m_level = value;
     repaint();
 }
@@ -166,84 +207,104 @@
 
 InputTest::InputTest()
-{
-    QWidget *window = new QWidget;
-    QVBoxLayout* layout = new QVBoxLayout;
-
-    canvas = new RenderArea;
-    layout->addWidget(canvas);
-
-    deviceBox = new QComboBox(this);
+    :   m_canvas(0)
+    ,   m_modeButton(0)
+    ,   m_suspendResumeButton(0)
+    ,   m_deviceBox(0)
+    ,   m_device(QAudioDeviceInfo::defaultInputDevice())
+    ,   m_audioInfo(0)
+    ,   m_audioInput(0)
+    ,   m_input(0)
+    ,   m_pullMode(false)
+    ,   m_buffer(BufferSize, 0)
+{
+    initializeWindow();
+    initializeAudio();
+}
+
+InputTest::~InputTest() {}
+
+void InputTest::initializeWindow()
+{
+    QScopedPointer<QWidget> window(new QWidget);
+    QScopedPointer<QVBoxLayout> layout(new QVBoxLayout);
+
+    m_canvas = new RenderArea(this);
+    layout->addWidget(m_canvas);
+
+    m_deviceBox = new QComboBox(this);
     QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
     for(int i = 0; i < devices.size(); ++i)
-        deviceBox->addItem(devices.at(i).deviceName(), qVariantFromValue(devices.at(i)));
-
-    connect(deviceBox, SIGNAL(activated(int)), SLOT(deviceChanged(int)));
-    layout->addWidget(deviceBox);
-
-    button = new QPushButton(this);
-    button->setText(tr("Click for Push Mode"));
-    connect(button, SIGNAL(clicked()), SLOT(toggleMode()));
-    layout->addWidget(button);
-
-    button2 = new QPushButton(this);
-    button2->setText(tr("Click To Suspend"));
-    connect(button2, SIGNAL(clicked()), SLOT(toggleSuspend()));
-    layout->addWidget(button2);
-
-    window->setLayout(layout);
-    setCentralWidget(window);
-    window->show();
-
-    buffer = new char[BUFFER_SIZE];
-
-    pullMode = true;
-
-    format.setFrequency(8000);
-    format.setChannels(1);
-    format.setSampleSize(16);
-    format.setSampleType(QAudioFormat::SignedInt);
-    format.setByteOrder(QAudioFormat::LittleEndian);
-    format.setCodec("audio/pcm");
+        m_deviceBox->addItem(devices.at(i).deviceName(), qVariantFromValue(devices.at(i)));
+
+    connect(m_deviceBox, SIGNAL(activated(int)), SLOT(deviceChanged(int)));
+    layout->addWidget(m_deviceBox);
+
+    m_modeButton = new QPushButton(this);
+    m_modeButton->setText(PushModeLabel);
+    connect(m_modeButton, SIGNAL(clicked()), SLOT(toggleMode()));
+    layout->addWidget(m_modeButton);
+
+    m_suspendResumeButton = new QPushButton(this);
+    m_suspendResumeButton->setText(SuspendLabel);
+    connect(m_suspendResumeButton, SIGNAL(clicked()), SLOT(toggleSuspend()));
+    layout->addWidget(m_suspendResumeButton);
+
+    window->setLayout(layout.data());
+    layout.take(); // ownership transferred
+
+    setCentralWidget(window.data());
+    QWidget *const windowPtr = window.take(); // ownership transferred
+    windowPtr->show();
+}
+
+void InputTest::initializeAudio()
+{
+    m_pullMode = true;
+
+    m_format.setFrequency(8000);
+    m_format.setChannels(1);
+    m_format.setSampleSize(16);
+    m_format.setSampleType(QAudioFormat::SignedInt);
+    m_format.setByteOrder(QAudioFormat::LittleEndian);
+    m_format.setCodec("audio/pcm");
 
     QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
-    if (!info.isFormatSupported(format)) {
-        qWarning()<<"default format not supported try to use nearest";
-        format = info.nearestFormat(format);
-    }
-
-    if(format.sampleSize() != 16) {
-        qWarning()<<"audio device doesn't support 16 bit samples, example cannot run";
-        audioInput = 0;
-        button->setDisabled(true);
-        button2->setDisabled(true);
+    if (!info.isFormatSupported(m_format)) {
+        qWarning() << "Default format not supported - trying to use nearest";
+        m_format = info.nearestFormat(m_format);
+    }
+
+    m_audioInfo  = new AudioInfo(m_format, this);
+    connect(m_audioInfo, SIGNAL(update()), SLOT(refreshDisplay()));
+
+    createAudioInput();
+}
+
+void InputTest::createAudioInput()
+{
+    m_audioInput = new QAudioInput(m_device, m_format, this);
+    connect(m_audioInput, SIGNAL(notify()), SLOT(notified()));
+    connect(m_audioInput, SIGNAL(stateChanged(QAudio::State)), SLOT(stateChanged(QAudio::State)));
+    m_audioInfo->start();
+    m_audioInput->start(m_audioInfo);
+}
+
+void InputTest::notified()
+{
+    qWarning() << "bytesReady = " << m_audioInput->bytesReady()
+               << ", " << "elapsedUSecs = " <<m_audioInput->elapsedUSecs()
+               << ", " << "processedUSecs = "<<m_audioInput->processedUSecs();
+}
+
+void InputTest::readMore()
+{
+    if(!m_audioInput)
         return;
-    }
-
-    audioInput = new QAudioInput(format,this);
-    connect(audioInput, SIGNAL(notify()), SLOT(status()));
-    connect(audioInput, SIGNAL(stateChanged(QAudio::State)), SLOT(state(QAudio::State)));
-    audioinfo  = new AudioInfo(this,audioInput);
-    connect(audioinfo, SIGNAL(update()), SLOT(refreshDisplay()));
-    audioinfo->start();
-    audioInput->start(audioinfo);
-}
-
-InputTest::~InputTest() {}
-
-void InputTest::status()
-{
-    qWarning()<<"bytesReady = "<<audioInput->bytesReady()<<" bytes, elapsedUSecs = "<<audioInput->elapsedUSecs()<<", processedUSecs = "<<audioInput->processedUSecs();
-}
-
-void InputTest::readMore()
-{
-    if(!audioInput)
-        return;
-    qint64 len = audioInput->bytesReady();
+    qint64 len = m_audioInput->bytesReady();
     if(len > 4096)
         len = 4096;
-    qint64 l = input->read(buffer,len);
+    qint64 l = m_input->read(m_buffer.data(), len);
     if(l > 0) {
-        audioinfo->write(buffer,l);
+        m_audioInfo->write(m_buffer.constData(), l);
     }
 }
@@ -252,16 +313,18 @@
 {
     // Change bewteen pull and push modes
-    audioInput->stop();
-
-    if (pullMode) {
-        button->setText(tr("Click for Pull Mode"));
-        input = audioInput->start();
-        connect(input, SIGNAL(readyRead()), SLOT(readMore()));
-        pullMode = false;
+    m_audioInput->stop();
+
+    if (m_pullMode) {
+        m_modeButton->setText(PullModeLabel);
+        m_input = m_audioInput->start();
+        connect(m_input, SIGNAL(readyRead()), SLOT(readMore()));
+        m_pullMode = false;
     } else {
-        button->setText(tr("Click for Push Mode"));
-        pullMode = true;
-        audioInput->start(audioinfo);
-    }
+        m_modeButton->setText(PushModeLabel);
+        m_pullMode = true;
+        m_audioInput->start(m_audioInfo);
+    }
+
+    m_suspendResumeButton->setText(SuspendLabel);
 }
 
@@ -269,44 +332,40 @@
 {
     // toggle suspend/resume
-    if(audioInput->state() == QAudio::SuspendedState) {
+    if(m_audioInput->state() == QAudio::SuspendedState) {
         qWarning() << "status: Suspended, resume()";
-        audioInput->resume();
-        button2->setText("Click To Suspend");
-    } else if (audioInput->state() == QAudio::ActiveState) {
+        m_audioInput->resume();
+        m_suspendResumeButton->setText(SuspendLabel);
+    } else if (m_audioInput->state() == QAudio::ActiveState) {
         qWarning() << "status: Active, suspend()";
-        audioInput->suspend();
-        button2->setText("Click To Resume");
-    } else if (audioInput->state() == QAudio::StoppedState) {
+        m_audioInput->suspend();
+        m_suspendResumeButton->setText(ResumeLabel);
+    } else if (m_audioInput->state() == QAudio::StoppedState) {
         qWarning() << "status: Stopped, resume()";
-        audioInput->resume();
-        button2->setText("Click To Suspend");
-    } else if (audioInput->state() == QAudio::IdleState) {
+        m_audioInput->resume();
+        m_suspendResumeButton->setText(SuspendLabel);
+    } else if (m_audioInput->state() == QAudio::IdleState) {
         qWarning() << "status: IdleState";
     }
 }
 
-void InputTest::state(QAudio::State state)
-{
-    qWarning() << " state=" << state;
+void InputTest::stateChanged(QAudio::State state)
+{
+    qWarning() << "state = " << state;
 }
 
 void InputTest::refreshDisplay()
 {
-    canvas->setLevel(audioinfo->LinearMax());
-    canvas->repaint();
-}
-
-void InputTest::deviceChanged(int idx)
-{
-    audioinfo->stop();
-    audioInput->stop();
-    audioInput->disconnect(this);
-    delete audioInput;
-
-    device = deviceBox->itemData(idx).value<QAudioDeviceInfo>();
-    audioInput = new QAudioInput(device, format, this);
-    connect(audioInput, SIGNAL(notify()), SLOT(status()));
-    connect(audioInput, SIGNAL(stateChanged(QAudio::State)), SLOT(state(QAudio::State)));
-    audioinfo->start();
-    audioInput->start(audioinfo);
-}
+    m_canvas->setLevel(m_audioInfo->level());
+    m_canvas->repaint();
+}
+
+void InputTest::deviceChanged(int index)
+{
+    m_audioInfo->stop();
+    m_audioInput->stop();
+    m_audioInput->disconnect(this);
+    delete m_audioInput;
+
+    m_device = m_deviceBox->itemData(index).value<QAudioDeviceInfo>();
+    createAudioInput();
+}
Index: /trunk/examples/multimedia/audioinput/audioinput.h
===================================================================
--- /trunk/examples/multimedia/audioinput/audioinput.h	(revision 768)
+++ /trunk/examples/multimedia/audioinput/audioinput.h	(revision 769)
@@ -46,4 +46,5 @@
 #include <QPushButton>
 #include <QComboBox>
+#include <QByteArray>
 
 #include <qaudioinput.h>
@@ -53,5 +54,5 @@
     Q_OBJECT
 public:
-    AudioInfo(QObject *parent, QAudioInput *device);
+    AudioInfo(const QAudioFormat &format, QObject *parent);
     ~AudioInfo();
 
@@ -59,13 +60,13 @@
     void stop();
 
-    int LinearMax();
+    qreal level() const { return m_level; }
 
     qint64 readData(char *data, qint64 maxlen);
     qint64 writeData(const char *data, qint64 len);
 
-    QAudioInput *input;
-
 private:
-    int m_maxValue;
+    const QAudioFormat m_format;
+    quint16 m_maxAmplitude;
+    qreal m_level; // 0.0 <= m_level <= 1.0
 
 signals:
@@ -81,5 +82,5 @@
     RenderArea(QWidget *parent = 0);
 
-    void setLevel(int value);
+    void setLevel(qreal value);
 
 protected:
@@ -87,6 +88,6 @@
 
 private:
-    int level;
-    QPixmap pixmap;
+    qreal m_level;
+    QPixmap m_pixmap;
 };
 
@@ -98,28 +99,37 @@
     ~InputTest();
 
+private:
+    void initializeWindow();
+    void initializeAudio();
+    void createAudioInput();
+
 private slots:
     void refreshDisplay();
-    void status();
+    void notified();
     void readMore();
     void toggleMode();
     void toggleSuspend();
-    void state(QAudio::State s);
-    void deviceChanged(int idx);
+    void stateChanged(QAudio::State state);
+    void deviceChanged(int index);
 
 private:
-    AudioInfo *audioinfo;
-    QAudioDeviceInfo device;
-    QAudioFormat format;
-    QAudioInput *audioInput;
-    QIODevice *input;
-    RenderArea *canvas;
+    // Owned by layout
+    RenderArea *m_canvas;
+    QPushButton *m_modeButton;
+    QPushButton *m_suspendResumeButton;
+    QComboBox *m_deviceBox;
 
-    bool pullMode;
+    QAudioDeviceInfo m_device;
+    AudioInfo *m_audioInfo;
+    QAudioFormat m_format;
+    QAudioInput *m_audioInput;
+    QIODevice *m_input;
+    bool m_pullMode;
+    QByteArray m_buffer;
 
-    QPushButton *button;
-    QPushButton *button2;
-    QComboBox *deviceBox;
-
-    char *buffer;
+    static const QString PushModeLabel;
+    static const QString PullModeLabel;
+    static const QString SuspendLabel;
+    static const QString ResumeLabel;
 };
 
Index: /trunk/examples/multimedia/audioinput/audioinput.pro
===================================================================
--- /trunk/examples/multimedia/audioinput/audioinput.pro	(revision 768)
+++ /trunk/examples/multimedia/audioinput/audioinput.pro	(revision 769)
@@ -13,4 +13,5 @@
 symbian {
     TARGET.UID3 = 0xA000D7BF
+    TARGET.CAPABILITY += UserEnvironment
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
 }
Index: /trunk/examples/multimedia/audiooutput/audiooutput.cpp
===================================================================
--- /trunk/examples/multimedia/audiooutput/audiooutput.cpp	(revision 768)
+++ /trunk/examples/multimedia/audiooutput/audiooutput.cpp	(revision 769)
@@ -45,28 +45,32 @@
 #include <QAudioOutput>
 #include <QAudioDeviceInfo>
+#include <QtCore/qmath.h>
+#include <QtCore/qendian.h>
 #include "audiooutput.h"
 
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define SECONDS     1
-#define FREQ        600
-#define SYSTEM_FREQ 44100
-
-Generator::Generator(QObject *parent)
-    :QIODevice( parent )
-{
-    finished = false;
-    buffer = new char[SECONDS*SYSTEM_FREQ*4+1000];
-    t=buffer;
-    len=fillData(t,FREQ,SECONDS); /* mono FREQHz sine */
-    pos   = 0;
-    total = len;
+const QString AudioTest::PushModeLabel(tr("Enable push mode"));
+const QString AudioTest::PullModeLabel(tr("Enable pull mode"));
+const QString AudioTest::SuspendLabel(tr("Suspend playback"));
+const QString AudioTest::ResumeLabel(tr("Resume playback"));
+
+const int DurationSeconds = 1;
+const int ToneFrequencyHz = 600;
+const int DataFrequencyHz = 44100;
+const int BufferSize      = 32768;
+
+
+Generator::Generator(const QAudioFormat &format,
+                     qint64 durationUs,
+                     int frequency,
+                     QObject *parent)
+    :   QIODevice(parent)
+    ,   m_pos(0)
+{
+    generateData(format, durationUs, frequency);
 }
 
 Generator::~Generator()
 {
-    delete [] buffer;
+
 }
 
@@ -78,45 +82,63 @@
 void Generator::stop()
 {
+    m_pos = 0;
     close();
 }
 
-int Generator::putShort(char *t, unsigned int value)
-{
-    *(unsigned char *)(t++)=value&255;
-    *(unsigned char *)(t)=(value/256)&255;
-    return 2;
-}
-
-int Generator::fillData(char *start, int frequency, int seconds)
-{
-    int i, len=0;
-    int value;
-    for(i=0; i<seconds*SYSTEM_FREQ; i++) {
-        value=(int)(32767.0*sin(2.0*M_PI*((double)(i))*(double)(frequency)/SYSTEM_FREQ));
-        putShort(start, value);
-        start += 4;
-        len+=2;
-    }
-    return len;
-}
-
-qint64 Generator::readData(char *data, qint64 maxlen)
-{
-    int len = maxlen;
-    if (len > 16384)
-        len = 16384;
-
-    if (len < (SECONDS*SYSTEM_FREQ*2)-pos) {
-        // Normal
-        memcpy(data,t+pos,len);
-        pos+=len;
-        return len;
-    } else {
-        // Whats left and reset to start
-        qint64 left = (SECONDS*SYSTEM_FREQ*2)-pos;
-        memcpy(data,t+pos,left);
-        pos=0;
-        return left;
-    }
+void Generator::generateData(const QAudioFormat &format, qint64 durationUs, int frequency)
+{
+    const int channelBytes = format.sampleSize() / 8;
+    const int sampleBytes = format.channels() * channelBytes;
+
+    qint64 length = (format.frequency() * format.channels() * (format.sampleSize() / 8))
+                        * durationUs / 100000;
+
+    Q_ASSERT(length % sampleBytes == 0);
+    Q_UNUSED(sampleBytes) // suppress warning in release builds
+
+    m_buffer.resize(length);
+    unsigned char *ptr = reinterpret_cast<unsigned char *>(m_buffer.data());
+    int sampleIndex = 0;
+
+    while (length) {
+        const qreal x = qSin(2 * M_PI * frequency * qreal(sampleIndex % format.frequency()) / format.frequency());
+        for (int i=0; i<format.channels(); ++i) {
+            if (format.sampleSize() == 8 && format.sampleType() == QAudioFormat::UnSignedInt) {
+                const quint8 value = static_cast<quint8>((1.0 + x) / 2 * 255);
+                *reinterpret_cast<quint8*>(ptr) = value;
+            } else if (format.sampleSize() == 8 && format.sampleType() == QAudioFormat::SignedInt) {
+                const qint8 value = static_cast<qint8>(x * 127);
+                *reinterpret_cast<quint8*>(ptr) = value;
+            } else if (format.sampleSize() == 16 && format.sampleType() == QAudioFormat::UnSignedInt) {
+                quint16 value = static_cast<quint16>((1.0 + x) / 2 * 65535);
+                if (format.byteOrder() == QAudioFormat::LittleEndian)
+                    qToLittleEndian<quint16>(value, ptr);
+                else
+                    qToBigEndian<quint16>(value, ptr);
+            } else if (format.sampleSize() == 16 && format.sampleType() == QAudioFormat::SignedInt) {
+                qint16 value = static_cast<qint16>(x * 32767);
+                if (format.byteOrder() == QAudioFormat::LittleEndian)
+                    qToLittleEndian<qint16>(value, ptr);
+                else
+                    qToBigEndian<qint16>(value, ptr);
+            }
+
+            ptr += channelBytes;
+            length -= channelBytes;
+        }
+        ++sampleIndex;
+    }
+}
+
+qint64 Generator::readData(char *data, qint64 len)
+{
+    qint64 total = 0;
+    while (len - total) {
+        const qint64 chunk = qMin((m_buffer.size() - m_pos), len - total);
+        memcpy(data, m_buffer.constData() + m_pos, chunk);
+        m_pos = (m_pos + chunk) % m_buffer.size();
+        total += chunk;
+    }
+    return total;
 }
 
@@ -129,157 +151,165 @@
 }
 
+qint64 Generator::bytesAvailable() const
+{
+    return m_buffer.size() + QIODevice::bytesAvailable();
+}
+
 AudioTest::AudioTest()
-{
-    QWidget *window = new QWidget;
-    QVBoxLayout* layout = new QVBoxLayout;
-
-    deviceBox = new QComboBox(this);
+    :   m_pullTimer(new QTimer(this))
+    ,   m_modeButton(0)
+    ,   m_suspendResumeButton(0)
+    ,   m_deviceBox(0)
+    ,   m_device(QAudioDeviceInfo::defaultOutputDevice())
+    ,   m_generator(0)
+    ,   m_audioOutput(0)
+    ,   m_output(0)
+    ,   m_buffer(BufferSize, 0)
+{
+    initializeWindow();
+    initializeAudio();
+}
+
+void AudioTest::initializeWindow()
+{
+    QScopedPointer<QWidget> window(new QWidget);
+    QScopedPointer<QVBoxLayout> layout(new QVBoxLayout);
+
+    m_deviceBox = new QComboBox(this);
     foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
-        deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
-    connect(deviceBox,SIGNAL(activated(int)),SLOT(deviceChanged(int)));
-    layout->addWidget(deviceBox);
-
-    button = new QPushButton(this);
-    button->setText(tr("Click for Push Mode"));
-    connect(button,SIGNAL(clicked()),SLOT(toggle()));
-    layout->addWidget(button);
-
-    button2 = new QPushButton(this);
-    button2->setText(tr("Click To Suspend"));
-    connect(button2,SIGNAL(clicked()),SLOT(togglePlay()));
-    layout->addWidget(button2);
-
-    window->setLayout(layout);
-    setCentralWidget(window);
-    window->show();
-
-    buffer = new char[BUFFER_SIZE];
-
-    gen = new Generator(this);
-
-    pullMode = true;
-
-    timer = new QTimer(this);
-    connect(timer,SIGNAL(timeout()),SLOT(writeMore()));
-
-    gen->start();
-
-    settings.setFrequency(SYSTEM_FREQ);
-    settings.setChannels(1);
-    settings.setSampleSize(16);
-    settings.setCodec("audio/pcm");
-    settings.setByteOrder(QAudioFormat::LittleEndian);
-    settings.setSampleType(QAudioFormat::SignedInt);
+        m_deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
+    connect(m_deviceBox,SIGNAL(activated(int)),SLOT(deviceChanged(int)));
+    layout->addWidget(m_deviceBox);
+
+    m_modeButton = new QPushButton(this);
+    m_modeButton->setText(PushModeLabel);
+    connect(m_modeButton, SIGNAL(clicked()), SLOT(toggleMode()));
+    layout->addWidget(m_modeButton);
+
+    m_suspendResumeButton = new QPushButton(this);
+    m_suspendResumeButton->setText(SuspendLabel);
+    connect(m_suspendResumeButton, SIGNAL(clicked()), SLOT(toggleSuspendResume()));
+    layout->addWidget(m_suspendResumeButton);
+
+    window->setLayout(layout.data());
+    layout.take(); // ownership transferred
+
+    setCentralWidget(window.data());
+    QWidget *const windowPtr = window.take(); // ownership transferred
+    windowPtr->show();
+}
+
+void AudioTest::initializeAudio()
+{
+    connect(m_pullTimer, SIGNAL(timeout()), SLOT(pullTimerExpired()));
+
+    m_pullMode = true;
+
+    m_format.setFrequency(DataFrequencyHz);
+    m_format.setChannels(1);
+    m_format.setSampleSize(16);
+    m_format.setCodec("audio/pcm");
+    m_format.setByteOrder(QAudioFormat::LittleEndian);
+    m_format.setSampleType(QAudioFormat::SignedInt);
 
     QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
-    if (!info.isFormatSupported(settings)) {
-        qWarning()<<"default format not supported try to use nearest";
-        settings = info.nearestFormat(settings);
-    }
-
-    if(settings.sampleSize() != 16) {
-        qWarning()<<"audio device doesn't support 16 bit samples, example cannot run";
-        button->setDisabled(true);
-        button2->setDisabled(true);
-        audioOutput = 0;
-        return;
-    }
-
-    audioOutput = new QAudioOutput(settings,this);
-    connect(audioOutput,SIGNAL(notify()),SLOT(status()));
-    connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),SLOT(state(QAudio::State)));
-
-    audioOutput->start(gen);
+    if (!info.isFormatSupported(m_format)) {
+        qWarning() << "Default format not supported - trying to use nearest";
+        m_format = info.nearestFormat(m_format);
+    }
+
+    m_generator = new Generator(m_format, DurationSeconds*1000000, ToneFrequencyHz, this);
+
+    createAudioOutput();
+}
+
+void AudioTest::createAudioOutput()
+{
+    delete m_audioOutput;
+    m_audioOutput = 0;
+    m_audioOutput = new QAudioOutput(m_device, m_format, this);
+    connect(m_audioOutput, SIGNAL(notify()), SLOT(notified()));
+    connect(m_audioOutput, SIGNAL(stateChanged(QAudio::State)), SLOT(stateChanged(QAudio::State)));
+    m_generator->start();
+    m_audioOutput->start(m_generator);
 }
 
 AudioTest::~AudioTest()
 {
-    delete [] buffer;
-}
-
-void AudioTest::deviceChanged(int idx)
-{
-    timer->stop();
-    gen->stop();
-    audioOutput->stop();
-    audioOutput->disconnect(this);
-    delete audioOutput;
-
-    device = deviceBox->itemData(idx).value<QAudioDeviceInfo>();
-    audioOutput = new QAudioOutput(device,settings,this);
-    connect(audioOutput,SIGNAL(notify()),SLOT(status()));
-    connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),SLOT(state(QAudio::State)));
-    gen->start();
-    audioOutput->start(gen);
-}
-
-void AudioTest::status()
-{
-    qWarning() << "byteFree = " << audioOutput->bytesFree() << " bytes, elapsedUSecs = " << audioOutput->elapsedUSecs() << ", processedUSecs = " << audioOutput->processedUSecs();
-}
-
-void AudioTest::writeMore()
-{
-    if (!audioOutput)
-        return;
-
-    if (audioOutput->state() == QAudio::StoppedState)
-        return;
-
-    int    l;
-    int    out;
-
-    int chunks = audioOutput->bytesFree()/audioOutput->periodSize();
-    while(chunks) {
-       l = gen->read(buffer,audioOutput->periodSize());
-       if (l > 0)
-           out = output->write(buffer,l);
-       if (l != audioOutput->periodSize())
-	   break;
-       chunks--;
-    }
-}
-
-void AudioTest::toggle()
-{
-    // Change between pull and push modes
-
-    timer->stop();
-    audioOutput->stop();
-
-    if (pullMode) {
-        button->setText("Click for Pull Mode");
-        output = audioOutput->start();
-        pullMode = false;
-        timer->start(20);
+
+}
+
+void AudioTest::deviceChanged(int index)
+{
+    m_pullTimer->stop();
+    m_generator->stop();
+    m_audioOutput->stop();
+    m_audioOutput->disconnect(this);
+    m_device = m_deviceBox->itemData(index).value<QAudioDeviceInfo>();
+    createAudioOutput();
+}
+
+void AudioTest::notified()
+{
+    qWarning() << "bytesFree = " << m_audioOutput->bytesFree()
+               << ", " << "elapsedUSecs = " << m_audioOutput->elapsedUSecs()
+               << ", " << "processedUSecs = " << m_audioOutput->processedUSecs();
+}
+
+void AudioTest::pullTimerExpired()
+{
+    if (m_audioOutput && m_audioOutput->state() != QAudio::StoppedState) {
+        int chunks = m_audioOutput->bytesFree()/m_audioOutput->periodSize();
+        while (chunks) {
+           const qint64 len = m_generator->read(m_buffer.data(), m_audioOutput->periodSize());
+           if (len)
+               m_output->write(m_buffer.data(), len);
+           if (len != m_audioOutput->periodSize())
+               break;
+           --chunks;
+        }
+    }
+}
+
+void AudioTest::toggleMode()
+{
+    m_pullTimer->stop();
+    m_audioOutput->stop();
+
+    if (m_pullMode) {
+        m_modeButton->setText(PullModeLabel);
+        m_output = m_audioOutput->start();
+        m_pullMode = false;
+        m_pullTimer->start(20);
     } else {
-        button->setText("Click for Push Mode");
-        pullMode = true;
-        audioOutput->start(gen);
-    }
-}
-
-void AudioTest::togglePlay()
-{
-    // toggle suspend/resume
-    if (audioOutput->state() == QAudio::SuspendedState) {
+        m_modeButton->setText(PushModeLabel);
+        m_pullMode = true;
+        m_audioOutput->start(m_generator);
+    }
+
+    m_suspendResumeButton->setText(SuspendLabel);
+}
+
+void AudioTest::toggleSuspendResume()
+{
+    if (m_audioOutput->state() == QAudio::SuspendedState) {
         qWarning() << "status: Suspended, resume()";
-        audioOutput->resume();
-        button2->setText("Click To Suspend");
-    } else if (audioOutput->state() == QAudio::ActiveState) {
+        m_audioOutput->resume();
+        m_suspendResumeButton->setText(SuspendLabel);
+    } else if (m_audioOutput->state() == QAudio::ActiveState) {
         qWarning() << "status: Active, suspend()";
-        audioOutput->suspend();
-        button2->setText("Click To Resume");
-    } else if (audioOutput->state() == QAudio::StoppedState) {
+        m_audioOutput->suspend();
+        m_suspendResumeButton->setText(ResumeLabel);
+    } else if (m_audioOutput->state() == QAudio::StoppedState) {
         qWarning() << "status: Stopped, resume()";
-        audioOutput->resume();
-        button2->setText("Click To Suspend");
-    } else if (audioOutput->state() == QAudio::IdleState) {
+        m_audioOutput->resume();
+        m_suspendResumeButton->setText(SuspendLabel);
+    } else if (m_audioOutput->state() == QAudio::IdleState) {
         qWarning() << "status: IdleState";
     }
 }
 
-void AudioTest::state(QAudio::State state)
-{
-    qWarning() << " state=" << state;
-}
+void AudioTest::stateChanged(QAudio::State state)
+{
+    qWarning() << "state = " << state;
+}
Index: /trunk/examples/multimedia/audiooutput/audiooutput.h
===================================================================
--- /trunk/examples/multimedia/audiooutput/audiooutput.h	(revision 768)
+++ /trunk/examples/multimedia/audiooutput/audiooutput.h	(revision 769)
@@ -42,6 +42,4 @@
 #include <math.h>
 
-#define BUFFER_SIZE 32768
-
 #include <QObject>
 #include <QMainWindow>
@@ -50,4 +48,5 @@
 #include <QPushButton>
 #include <QComboBox>
+#include <QByteArray>
 
 #include <QAudioOutput>
@@ -57,5 +56,5 @@
     Q_OBJECT
 public:
-    Generator(QObject *parent);
+    Generator(const QAudioFormat &format, qint64 durationUs, int frequency, QObject *parent);
     ~Generator();
 
@@ -63,18 +62,14 @@
     void stop();
 
-    char *t;
-    int  len;
-    int  pos;
-    int  total;
-    char *buffer;
-    bool finished;
-    int  chunk_size;
-
     qint64 readData(char *data, qint64 maxlen);
     qint64 writeData(const char *data, qint64 len);
+    qint64 bytesAvailable() const;
 
 private:
-    int putShort(char *t, unsigned int value);
-    int fillData(char *start, int frequency, int seconds);
+    void generateData(const QAudioFormat &format, qint64 durationUs, int frequency);
+
+private:
+    qint64 m_pos;
+    QByteArray m_buffer;
 };
 
@@ -86,25 +81,38 @@
     ~AudioTest();
 
-    QAudioDeviceInfo  device;
-    Generator*        gen;
-    QAudioOutput*     audioOutput;
-    QIODevice*        output;
-    QTimer*           timer;
-    QAudioFormat      settings;
+private:
+    void initializeWindow();
+    void initializeAudio();
+    void createAudioOutput();
 
-    bool              pullMode;
-    char*             buffer;
+private:
+    QTimer*          m_pullTimer;
 
-    QPushButton*      button;
-    QPushButton*      button2;
-    QComboBox*     deviceBox;
+    // Owned by layout
+    QPushButton*     m_modeButton;
+    QPushButton*     m_suspendResumeButton;
+    QComboBox*       m_deviceBox;
+
+    QAudioDeviceInfo m_device;
+    Generator*       m_generator;
+    QAudioOutput*    m_audioOutput;
+    QIODevice*       m_output; // not owned
+    QAudioFormat     m_format;
+
+    bool             m_pullMode;
+    QByteArray       m_buffer;
+
+    static const QString PushModeLabel;
+    static const QString PullModeLabel;
+    static const QString SuspendLabel;
+    static const QString ResumeLabel;
 
 private slots:
-    void status();
-    void writeMore();
-    void toggle();
-    void togglePlay();
-    void state(QAudio::State s);
-    void deviceChanged(int idx);
+    void notified();
+    void pullTimerExpired();
+    void toggleMode();
+    void toggleSuspendResume();
+    void stateChanged(QAudio::State state);
+    void deviceChanged(int index);
 };
 
Index: /trunk/examples/network/fortuneclient/fortuneclient.pro
===================================================================
--- /trunk/examples/network/fortuneclient/fortuneclient.pro	(revision 768)
+++ /trunk/examples/network/fortuneclient/fortuneclient.pro	(revision 769)
@@ -13,5 +13,5 @@
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = "NetworkServices ReadUserData WriteUserData"
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
Index: /trunk/examples/network/fortuneserver/fortuneserver.pro
===================================================================
--- /trunk/examples/network/fortuneserver/fortuneserver.pro	(revision 768)
+++ /trunk/examples/network/fortuneserver/fortuneserver.pro	(revision 769)
@@ -14,5 +14,5 @@
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
     TARGET.CAPABILITY = "All -TCB"
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
Index: /trunk/examples/network/googlesuggest/googlesuggest.cpp
===================================================================
--- /trunk/examples/network/googlesuggest/googlesuggest.cpp	(revision 768)
+++ /trunk/examples/network/googlesuggest/googlesuggest.cpp	(revision 769)
@@ -233,2 +233,3 @@
 }
 //! [9]
+
Index: /trunk/examples/network/googlesuggest/searchbox.cpp
===================================================================
--- /trunk/examples/network/googlesuggest/searchbox.cpp	(revision 768)
+++ /trunk/examples/network/googlesuggest/searchbox.cpp	(revision 769)
@@ -71,2 +71,3 @@
 }
 //! [2]
+
Index: /trunk/examples/network/http/httpwindow.cpp
===================================================================
--- /trunk/examples/network/http/httpwindow.cpp	(revision 768)
+++ /trunk/examples/network/http/httpwindow.cpp	(revision 769)
@@ -50,7 +50,7 @@
 {
 #ifndef QT_NO_OPENSSL
-    urlLineEdit = new QLineEdit("https://");
+    urlLineEdit = new QLineEdit("https://qt.nokia.com/");
 #else
-    urlLineEdit = new QLineEdit("http://");
+    urlLineEdit = new QLineEdit("http://qt.nokia.com/");
 #endif
 
@@ -71,19 +71,12 @@
     progressDialog = new QProgressDialog(this);
 
-    http = new QHttp(this);
-
     connect(urlLineEdit, SIGNAL(textChanged(QString)),
             this, SLOT(enableDownloadButton()));
-    connect(http, SIGNAL(requestFinished(int,bool)),
-            this, SLOT(httpRequestFinished(int,bool)));
-    connect(http, SIGNAL(dataReadProgress(int,int)),
-            this, SLOT(updateDataReadProgress(int,int)));
-    connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)),
-            this, SLOT(readResponseHeader(QHttpResponseHeader)));
-    connect(http, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)),
-            this, SLOT(slotAuthenticationRequired(QString,quint16,QAuthenticator*)));
+
+    connect(&qnam, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
+            this, SLOT(slotAuthenticationRequired(QNetworkReply*,QAuthenticator*)));
 #ifndef QT_NO_OPENSSL
-    connect(http, SIGNAL(sslErrors(QList<QSslError>)),
-            this, SLOT(sslErrors(QList<QSslError>)));
+    connect(&qnam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
+            this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
 #endif
     connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
@@ -105,7 +98,19 @@
 }
 
+void HttpWindow::startRequest(QUrl url)
+{
+    reply = qnam.get(QNetworkRequest(url));
+    connect(reply, SIGNAL(finished()),
+            this, SLOT(httpFinished()));
+    connect(reply, SIGNAL(readyRead()),
+            this, SLOT(httpReadyRead()));
+    connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
+            this, SLOT(updateDataReadProgress(qint64,qint64)));
+}
+
 void HttpWindow::downloadFile()
 {
-    QUrl url(urlLineEdit->text());
+    url = urlLineEdit->text();
+
     QFileInfo fileInfo(url.path());
     QString fileName = fileInfo.fileName();
@@ -133,19 +138,12 @@
     }
 
-    QHttp::ConnectionMode mode = url.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp;
-    http->setHost(url.host(), mode, url.port() == -1 ? 0 : url.port());
-    
-    if (!url.userName().isEmpty())
-        http->setUser(url.userName(), url.password());
-
-    httpRequestAborted = false;
-    QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
-    if (path.isEmpty())
-        path = "/";
-    httpGetId = http->get(path, file);
 
     progressDialog->setWindowTitle(tr("HTTP"));
     progressDialog->setLabelText(tr("Downloading %1.").arg(fileName));
     downloadButton->setEnabled(false);
+
+    // schedule the request
+    httpRequestAborted = false;
+    startRequest(url);
 }
 
@@ -154,12 +152,10 @@
     statusLabel->setText(tr("Download canceled."));
     httpRequestAborted = true;
-    http->abort();
+    reply->abort();
     downloadButton->setEnabled(true);
 }
 
-void HttpWindow::httpRequestFinished(int requestId, bool error)
-{
-    if (requestId != httpGetId)
-        return;
+void HttpWindow::httpFinished()
+{
     if (httpRequestAborted) {
         if (file) {
@@ -169,52 +165,56 @@
             file = 0;
         }
-
+        reply->deleteLater();
         progressDialog->hide();
         return;
     }
 
-    if (requestId != httpGetId)
-        return;
-
     progressDialog->hide();
+    file->flush();
     file->close();
 
-    if (error) {
+
+    QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+    if (reply->error()) {
         file->remove();
         QMessageBox::information(this, tr("HTTP"),
                                  tr("Download failed: %1.")
-                                 .arg(http->errorString()));
+                                 .arg(reply->errorString()));
+        downloadButton->setEnabled(true);
+    } else if (!redirectionTarget.isNull()) {        
+        QUrl newUrl = url.resolved(redirectionTarget.toUrl());
+        if (QMessageBox::question(this, tr("HTTP"),
+                                  tr("Redirect to %1 ?").arg(newUrl.toString()),
+                                  QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+            url = newUrl;
+            reply->deleteLater();
+            file->open(QIODevice::WriteOnly);
+            file->resize(0);
+            startRequest(url);
+            return;
+        }
     } else {
         QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName();
         statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName));
-    }
-
-    downloadButton->setEnabled(true);
+        downloadButton->setEnabled(true);
+    }
+
+    reply->deleteLater();
+    reply = 0;
     delete file;
     file = 0;
 }
 
-void HttpWindow::readResponseHeader(const QHttpResponseHeader &responseHeader)
-{
-    switch (responseHeader.statusCode()) {
-    case 200:                   // Ok
-    case 301:                   // Moved Permanently
-    case 302:                   // Found
-    case 303:                   // See Other
-    case 307:                   // Temporary Redirect
-        // these are not error conditions
-        break;
-
-    default:
-        QMessageBox::information(this, tr("HTTP"),
-                                 tr("Download failed: %1.")
-                                 .arg(responseHeader.reasonPhrase()));
-        httpRequestAborted = true;
-        progressDialog->hide();
-        http->abort();
-    }
-}
-
-void HttpWindow::updateDataReadProgress(int bytesRead, int totalBytes)
+void HttpWindow::httpReadyRead()
+{
+    // this slot gets called everytime the QNetworkReply has new data.
+    // We read all of its new data and write it into the file.
+    // That way we use less RAM than when reading it at the finished()
+    // signal of the QNetworkReply
+    if (file)
+        file->write(reply->readAll());
+}
+
+void HttpWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
 {
     if (httpRequestAborted)
@@ -230,5 +230,5 @@
 }
 
-void HttpWindow::slotAuthenticationRequired(const QString &hostName, quint16, QAuthenticator *authenticator)
+void HttpWindow::slotAuthenticationRequired(QNetworkReply*,QAuthenticator *authenticator)
 {
     QDialog dlg;
@@ -236,6 +236,11 @@
     ui.setupUi(&dlg);
     dlg.adjustSize();
-    ui.siteDescription->setText(tr("%1 at %2").arg(authenticator->realm()).arg(hostName));
-    
+    ui.siteDescription->setText(tr("%1 at %2").arg(authenticator->realm()).arg(url.host()));
+
+    // Did the URL have information? Fill the UI
+    // This is only relevant if the URL-supplied credentials were wrong
+    ui.userEdit->setText(url.userName());
+    ui.passwordEdit->setText(url.password());
+
     if (dlg.exec() == QDialog::Accepted) {
         authenticator->setUser(ui.userEdit->text());
@@ -245,5 +250,5 @@
 
 #ifndef QT_NO_OPENSSL
-void HttpWindow::sslErrors(const QList<QSslError> &errors)
+void HttpWindow::sslErrors(QNetworkReply*,const QList<QSslError> &errors)
 {
     QString errorString;
@@ -254,8 +259,8 @@
     }
     
-    if (QMessageBox::warning(this, tr("HTTP Example"),
+    if (QMessageBox::warning(this, tr("HTTP"),
                              tr("One or more SSL errors has occurred: %1").arg(errorString),
                              QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) {
-        http->ignoreSslErrors();
+        reply->ignoreSslErrors();
     }
 }
Index: /trunk/examples/network/http/httpwindow.h
===================================================================
--- /trunk/examples/network/http/httpwindow.h	(revision 768)
+++ /trunk/examples/network/http/httpwindow.h	(revision 769)
@@ -44,10 +44,10 @@
 
 #include <QDialog>
+#include <QNetworkAccessManager>
+#include <QUrl>
 
 QT_BEGIN_NAMESPACE
 class QDialogButtonBox;
 class QFile;
-class QHttp;
-class QHttpResponseHeader;
 class QLabel;
 class QLineEdit;
@@ -56,4 +56,7 @@
 class QSslError;
 class QAuthenticator;
+class QNetworkReply;
+
+
 QT_END_NAMESPACE
 
@@ -65,14 +68,16 @@
     HttpWindow(QWidget *parent = 0);
 
+    void startRequest(QUrl url);
+
 private slots:
     void downloadFile();
     void cancelDownload();
-    void httpRequestFinished(int requestId, bool error);
-    void readResponseHeader(const QHttpResponseHeader &responseHeader);
-    void updateDataReadProgress(int bytesRead, int totalBytes);
+    void httpFinished();
+    void httpReadyRead();
+    void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes);
     void enableDownloadButton();
-    void slotAuthenticationRequired(const QString &, quint16, QAuthenticator *);
+    void slotAuthenticationRequired(QNetworkReply*,QAuthenticator *);
 #ifndef QT_NO_OPENSSL
-    void sslErrors(const QList<QSslError> &errors);
+    void sslErrors(QNetworkReply*,const QList<QSslError> &errors);
 #endif
 
@@ -86,5 +91,7 @@
     QDialogButtonBox *buttonBox;
 
-    QHttp *http;
+    QUrl url;
+    QNetworkAccessManager qnam;
+    QNetworkReply *reply;
     QFile *file;
     int httpGetId;
Index: /trunk/examples/network/http/main.cpp
===================================================================
--- /trunk/examples/network/http/main.cpp	(revision 768)
+++ /trunk/examples/network/http/main.cpp	(revision 769)
@@ -47,5 +47,4 @@
 {
     QApplication app(argc, argv);
-    qWarning("The usage of QHttp is not recommended anymore, please use QNetworkAccessManager.");
     HttpWindow httpWin;
     httpWin.show();
Index: /trunk/examples/network/loopback/dialog.cpp
===================================================================
--- /trunk/examples/network/loopback/dialog.cpp	(revision 768)
+++ /trunk/examples/network/loopback/dialog.cpp	(revision 769)
@@ -45,10 +45,10 @@
 #include "dialog.h"
 
-#if !defined(Q_OS_WINCE)
+#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
 static const int TotalBytes = 50 * 1024 * 1024;
 #else
 static const int TotalBytes = 5 * 1024 * 1024;
 #endif
-static const int PayloadSize = 65536;
+static const int PayloadSize = 64 * 1024; // 64 KB
 
 Dialog::Dialog(QWidget *parent)
@@ -131,4 +131,5 @@
 void Dialog::startTransfer()
 {
+    // called when the TCP client connected to the loopback server
     bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));
     clientStatusLabel->setText(tr("Connected"));
@@ -156,6 +157,9 @@
 void Dialog::updateClientProgress(qint64 numBytes)
 {
+    // callen when the TCP client has written some bytes
     bytesWritten += (int)numBytes;
-    if (bytesToWrite > 0)
+
+    // only write more if not finished and when the Qt write buffer is below a certain size.
+    if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4*PayloadSize)
         bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));
 
Index: /trunk/examples/network/network-chat/chatdialog.cpp
===================================================================
--- /trunk/examples/network/network-chat/chatdialog.cpp	(revision 768)
+++ /trunk/examples/network/network-chat/chatdialog.cpp	(revision 769)
@@ -80,5 +80,5 @@
     cursor.movePosition(QTextCursor::End);
     QTextTable *table = cursor.insertTable(1, 2, tableFormat);
-    table->cellAt(0, 0).firstCursorPosition().insertText("<" + from + "> ");
+    table->cellAt(0, 0).firstCursorPosition().insertText('<' + from + "> ");
     table->cellAt(0, 1).firstCursorPosition().insertText(message);
     QScrollBar *bar = textEdit->verticalScrollBar();
Index: /trunk/examples/network/network-chat/client.cpp
===================================================================
--- /trunk/examples/network/network-chat/client.cpp	(revision 768)
+++ /trunk/examples/network/network-chat/client.cpp	(revision 769)
@@ -70,6 +70,6 @@
 QString Client::nickName() const
 {
-    return QString(peerManager->userName()) + "@" + QHostInfo::localHostName()
-           + ":" + QString::number(server.serverPort());
+    return QString(peerManager->userName()) + '@' + QHostInfo::localHostName()
+           + ':' + QString::number(server.serverPort());
 }
 
Index: /trunk/examples/network/network-chat/connection.cpp
===================================================================
--- /trunk/examples/network/network-chat/connection.cpp	(revision 768)
+++ /trunk/examples/network/network-chat/connection.cpp	(revision 769)
@@ -84,5 +84,5 @@
 
     QByteArray msg = message.toUtf8();
-    QByteArray data = "MESSAGE " + QByteArray::number(msg.size()) + " " + msg;
+    QByteArray data = "MESSAGE " + QByteArray::number(msg.size()) + ' ' + msg;
     return write(data) == data.size();
 }
@@ -119,5 +119,5 @@
         }
 
-        username = QString(buffer) + "@" + peerAddress().toString() + ":"
+        username = QString(buffer) + '@' + peerAddress().toString() + ':'
                    + QString::number(peerPort());
         currentDataType = Undefined;
@@ -163,5 +163,5 @@
 {
     QByteArray greeting = greetingMessage.toUtf8();
-    QByteArray data = "GREETING " + QByteArray::number(greeting.size()) + " " + greeting;
+    QByteArray data = "GREETING " + QByteArray::number(greeting.size()) + ' ' + greeting;
     if (write(data) == data.size())
         isGreetingMessageSent = true;
Index: /trunk/examples/network/network-chat/network-chat.pro
===================================================================
--- /trunk/examples/network/network-chat/network-chat.pro	(revision 768)
+++ /trunk/examples/network/network-chat/network-chat.pro	(revision 769)
@@ -22,5 +22,6 @@
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock -lconnmon -lcharconv -linsock
+    LIBS += -lesock -lcommdb -linsock # For IAP selection
+    LIBS += -lcharconv
     TARGET.CAPABILITY = "NetworkServices ReadUserData WriteUserData"
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
Index: /trunk/examples/network/network-chat/peermanager.cpp
===================================================================
--- /trunk/examples/network/network-chat/peermanager.cpp	(revision 768)
+++ /trunk/examples/network/network-chat/peermanager.cpp	(revision 769)
@@ -62,5 +62,5 @@
         int index = environment.indexOf(QRegExp(string));
         if (index != -1) {
-            QStringList stringList = environment.at(index).split("=");
+            QStringList stringList = environment.at(index).split('=');
             if (stringList.size() == 2) {
                 username = stringList.at(1).toUtf8();
Index: /trunk/examples/network/qftp/ftpwindow.cpp
===================================================================
--- /trunk/examples/network/qftp/ftpwindow.cpp	(revision 768)
+++ /trunk/examples/network/qftp/ftpwindow.cpp	(revision 769)
@@ -325,5 +325,6 @@
         fileList->clear();
         isDirectory.clear();
-        currentPath += "/" + name;
+        currentPath += '/';
+        currentPath += name;
         ftp->cd(name);
         ftp->list();
Index: /trunk/examples/network/qftp/sym_iap_util.h
===================================================================
--- /trunk/examples/network/qftp/sym_iap_util.h	(revision 768)
+++ /trunk/examples/network/qftp/sym_iap_util.h	(revision 769)
@@ -61,4 +61,5 @@
 
 _LIT(KIapNameSetting, "IAP\\Name");             // text - mandatory
+_LIT(KIapTableIdField, "IAP\Id");
 _LIT(KIapDialogPref, "IAP\\DialogPref");        // TUnit32 - optional
 _LIT(KIapService, "IAP\\IAPService");           // TUnit32 - mandatory
@@ -299,5 +300,5 @@
     return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length());
 #else
-    return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
+    return QString((const QChar *)aDescriptor.Ptr(), aDescriptor.Length());
 #endif
 }
@@ -368,9 +369,12 @@
 
     socketServ.Connect();
+
+    TCommDbConnPref prefs;
+    prefs.SetDialogPreference(ECommDbDialogPrefPrompt);
+
     connection.Open(socketServ);
-    connection.Start();
+    connection.Start(prefs);
 
     connection.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-
     //connection.Stop();
 
@@ -379,7 +383,9 @@
 
     int error = 0;
-    if(!qt_SetDefaultIapName(strIapName, error)) {
-        //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-        strIapName = QString("");
+    if(!strIapName.isEmpty()) {
+        if(!qt_SetDefaultIapName(strIapName, error)) {
+            //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
+            strIapName = QString("");
+        }
     }
 
Index: /trunk/examples/network/securesocketclient/sslclient.cpp
===================================================================
--- /trunk/examples/network/securesocketclient/sslclient.cpp	(revision 768)
+++ /trunk/examples/network/securesocketclient/sslclient.cpp	(revision 769)
@@ -178,5 +178,5 @@
 {
     QString input = form->sessionInput->text();
-    appendString(input + "\n");
+    appendString(input + '\n');
     socket->write(input.toUtf8() + "\r\n");
     form->sessionInput->clear();
Index: /trunk/examples/network/torrent/trackerclient.cpp
===================================================================
--- /trunk/examples/network/torrent/trackerclient.cpp	(revision 768)
+++ /trunk/examples/network/torrent/trackerclient.cpp	(revision 769)
@@ -106,5 +106,5 @@
     if (fullUrl.contains("?passkey")) {
         passkey = metaInfo.announceUrl().mid(fullUrl.indexOf("?passkey"), -1);
-        passkey += "&";
+        passkey += '&';
     }
 
Index: /trunk/examples/openvg/star/starwidget.cpp
===================================================================
--- /trunk/examples/openvg/star/starwidget.cpp	(revision 768)
+++ /trunk/examples/openvg/star/starwidget.cpp	(revision 769)
@@ -94,6 +94,7 @@
     painter.beginNativePainting();
 
-    // Cache the path if we haven't already.
-    if (path == VG_INVALID_HANDLE) {
+    // Cache the path if we haven't already or if the path has
+    // become invalid because the window's context has changed.
+    if (path == VG_INVALID_HANDLE || !vgGetPathCapabilities(path)) {
         path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
                             VG_PATH_DATATYPE_F,
Index: /trunk/examples/sql/masterdetail/masterdetail.pro
===================================================================
--- /trunk/examples/sql/masterdetail/masterdetail.pro	(revision 768)
+++ /trunk/examples/sql/masterdetail/masterdetail.pro	(revision 769)
@@ -16,3 +16,6 @@
 INSTALLS += target sources
 
-symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+symbian {
+    TARGET.UID3 = 0xA000D7CF
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
Index: /trunk/examples/sql/sql.pro
===================================================================
--- /trunk/examples/sql/sql.pro	(revision 768)
+++ /trunk/examples/sql/sql.pro	(revision 769)
@@ -6,8 +6,10 @@
                         sqlwidgetmapper
 
+!wince*:  SUBDIRS   +=  masterdetail
+
 !wince*:!symbian: SUBDIRS += \
                         querymodel \
-                        tablemodel \
-                        masterdetail
+                        tablemodel
+
 
 # install
Index: /trunk/examples/symbianpkgrules.pri
===================================================================
--- /trunk/examples/symbianpkgrules.pri	(revision 768)
+++ /trunk/examples/symbianpkgrules.pri	(revision 769)
@@ -11,5 +11,6 @@
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+examples_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += examples_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
Index: /trunk/examples/uitools/textfinder/textfinder.cpp
===================================================================
--- /trunk/examples/uitools/textfinder/textfinder.cpp	(revision 768)
+++ /trunk/examples/uitools/textfinder/textfinder.cpp	(revision 769)
@@ -117,5 +117,5 @@
         document->undo();
 
-    if (searchString == "") {
+    if (searchString.isEmpty()) {
         QMessageBox::information(this, tr("Empty Search Field"),
                 "The search field is empty. Please enter a word and click Find.");
Index: /trunk/examples/widgets/softkeys/softkeys.cpp
===================================================================
--- /trunk/examples/widgets/softkeys/softkeys.cpp	(revision 768)
+++ /trunk/examples/widgets/softkeys/softkeys.cpp	(revision 769)
@@ -71,4 +71,10 @@
     toggleButton->setCheckable(true);
 
+    modeButton = new QPushButton(tr("Loop SK window type"), this);
+    modeButton->setContextMenuPolicy(Qt::NoContextMenu);
+
+    modeLabel = new QLabel(tr("Normal maximized"), this);
+    modeLabel->setContextMenuPolicy(Qt::NoContextMenu);
+
     pushButton = new QPushButton(tr("File Dialog"), this);
     pushButton->setContextMenuPolicy(Qt::NoContextMenu);
@@ -88,4 +94,6 @@
     layout->addWidget(pushButton, 2, 1);
     layout->addWidget(comboBox, 3, 0, 1, 2);
+    layout->addWidget(modeButton, 4, 0, 1, 2);
+    layout->addWidget(modeLabel, 5, 0, 1, 2);
     central->setLayout(layout);
 
@@ -98,4 +106,5 @@
     connect(exit, SIGNAL(triggered()), this, SLOT(exitApplication()));
     connect(toggleButton, SIGNAL(clicked()), this, SLOT(setCustomSoftKeys()));
+    connect(modeButton, SIGNAL(clicked()), this, SLOT(setMode()));
     pushButton->setFocus();
 }
@@ -134,4 +143,33 @@
 }
 
+void MainWindow::setMode()
+{
+    if(isMaximized()) {
+        showFullScreen();
+        modeLabel->setText(tr("Normal Fullscreen"));
+    } else {
+        Qt::WindowFlags flags = windowFlags();
+        if(flags & Qt::WindowSoftkeysRespondHint) {
+            flags |= Qt::WindowSoftkeysVisibleHint;
+            flags &= ~Qt::WindowSoftkeysRespondHint;
+            setWindowFlags(flags); // Hides visible window
+            showFullScreen();
+            modeLabel->setText(tr("Fullscreen with softkeys"));
+        } else if(flags & Qt::WindowSoftkeysVisibleHint) {
+            flags &= ~Qt::WindowSoftkeysVisibleHint;
+            flags &= ~Qt::WindowSoftkeysRespondHint;
+            setWindowFlags(flags); // Hides visible window
+            showMaximized();
+            modeLabel->setText(tr("Normal Maximized"));
+        } else {
+            flags &= ~Qt::WindowSoftkeysVisibleHint;
+            flags |= Qt::WindowSoftkeysRespondHint;
+            setWindowFlags(flags); // Hides visible window
+            showFullScreen();
+            modeLabel->setText(tr("Fullscreen with SK respond"));
+        }
+    }
+}
+
 void MainWindow::exitApplication()
 {
Index: /trunk/examples/widgets/softkeys/softkeys.h
===================================================================
--- /trunk/examples/widgets/softkeys/softkeys.h	(revision 768)
+++ /trunk/examples/widgets/softkeys/softkeys.h	(revision 769)
@@ -58,4 +58,5 @@
     void cancelPressed();
     void setCustomSoftKeys();
+    void setMode();
 public:
     MainWindow(QWidget *parent = 0);
@@ -64,13 +65,15 @@
     QGridLayout *layout;
     QWidget *central;
-    QTextEdit* textEditor;
+    QTextEdit *textEditor;
     QLabel *infoLabel;
-    QPushButton* toggleButton;
-    QPushButton* pushButton;
-    QMenu* fileMenu;
-    QAction* addSoftKeysAct;
-    QAction* exit;
-    QAction* ok;
-    QAction* cancel;
+    QPushButton *toggleButton;
+    QPushButton *pushButton;
+    QPushButton *modeButton;
+    QLabel *modeLabel;
+    QMenu *fileMenu;
+    QAction *addSoftKeysAct;
+    QAction *exit;
+    QAction *ok;
+    QAction *cancel;
 };
 
Index: /trunk/examples/widgets/stylesheet/mainwindow.ui
===================================================================
--- /trunk/examples/widgets/stylesheet/mainwindow.ui	(revision 768)
+++ /trunk/examples/widgets/stylesheet/mainwindow.ui	(revision 769)
@@ -197,5 +197,5 @@
        <item row="1" column="2" colspan="2" >
         <widget class="QRadioButton" name="femaleRadioButton" >
-         <property name="styleSheet" >
+         <property name="toolTip">
           <string>Check this if you are female</string>
          </property>
Index: /trunk/examples/widgets/wiggly/dialog.cpp
===================================================================
--- /trunk/examples/widgets/wiggly/dialog.cpp	(revision 768)
+++ /trunk/examples/widgets/wiggly/dialog.cpp	(revision 769)
@@ -57,4 +57,15 @@
     setLayout(layout);
 
+#ifdef QT_SOFTKEYS_ENABLED
+    QAction *exitAction = new QAction(tr("Exit"), this);
+    exitAction->setSoftKeyRole(QAction::NegativeSoftKey);
+    connect (exitAction, SIGNAL(triggered()),this, SLOT(close()));
+    addAction (exitAction);
+
+    Qt::WindowFlags flags = windowFlags();
+    flags |= Qt::WindowSoftkeysVisibleHint;
+    setWindowFlags(flags);
+#endif
+
     connect(lineEdit, SIGNAL(textChanged(QString)),
             wigglyWidget, SLOT(setText(QString)));
Index: /trunk/examples/widgets/windowflags/controllerwindow.cpp
===================================================================
--- /trunk/examples/widgets/windowflags/controllerwindow.cpp	(revision 768)
+++ /trunk/examples/widgets/windowflags/controllerwindow.cpp	(revision 769)
@@ -59,5 +59,5 @@
     bottomLayout->addWidget(quitButton);
 
-    QVBoxLayout *mainLayout = new QVBoxLayout;
+    QHBoxLayout *mainLayout = new QHBoxLayout;
     mainLayout->addWidget(typeGroupBox);
     mainLayout->addWidget(hintsGroupBox);
Index: /trunk/include/Qt/private/qaudio_symbian_p.h
===================================================================
--- /trunk/include/Qt/private/qaudio_symbian_p.h	(revision 769)
+++ /trunk/include/Qt/private/qaudio_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudio_symbian_p.h"
Index: /trunk/include/Qt/private/qaudiodeviceinfo_symbian_p.h
===================================================================
--- /trunk/include/Qt/private/qaudiodeviceinfo_symbian_p.h	(revision 769)
+++ /trunk/include/Qt/private/qaudiodeviceinfo_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudiodeviceinfo_symbian_p.h"
Index: /trunk/include/Qt/private/qaudioinput_symbian_p.h
===================================================================
--- /trunk/include/Qt/private/qaudioinput_symbian_p.h	(revision 769)
+++ /trunk/include/Qt/private/qaudioinput_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudioinput_symbian_p.h"
Index: /trunk/include/Qt/private/qaudiooutput_symbian_p.h
===================================================================
--- /trunk/include/Qt/private/qaudiooutput_symbian_p.h	(revision 769)
+++ /trunk/include/Qt/private/qaudiooutput_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudiooutput_symbian_p.h"
Index: /trunk/include/QtMultimedia/QAudio
===================================================================
--- /trunk/include/QtMultimedia/QAudio	(revision 769)
+++ /trunk/include/QtMultimedia/QAudio	(revision 769)
@@ -0,0 +1,1 @@
+#include "qaudio.h"
Index: /trunk/include/QtMultimedia/headers.pri
===================================================================
--- /trunk/include/QtMultimedia/headers.pri	(revision 768)
+++ /trunk/include/QtMultimedia/headers.pri	(revision 769)
@@ -1,3 +1,3 @@
 SYNCQT.HEADER_FILES = ../multimedia/audio/qaudio.h ../multimedia/audio/qaudiodeviceinfo.h ../multimedia/audio/qaudioengine.h ../multimedia/audio/qaudioengineplugin.h ../multimedia/audio/qaudioformat.h ../multimedia/audio/qaudioinput.h ../multimedia/audio/qaudiooutput.h ../multimedia/video/qabstractvideobuffer.h ../multimedia/video/qabstractvideosurface.h ../multimedia/video/qvideoframe.h ../multimedia/video/qvideosurfaceformat.h ../../include/QtMultimedia/QtMultimedia 
-SYNCQT.HEADER_CLASSES = ../../include/QtMultimedia/QAudioDeviceInfo ../../include/QtMultimedia/QAbstractAudioDeviceInfo ../../include/QtMultimedia/QAbstractAudioOutput ../../include/QtMultimedia/QAbstractAudioInput ../../include/QtMultimedia/QAudioEngineFactoryInterface ../../include/QtMultimedia/QAudioEnginePlugin ../../include/QtMultimedia/QAudioFormat ../../include/QtMultimedia/QAudioInput ../../include/QtMultimedia/QAudioOutput ../../include/QtMultimedia/QAbstractVideoBuffer ../../include/QtMultimedia/QAbstractVideoSurface ../../include/QtMultimedia/QVideoFrame ../../include/QtMultimedia/QVideoSurfaceFormat 
-SYNCQT.PRIVATE_HEADER_FILES = ../multimedia/audio/qaudio_mac_p.h ../multimedia/audio/qaudiodevicefactory_p.h ../multimedia/audio/qaudiodeviceinfo_alsa_p.h ../multimedia/audio/qaudiodeviceinfo_mac_p.h ../multimedia/audio/qaudiodeviceinfo_win32_p.h ../multimedia/audio/qaudioinput_alsa_p.h ../multimedia/audio/qaudioinput_mac_p.h ../multimedia/audio/qaudioinput_win32_p.h ../multimedia/audio/qaudiooutput_alsa_p.h ../multimedia/audio/qaudiooutput_mac_p.h ../multimedia/audio/qaudiooutput_win32_p.h ../multimedia/video/qabstractvideobuffer_p.h ../multimedia/video/qabstractvideosurface_p.h ../multimedia/video/qimagevideobuffer_p.h ../multimedia/video/qmemoryvideobuffer_p.h 
+SYNCQT.HEADER_CLASSES = ../../include/QtMultimedia/QAudio ../../include/QtMultimedia/QAudioDeviceInfo ../../include/QtMultimedia/QAbstractAudioDeviceInfo ../../include/QtMultimedia/QAbstractAudioOutput ../../include/QtMultimedia/QAbstractAudioInput ../../include/QtMultimedia/QAudioEngineFactoryInterface ../../include/QtMultimedia/QAudioEnginePlugin ../../include/QtMultimedia/QAudioFormat ../../include/QtMultimedia/QAudioInput ../../include/QtMultimedia/QAudioOutput ../../include/QtMultimedia/QAbstractVideoBuffer ../../include/QtMultimedia/QAbstractVideoSurface ../../include/QtMultimedia/QVideoFrame ../../include/QtMultimedia/QVideoSurfaceFormat 
+SYNCQT.PRIVATE_HEADER_FILES = ../multimedia/audio/qaudio_mac_p.h ../multimedia/audio/qaudio_symbian_p.h ../multimedia/audio/qaudiodevicefactory_p.h ../multimedia/audio/qaudiodeviceinfo_alsa_p.h ../multimedia/audio/qaudiodeviceinfo_mac_p.h ../multimedia/audio/qaudiodeviceinfo_symbian_p.h ../multimedia/audio/qaudiodeviceinfo_win32_p.h ../multimedia/audio/qaudioinput_alsa_p.h ../multimedia/audio/qaudioinput_mac_p.h ../multimedia/audio/qaudioinput_symbian_p.h ../multimedia/audio/qaudioinput_win32_p.h ../multimedia/audio/qaudiooutput_alsa_p.h ../multimedia/audio/qaudiooutput_mac_p.h ../multimedia/audio/qaudiooutput_symbian_p.h ../multimedia/audio/qaudiooutput_win32_p.h ../multimedia/video/qabstractvideobuffer_p.h ../multimedia/video/qabstractvideosurface_p.h ../multimedia/video/qimagevideobuffer_p.h ../multimedia/video/qmemoryvideobuffer_p.h 
Index: /trunk/include/QtMultimedia/private/qaudio_symbian_p.h
===================================================================
--- /trunk/include/QtMultimedia/private/qaudio_symbian_p.h	(revision 769)
+++ /trunk/include/QtMultimedia/private/qaudio_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudio_symbian_p.h"
Index: /trunk/include/QtMultimedia/private/qaudiodeviceinfo_symbian_p.h
===================================================================
--- /trunk/include/QtMultimedia/private/qaudiodeviceinfo_symbian_p.h	(revision 769)
+++ /trunk/include/QtMultimedia/private/qaudiodeviceinfo_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudiodeviceinfo_symbian_p.h"
Index: /trunk/include/QtMultimedia/private/qaudioinput_symbian_p.h
===================================================================
--- /trunk/include/QtMultimedia/private/qaudioinput_symbian_p.h	(revision 769)
+++ /trunk/include/QtMultimedia/private/qaudioinput_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudioinput_symbian_p.h"
Index: /trunk/include/QtMultimedia/private/qaudiooutput_symbian_p.h
===================================================================
--- /trunk/include/QtMultimedia/private/qaudiooutput_symbian_p.h	(revision 769)
+++ /trunk/include/QtMultimedia/private/qaudiooutput_symbian_p.h	(revision 769)
@@ -0,0 +1,1 @@
+#include "../../../src/multimedia/audio/qaudiooutput_symbian_p.h"
Index: /trunk/mkspecs/aix-xlc-64/qmake.conf
===================================================================
--- /trunk/mkspecs/aix-xlc-64/qmake.conf	(revision 768)
+++ /trunk/mkspecs/aix-xlc-64/qmake.conf	(revision 769)
@@ -49,5 +49,5 @@
 QMAKE_LINK_THREAD	= xlC_r
 QMAKE_LINK_SHLIB	= ld
-QMAKE_LFLAGS		= -q64
+QMAKE_LFLAGS		= -q64 -bbigtoc
 QMAKE_LFLAGS_RELEASE	=
 QMAKE_LFLAGS_DEBUG	=
Index: /trunk/mkspecs/aix-xlc/qmake.conf
===================================================================
--- /trunk/mkspecs/aix-xlc/qmake.conf	(revision 768)
+++ /trunk/mkspecs/aix-xlc/qmake.conf	(revision 769)
@@ -49,5 +49,5 @@
 QMAKE_LINK_THREAD	= xlC_r
 QMAKE_LINK_SHLIB	= ld
-QMAKE_LFLAGS		=
+QMAKE_LFLAGS		= -bmaxdata:0x80000000
 QMAKE_LFLAGS_RELEASE	=
 QMAKE_LFLAGS_DEBUG	=
Index: /trunk/mkspecs/common/symbian/symbian.conf
===================================================================
--- /trunk/mkspecs/common/symbian/symbian.conf	(revision 768)
+++ /trunk/mkspecs/common/symbian/symbian.conf	(revision 769)
@@ -27,8 +27,11 @@
 QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
 
+MMP_OPTION_KEYWORDS = CW ARMCC GCCE
+VERSION_FLAGS.ARMCC = ARMCC_4_0
 QMAKE_CXX		= g++
 QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
 QMAKE_CXXFLAGS.CW	= 
-QMAKE_CXXFLAGS.ARMCC	= --visibility_inlines_hidden
+QMAKE_CXXFLAGS.ARMCC      = --visibility_inlines_hidden
+QMAKE_CXXFLAGS.ARMCC_4_0  = --import_all_vtbl
 QMAKE_CXXFLAGS.GCCE	= -fvisibility-inlines-hidden
 QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
@@ -71,10 +74,22 @@
 QMAKE_LIBS_EGL          = -llibEGL
 QMAKE_LIBS_OPENGL       = 
-QMAKE_LIBS_OPENVG       = -llibOpenVG -lgraphicsresource -lfbscli -lbitgdi -lgdi
+QMAKE_LIBS_OPENVG       = -llibOpenVG -lfbscli -lbitgdi -lgdi
 QMAKE_LIBS_COMPAT       = 
 QMAKE_LIBS_QT_ENTRY     = -llibcrt0.lib
 QMAKE_LIBS_S60          = -lavkon
 
-!isEmpty(QMAKE_SH) {
+exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) {
+    QMAKE_LIBS_OPENVG += -lsgresource
+}
+
+contains(QMAKE_HOST.os,Windows) {
+    QMAKE_COPY           = copy /y
+    QMAKE_COPY_DIR       = xcopy /s /q /y /i
+    QMAKE_MOVE           = move
+    QMAKE_DEL_FILE       = del
+    QMAKE_MKDIR          = mkdir
+    QMAKE_DEL_DIR        = rmdir
+    QMAKE_CHK_DIR_EXISTS = if not exist
+} else {
     QMAKE_COPY           = cp
     QMAKE_COPY_DIR       = cp -r
@@ -84,12 +99,4 @@
     QMAKE_DEL_DIR        = rmdir
     QMAKE_CHK_DIR_EXISTS = test -d
-} else {
-    QMAKE_COPY           = copy /y
-    QMAKE_COPY_DIR       = xcopy /s /q /y /i
-    QMAKE_MOVE           = move
-    QMAKE_DEL_FILE       = del
-    QMAKE_MKDIR          = mkdir
-    QMAKE_DEL_DIR        = rmdir
-    QMAKE_CHK_DIR_EXISTS = if not exist
 }
 
@@ -108,4 +115,5 @@
 load(qt_config)
 load(platform_paths)
+load(add_mmp_rules)
 
 symbian-abld {
@@ -116,9 +124,8 @@
     MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA = "OPTION_REPLACE ARMCC --export_all_vtbl // don't use --export_all_vtbl"
 }
-MMP_RULES += PAGED
+MMP_RULES += PAGED BYTEPAIRCOMPRESSTARGET
 MMP_RULES += $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA
 SYMBIAN_PLATFORMS = WINSCW GCCE ARMV5 ARMV6
 
-# Legacy support requires some hardcoded stdapis paths. 
 INCLUDEPATH = \
     $$[QT_INSTALL_PREFIX]/mkspecs/common/symbian/stl-off \
@@ -127,7 +134,17 @@
     $$OS_LAYER_LIBC_SYSTEMINCLUDE \
     $$INCLUDEPATH
-    
+
+# Ensure '.' directory is the first in include path.
+# RVCT seems to do this automatically, but WINSCW compiler does not, so add it here.
+MMP_RULES += "USERINCLUDE ."
+
+# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
+# if multiple languages need to be supported by pkg file. In that case the developer should declare
+# multiple language compatible dependency statements him/herself.
+
+default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
+
 # Supports S60 3.0, 3.1, 3.2 and 5.0 by default
-default_deployment.pkg_prerules = \
+pkg_platform_dependencies = \
     "; Default HW/platform dependencies" \
     "[0x101F7961],0,0,0,{\"S60ProductID\"}" \
@@ -146,5 +163,21 @@
     } else {
         S60_VERSION = 3.1
-        MMP_RULES -= PAGED
+        MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET
     }
 }
+
+QMAKE_CXXFLAGS_FAST_VFP.ARMCC = --fpmode fast
+# [TODO] QMAKE_CXXFLAGS_FAST_VFP.GCCE =
+
+symbian {
+    armfpu = $$find(MMP_RULES, "ARMFPU")
+    !isEmpty(armfpu) {
+        vfpv2 = $$find(MMP_RULES, "vfpv2")
+        !isEmpty(vfpv2) {
+            # we will respect fpu setting obtained from configure, but,
+            # if vfpv2 or softvfp+vfpv2 used we want to force RunFast VFP mode
+            QMAKE_CXXFLAGS.ARMCC += $${QMAKE_CXXFLAGS_FAST_VFP.ARMCC}
+            # [TODO] QMAKE_CXXFLAGS.GCCE += $${QMAKE_CXXFLAGS_FAST_VFP.GCCE}
+        }
+    }
+}
Index: /trunk/mkspecs/features/dbusadaptors.prf
===================================================================
--- /trunk/mkspecs/features/dbusadaptors.prf	(revision 768)
+++ /trunk/mkspecs/features/dbusadaptors.prf	(revision 769)
@@ -1,6 +1,3 @@
-isEmpty(QMAKE_QDBUSXML2CPP) {
-    win32:QMAKE_QDBUSXML2CPP = $$[QT_INSTALL_BINS]\qdbusxml2cpp.exe
-    else:QMAKE_QDBUSXML2CPP = $$[QT_INSTALL_BINS]/qdbusxml2cpp
-}
+qtPrepareTool(QMAKE_QDBUSXML2CPP, qdbusxml2cpp)
 
 for(DBUS_ADAPTOR, $$list($$unique(DBUS_ADAPTORS))) {
Index: /trunk/mkspecs/features/dbusinterfaces.prf
===================================================================
--- /trunk/mkspecs/features/dbusinterfaces.prf	(revision 768)
+++ /trunk/mkspecs/features/dbusinterfaces.prf	(revision 769)
@@ -1,8 +1,5 @@
 load(moc)
 
-isEmpty(QMAKE_QDBUSXML2CPP) {
-    win32:QMAKE_QDBUSXML2CPP = $$[QT_INSTALL_BINS]\qdbusxml2cpp.exe
-    else:QMAKE_QDBUSXML2CPP = $$[QT_INSTALL_BINS]/qdbusxml2cpp
-}
+qtPrepareTool(QMAKE_QDBUSXML2CPP, qdbusxml2cpp)
 
 for(DBUS_INTERFACE, $$list($$unique(DBUS_INTERFACES))) {
Index: /trunk/mkspecs/features/default_post.prf
===================================================================
--- /trunk/mkspecs/features/default_post.prf	(revision 768)
+++ /trunk/mkspecs/features/default_post.prf	(revision 769)
@@ -13,2 +13,17 @@
 QMAKE_INCDIR += $$QMAKE_INCDIR_POST
 QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST
+
+# Let every project have a standard GNU `check' target
+!contains(QMAKE_EXTRA_TARGETS, check) {
+    # `make check' should iterate through all subdirs
+    contains(TEMPLATE, subdirs) {
+        check.CONFIG = recursive
+        check.recurse = $$SUBDIRS
+        check.recurse_target = check
+    }
+    # `make check' should imply building the project
+    else {
+        check.depends = first
+    }
+    QMAKE_EXTRA_TARGETS += check
+}
Index: /trunk/mkspecs/features/default_pre.prf
===================================================================
--- /trunk/mkspecs/features/default_pre.prf	(revision 768)
+++ /trunk/mkspecs/features/default_pre.prf	(revision 769)
@@ -1,2 +1,3 @@
 load(exclusive_builds)
+### Qt 5: remove "uic" and "resources" - or add "qt"
 CONFIG = lex yacc warn_on debug uic resources $$CONFIG
Index: /trunk/mkspecs/features/moc.prf
===================================================================
--- /trunk/mkspecs/features/moc.prf	(revision 768)
+++ /trunk/mkspecs/features/moc.prf	(revision 769)
@@ -1,8 +1,5 @@
 
 #global defaults
-isEmpty(QMAKE_MOC) {
-    contains(QMAKE_HOST.os,Windows)|os2:QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe
-    else:QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
-}
+qtPrepareTool(QMAKE_MOC, moc)
 isEmpty(MOC_DIR):MOC_DIR = .
 isEmpty(QMAKE_H_MOD_MOC):QMAKE_H_MOD_MOC = moc_
@@ -109,5 +106,5 @@
 
 #auto depend on moc
-unix:!no_mocdepend {
+unix:!symbian:!no_mocdepend {
      moc_source.depends += $$first(QMAKE_MOC)
      moc_header.depends += $$first(QMAKE_MOC)
Index: /trunk/mkspecs/features/qt.prf
===================================================================
--- /trunk/mkspecs/features/qt.prf	(revision 768)
+++ /trunk/mkspecs/features/qt.prf	(revision 769)
@@ -31,4 +31,7 @@
    }
 }
+
+#handle modules
+for(mod,$$list($$files($$[QMAKE_MKSPECS]/modules/qt_*.pri))):include($$mod)
 
 #handle includes
@@ -167,6 +170,12 @@
        symbian:isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x040000 0x1600000
 
-   } else:isEqual(QTLIB, webkit):qlib = QtWebKit
-   else:isEqual(QTLIB, declarative):qlib = QtDeclarative
+   } else:isEqual(QTLIB, webkit) {
+       qlib = QtWebKit
+       aix-xlc {
+           # Flags recommended by IBM when using WebKit
+	   QMAKE_LFLAGS -= -bmaxdata:0x80000000
+	   QMAKE_LFLAGS += -bmaxdata:0xD0000000/dsa
+       }
+   } else:isEqual(QTLIB, declarative):qlib = QtDeclarative
    else:isEqual(QTLIB, multimedia):qlib = QtMultimedia
    else:message("Unknown QT: $$QTLIB"):qlib =
Index: /trunk/mkspecs/features/qt_functions.prf
===================================================================
--- /trunk/mkspecs/features/qt_functions.prf	(revision 768)
+++ /trunk/mkspecs/features/qt_functions.prf	(revision 769)
@@ -79,2 +79,13 @@
     return(true)
 }
+
+# variable, default
+defineTest(qtPrepareTool) {
+    isEmpty($$1) {
+        !isEmpty(QT_BUILD_TREE):$$1 = $$QT_BUILD_TREE/bin/$$2
+        else:$$1 = $$[QT_INSTALL_BINS]/$$2
+    }
+    $$1 ~= s,[/\\\\],$$QMAKE_DIR_SEP,
+    contains(QMAKE_HOST.os, Windows)|os2:!contains($$1, .*\\.exe$):$$1 = $$eval($$1).exe
+    export($$1)
+}
Index: /trunk/mkspecs/features/resources.prf
===================================================================
--- /trunk/mkspecs/features/resources.prf	(revision 768)
+++ /trunk/mkspecs/features/resources.prf	(revision 769)
@@ -1,6 +1,4 @@
-isEmpty(QMAKE_RCC) {
-    win32:QMAKE_RCC = $$[QT_INSTALL_BINS]\rcc.exe
-    else:QMAKE_RCC = $$[QT_INSTALL_BINS]/rcc
-}
+defined(qtPrepareTool)|load(qt_functions) ### Qt 5: see default_pre.prf
+qtPrepareTool(QMAKE_RCC, rcc)
 
 isEmpty(RCC_DIR):RCC_DIR = .
Index: /trunk/mkspecs/features/symbian/add_mmp_rules.prf
===================================================================
--- /trunk/mkspecs/features/symbian/add_mmp_rules.prf	(revision 769)
+++ /trunk/mkspecs/features/symbian/add_mmp_rules.prf	(revision 769)
@@ -0,0 +1,33 @@
+# Arg1: List of conditions to generate block for
+# Arg2: List of variables containing rules to add
+defineTest(addMMPRules) {
+    unset(myConditions)
+    unset(myVariables)
+    unset(myIfDef)
+
+    myConditions = $$eval($$1) default
+    myVariables = $$eval($$2)
+    myIfDef = if
+
+    for(condition, $$list($$myConditions)) {
+        contains(condition, default) {
+            libBlock = "$${LITERAL_HASH}else"
+        } else {
+            libBlock = "$${LITERAL_HASH}$${myIfDef} defined($${condition})"
+            myIfDef = elif
+        }
+
+        for(var, $$list($$myVariables)) {
+            varVal = $$eval($${var}.$${condition})
+            isEmpty(varVal) {
+                # No value defined for current condition, so use default
+                varVal = $$eval($${var}.default)
+            }
+            !isEmpty(varVal): libBlock += "$$join(varVal,$$escape_expand(\n))"
+        }
+
+        MMP_RULES += $$libBlock
+    }
+    MMP_RULES += "$${LITERAL_HASH}endif"
+    export(MMP_RULES)
+}
Index: /trunk/mkspecs/features/symbian/application_icon.prf
===================================================================
--- /trunk/mkspecs/features/symbian/application_icon.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/application_icon.prf	(revision 769)
@@ -4,5 +4,5 @@
 # requires the registration resource file to exist always
 contains( CONFIG, no_icon ) {
-    symbian:RSS_RULES ="hidden = KAppIsHidden;"
+    symbian:RSS_RULES += "hidden = KAppIsHidden;"
     CONFIG -= no_icon
 } else {
Index: /trunk/mkspecs/features/symbian/data_caging_paths.prf
===================================================================
--- /trunk/mkspecs/features/symbian/data_caging_paths.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/data_caging_paths.prf	(revision 769)
@@ -75,5 +75,5 @@
 }
 
-isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = /$$RESOURCE_FILES_DIR/qt/plugins
+isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = /$$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins
 isEmpty(HW_ZDIR): HW_ZDIR = epoc32/data/z
 isEmpty(REG_RESOURCE_DIR): REG_RESOURCE_DIR = /private/10003a3f/apps
Index: /trunk/mkspecs/features/symbian/default_post.prf
===================================================================
--- /trunk/mkspecs/features/symbian/default_post.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/default_post.prf	(revision 769)
@@ -6,5 +6,5 @@
     } else:contains(QT, gui):contains(CONFIG,qt) {
         S60MAIN_LIBS = -leuser
-        QMAKE_LIBS += -lqtmain.lib $$S60MAIN_LIBS
+        QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib $$S60MAIN_LIBS
     } else {
         QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY
Index: /trunk/mkspecs/features/symbian/platform_paths.prf
===================================================================
--- /trunk/mkspecs/features/symbian/platform_paths.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/platform_paths.prf	(revision 769)
@@ -230,31 +230,4 @@
 
         OS_LAYER_LIBUTILITY_SYSTEMINCLUDE = $$OS_LAYER_PLATFORM_EXPORT_PATH(stdapis/utility)
-
-        # ---------------------------------------
-        # Definitions to export IBY files to different folders where they will be taken 
-        # to ROM image
-        # ---------------------------------------
-              
-        defineReplace(CORE_APP_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/app/$$1)
-        }
-        defineReplace(CORE_MW_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/mw/$$1)
-        }
-        defineReplace(CORE_OSEXT_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/os/$$1)
-        }
-        defineReplace(CORE_OS_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/os/$$1)
-        }
-        defineReplace(CORE_ADAPT_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/$$1)
-        }
-        
-        # You need to define the following in pro-file, if you are using the stllib:
-        # QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS
-        # DEFINES *= $$STLLIB_USAGE_DEFINES
-        STLLIB_USAGE_CW_FLAGS = "-wchar_t on"
-        STLLIB_USAGE_DEFINES = _WCHAR_T_DECLARED
 
     } else { # Old pre-SF structure
@@ -451,34 +424,49 @@
                                             /epoc32/include/stdapis/utility
 
-        # ---------------------------------------
-        # Definitions to export IBY files to different folders where they will be taken 
-        # to ROM image
-        # ---------------------------------------
-              
-        defineReplace(CORE_APP_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/app/$$1)
-        }
-        defineReplace(CORE_MW_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/mw/$$1)
-        }
-        defineReplace(CORE_OSEXT_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/osext/$$1)
-        }
-        defineReplace(CORE_OS_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/core/osext/$$1)
-        }
-        defineReplace(CORE_ADAPT_LAYER_IBY_EXPORT_PATH) {
-            return(/epoc32/rom/include/$$1)
-        }
-        
-        # You need to define the following in pro-file, if you are using the stllib:
-        # QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS
-        # DEFINES *= $$STLLIB_USAGE_DEFINES
-        STLLIB_USAGE_CW_FLAGS = "-wchar_t on"
-        STLLIB_USAGE_DEFINES = _WCHAR_T_DECLARED
+    } 
+
+    # Definitions common to both structures
+
+    # ---------------------------------------
+    # Definitions to export IBY files to different folders where they will be taken
+    # to ROM image
+    # ---------------------------------------
+
+    defineReplace(CORE_APP_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/core/app/$$1)
+    }
+    defineReplace(CORE_MW_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/core/mw/$$1)
+    }
+
+    defineReplace(LANGUAGE_APP_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/language/app/$$1)
+    }
+    defineReplace(LANGUAGE_MW_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/language/mw/$$1)
+    }
+
+    defineReplace(CUSTOMER_APP_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/customer/app/$$1)
+    }
+    defineReplace(CUSTOMER_MW_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/customer/mw/$$1)
+    }
+
+    defineReplace(CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/customervariant/app/$$1)
+    }
+    defineReplace(CUSTOMER_VARIANT_MW_LAYER_IBY_EXPORT_PATH) {
+        return(/epoc32/rom/include/customervariant/mw/$$1)
+    }
+
+    # You need to define the following in pro-file, if you are using the stllib:
+    # QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS
+    # DEFINES *= $$STLLIB_USAGE_DEFINES
+    STLLIB_USAGE_CW_FLAGS = "-wchar_t on"
+    STLLIB_USAGE_DEFINES = _WCHAR_T_DECLARED
+
+}
+
+
     
-    } 
-}
-
-
-    
Index: /trunk/mkspecs/features/symbian/qt.prf
===================================================================
--- /trunk/mkspecs/features/symbian/qt.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/qt.prf	(revision 769)
@@ -23,8 +23,8 @@
 
 # Add dependency to Qt package to all other projects besides Qt libs.
-# Note: Qt libs with full capabilities has UID3 of 0x2001E61C,
+# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C,
 #       while self-signed version typically has temporary UID3 of 0xE001E61C.
-contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C) {
-    default_deployment.pkg_prerules += \
+contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) {
+    pkg_depends_qt += \
         "; Default dependency to Qt libraries" \
         "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"Qt\"}"
@@ -32,8 +32,19 @@
     # Projects linking to webkit need dependency to webkit
     contains(QT, webkit): {
-        default_deployment.pkg_prerules += \
+        # these can be overridden by mkspecs/modules/qt_webkit.pri
+        isEmpty(QT_WEBKIT_MAJOR_VERSION) {
+            QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION}
+            QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION}
+            QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION}
+        }
+
+        pkg_depends_webkit += \
             "; Dependency to Qt Webkit" \
-            "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+            "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION},  {\"QtWebKit\"}"
+    } else {
+        default_deployment.pkg_prerules -= pkg_depends_webkit
     }
+} else {
+    default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt
 }
 
Index: /trunk/mkspecs/features/symbian/stl.prf
===================================================================
--- /trunk/mkspecs/features/symbian/stl.prf	(revision 768)
+++ /trunk/mkspecs/features/symbian/stl.prf	(revision 769)
@@ -16,10 +16,17 @@
 
 # libstdcppv5 is preferred over libstdcpp as it has/uses the throwing version of operator new
-exists($${EPOCROOT}epoc32/release/armv5/urel/libstdcppv5.dll)|exists($${EPOCROOT}epoc32/release/winscw/udeb/libstdcppv5.dll) {
-    LIBS *= -llibstdcppv5.dll
+STL_LIB = -llibstdcppv5.dll
 
-    # STDCPP turns on standard C++ new behaviour (ie. throwing new)
-    MMP_RULES += "STDCPP"
-} else {
-    LIBS *= -llibstdcpp.dll
+# STDCPP turns on standard C++ new behaviour (ie. throwing new)
+STL_MMP_RULE = "STDCPP"
+
+# Fall back to old implementation if that is the only one that is found
+exists($${EPOCROOT}epoc32/release/armv5/urel/libstdcpp.dll)|exists($${EPOCROOT}epoc32/release/winscw/udeb/libstdcpp.dll) {
+    !exists($${EPOCROOT}epoc32/release/armv5/urel/libstdcppv5.dll):!exists($${EPOCROOT}epoc32/release/winscw/udeb/libstdcppv5.dll) {
+        STL_LIB = -llibstdcpp.dll
+        STL_MMP_RULE =
+    }
 }
+
+LIBS *= $$STL_LIB
+MMP_RULES *= $$STL_MMP_RULE
Index: /trunk/mkspecs/features/uic.prf
===================================================================
--- /trunk/mkspecs/features/uic.prf	(revision 768)
+++ /trunk/mkspecs/features/uic.prf	(revision 769)
@@ -1,12 +1,5 @@
-
-isEmpty(QMAKE_UIC3) {
-    contains(QMAKE_HOST.os,Windows):QMAKE_UIC3 = $$[QT_INSTALL_BINS]\uic3.exe
-    else:QMAKE_UIC3 = $$[QT_INSTALL_BINS]/uic3
-}
-
-isEmpty(QMAKE_UIC) {
-   contains(QMAKE_HOST.os,Windows):QMAKE_UIC = $$[QT_INSTALL_BINS]\uic.exe
-   else:QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
-}
+defined(qtPrepareTool)|load(qt_functions) ### Qt 5: see default_pre.prf
+qtPrepareTool(QMAKE_UIC3, uic3)
+qtPrepareTool(QMAKE_UIC, uic)
 
 isEmpty(UI_DIR):UI_DIR = .
Index: /trunk/mkspecs/features/win32/qaxcontainer.prf
===================================================================
--- /trunk/mkspecs/features/win32/qaxcontainer.prf	(revision 768)
+++ /trunk/mkspecs/features/win32/qaxcontainer.prf	(revision 769)
@@ -9,7 +9,5 @@
 }
 
-isEmpty(QMAKE_DUMPCPP) {
-    win32:QMAKE_DUMPCPP = $$[QT_INSTALL_BINS]\dumpcpp.exe
-}
+qtPrepareTool(QMAKE_DUMPCPP, dumpcpp)
 
 dumpcpp_decl.commands = $$QMAKE_DUMPCPP ${QMAKE_FILE_IN} -o ${QMAKE_FILE_BASE}
Index: /trunk/mkspecs/features/win32/qaxserver.prf
===================================================================
--- /trunk/mkspecs/features/win32/qaxserver.prf	(revision 768)
+++ /trunk/mkspecs/features/win32/qaxserver.prf	(revision 769)
@@ -15,5 +15,6 @@
 
 equals(ACTIVEQT_IDE, "VisualStudio") {
-    ACTIVEQT_IDC = $${QMAKE_IDC}
+    ACTIVEQT_IDC = $${QMAKE_IDC}   ### Qt5: remove me
+    qtPrepareTool(ACTIVEQT_IDC, idc)
     ACTIVEQT_IDL = $${QMAKE_IDL}
     ACTIVEQT_TARGET = "$(TargetPath)"
Index: /trunk/mkspecs/linux-g++-maemo/qplatformdefs.h
===================================================================
--- /trunk/mkspecs/linux-g++-maemo/qplatformdefs.h	(revision 768)
+++ /trunk/mkspecs/linux-g++-maemo/qplatformdefs.h	(revision 769)
@@ -41,2 +41,4 @@
 
 #include "../linux-g++/qplatformdefs.h"
+
+#define QT_GUI_DOUBLE_CLICK_RADIUS 20
Index: /trunk/mkspecs/symbian-abld/qplatformdefs.h
===================================================================
--- /trunk/mkspecs/symbian-abld/qplatformdefs.h	(revision 769)
+++ /trunk/mkspecs/symbian-abld/qplatformdefs.h	(revision 769)
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** 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 qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../common/symbian/qplatformdefs.h"
+
Index: /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm	(revision 768)
+++ /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm	(revision 769)
@@ -8,5 +8,4 @@
 # ****************************************************************************/
 
-include $(FLMHOME)/metaflm.mk
 
 SINGLETON:=$(call sanitise,TARGET_$(DEPLOY_TARGET))
@@ -15,5 +14,4 @@
 define qmake_emulator_deployment
 $(ALLTARGET):: $(1)
-FINAL::$(1)
 
 # Prevent duplicate targets from being created
Index: /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm	(revision 768)
+++ /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm	(revision 769)
@@ -8,19 +8,17 @@
 # ****************************************************************************/
 
-include $(FLMHOME)/metaflm.mk
 
 SINGLETON:=$(call sanitise,TARGET_$(PREDEP_TARGET))
 
+$(call makepathfor,$(PREDEP_TARGET))
+
 define qmake_extra_pre_targetdep
-$(ALLTARGET):: $(PREDEP_TARGET)
 EXPORT:: $(PREDEP_TARGET)
-LIBRARY:: $(PREDEP_TARGET)
-TARGET:: $(PREDEP_TARGET)
 
 # Prevent duplicate targets from being created
 $(SINGLETON):=1
 
-$(PREDEP_TARGET): $(DEPS) 
-	$(call startrule,qmake_extra_pre_targetdep) \
+$(PREDEP_TARGET): $(DEPS)
+	$(call startrule,qmake_extra_pre_targetdep,FORCESUCCESS) \
 	$(COMMAND) \
 	$(call endrule,qmake_extra_pre_targetdep)
Index: /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm	(revision 768)
+++ /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm	(revision 769)
@@ -8,5 +8,4 @@
 # ****************************************************************************/
 
-include $(FLMHOME)/metaflm.mk
 
 POST_LINK_TARGET:=POST_LINK_$(PLATFORM_PATH)_$(CFG_PATH)_$(call sanitise,$(LINK_TARGET))
@@ -22,5 +21,4 @@
 define qmake_post_link
 $(ALLTARGET):: $(POST_LINK_TARGET)
-FINAL:: $(POST_LINK_TARGET)
 
 $(POST_LINK_TARGET): $(POST_LINK_DEP)
Index: /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm	(revision 768)
+++ /trunk/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm	(revision 769)
@@ -8,5 +8,4 @@
 # ****************************************************************************/
 
-include $(FLMHOME)/metaflm.mk
 
 SINGLETON:=$(call sanitise,TSTORE_SINGLETON_$(EXTENSION_ROOT))
@@ -28,5 +27,5 @@
 
 define qmake_store_build
-FINAL:: $(STORE_BUILD_TARGET)
+$(ALLTARGET):: $(STORE_BUILD_TARGET)
 
 $(STORE_BUILD_TARGET):
Index: /trunk/mkspecs/symbian-sbsv2/flm/qt/qt.xml
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/flm/qt/qt.xml	(revision 768)
+++ /trunk/mkspecs/symbian-sbsv2/flm/qt/qt.xml	(revision 769)
@@ -17,5 +17,5 @@
 	<!-- Extension interfaces : replacements for Template Extension Makefiles -->
     
-    <interface name="qt.qmake_extra_pre_targetdep" extends="Symbian.UserFLM"
+    <interface name="qt.qmake_extra_pre_targetdep.export" extends="Symbian.UserFLM"
                 flm="qmake_extra_pre_targetdep.flm">
         <param name='PREDEP_TARGET' />
Index: /trunk/mkspecs/symbian-sbsv2/qplatformdefs.h
===================================================================
--- /trunk/mkspecs/symbian-sbsv2/qplatformdefs.h	(revision 769)
+++ /trunk/mkspecs/symbian-sbsv2/qplatformdefs.h	(revision 769)
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** 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 qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../common/symbian/qplatformdefs.h"
+
Index: /trunk/mkspecs/win32-g++/qmake.conf
===================================================================
--- /trunk/mkspecs/win32-g++/qmake.conf	(revision 768)
+++ /trunk/mkspecs/win32-g++/qmake.conf	(revision 769)
@@ -76,4 +76,5 @@
     MINGW_IN_SHELL      = 1
 	QMAKE_DIR_SEP		= /
+	QMAKE_QMAKE		~= s,\\\\,/,
 	QMAKE_COPY		= cp
 	QMAKE_COPY_DIR		= xcopy /s /q /y /i
Index: /trunk/projects.pro
===================================================================
--- /trunk/projects.pro	(revision 768)
+++ /trunk/projects.pro	(revision 769)
@@ -155,4 +155,8 @@
    mkspecs.commands += $(DEL_FILE) $(INSTALL_ROOT)$$mkspecs.path/default; $(SYMLINK) $$DEFAULT_QMAKESPEC $(INSTALL_ROOT)$$mkspecs.path/default
 }
+win32:!equals(QT_BUILD_TREE, $$QT_SOURCE_TREE) {
+    # When shadow building on Windows, the default mkspec only exists in the build tree.
+    mkspecs.files += $$QT_BUILD_TREE/mkspecs/default
+}
 INSTALLS += mkspecs
 
Index: /trunk/qmake/Makefile.os2-g++
===================================================================
--- /trunk/qmake/Makefile.os2-g++	(revision 768)
+++ /trunk/qmake/Makefile.os2-g++	(revision 769)
@@ -22,4 +22,5 @@
 		-I$(BUILD_PATH)/src/corelib/xml \
 		-I$(SOURCE_PATH)/mkspecs/os2-g++ \
+		-I$(SOURCE_PATH)/tools/shared \
 		-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \
 	    -DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DHAVE_QCONFIG_CPP \
@@ -116,5 +117,7 @@
 		$(SOURCE_PATH)/src/corelib/io/qfsfileengine_os2.cpp \
 		$(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator_os2.cpp \
-		$(SOURCE_PATH)/src/corelib/io/qsettings_os2.cpp
+		$(SOURCE_PATH)/src/corelib/io/qsettings_os2.cpp \
+        $(SOURCE_PATH)/tools/shared/windows/registry.cpp \
+        $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
 
 define SRC_TO_OBJ
@@ -161,2 +164,3 @@
 
 $(foreach src,$(SOURCES),$(eval $(call SRC_TO_OBJ_RULE,$(src))))
+
Index: /trunk/qmake/Makefile.unix
===================================================================
--- /trunk/qmake/Makefile.unix	(revision 768)
+++ /trunk/qmake/Makefile.unix	(revision 769)
@@ -12,4 +12,6 @@
      borland_bmake.o msvc_dsp.o msvc_vcproj.o msvc_nmake.o msvc_objectmodel.o \
      symmake.o initprojectdeploy_symbian.o symmake_abld.o symmake_sbsv2.o \
+     registry.o \
+     epocroot.o \
      gnumake.o
 
@@ -34,4 +36,6 @@
 	   generators/win32/msvc_objectmodel.cpp generators/win32/msvc_nmake.cpp generators/win32/borland_bmake.cpp \
 	   generators/symbian/symmake.cpp generators/symbian/initprojectdeploy_symbian.cpp \
+	   $(SOURCE_PATH)/tools/shared/windows/registry.cpp \
+	   $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp \
 	   generators/symbian/symmake_abld.cpp generators/symbian/symmake_sbsv2.cpp \
 	   generators/os2/gnumake.cpp \
@@ -65,4 +69,5 @@
 	   -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore \
 	   -I$(BUILD_PATH)/src/corelib/global -I$(BUILD_PATH)/src/corelib/xml \
+	   -I$(SOURCE_PATH)/tools/shared \
 	   -DQT_NO_PCRE \
 	   -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED \
@@ -284,4 +289,10 @@
 	$(CXX) -c -o $@ $(CXXFLAGS) generators/symbian/initprojectdeploy_symbian.cpp
 
+registry.o: $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+	$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+
+epocroot.o: $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+	$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+
 gnumake.o: generators/os2/gnumake.cpp
 	$(CXX) -c -o $@ $(CXXFLAGS) generators/os2/gnumake.cpp
@@ -295,4 +306,5 @@
 qxmlutils.o: $(SOURCE_PATH)/src/corelib/xml/qxmlutils.cpp
 	$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/xml/qxmlutils.cpp
+
 #default rules
 .cpp.o:
Index: /trunk/qmake/Makefile.win32
===================================================================
--- /trunk/qmake/Makefile.win32	(revision 768)
+++ /trunk/qmake/Makefile.win32	(revision 769)
@@ -35,4 +35,5 @@
               -I$(BUILD_PATH)\src\corelib\xml \
               -I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC)  \
+              -I$(SOURCE_PATH)\tools\shared \
               -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NODLL -DQT_NO_STL \
               -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP -DQT_BUILD_QMAKE -DQT_NO_THREAD \
@@ -60,4 +61,5 @@
 	-I$(BUILD_PATH)\src\corelib\global \
         -I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC)  \
+    -I$(SOURCE_PATH)\tools\shared \
 	-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NODLL -DQT_NO_STL \
 	-DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP -DQT_BUILD_QMAKE -DQT_NO_THREAD \
@@ -76,4 +78,6 @@
               borland_bmake.obj msvc_nmake.obj msvc_dsp.obj msvc_vcproj.obj \
               msvc_objectmodel.obj symmake.obj initprojectdeploy_symbian.obj \
+              registry.obj \
+              epocroot.obj \
               symmake_abld.obj symmake_sbsv2.obj gnumake.obj
 
@@ -199,4 +203,6 @@
 	-del symmake_sbsv2.obj
 	-del initprojectdeploy_symbian.obj
+	-del registry.obj
+	-del epocroot.obj
 	-del gnumake.obj
 	-del pbuilder_pbx.obj
@@ -399,4 +405,10 @@
 	$(CXX) $(CXXFLAGS) generators/symbian/initprojectdeploy_symbian.cpp
 
+registry.obj: $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+
+epocroot.obj: $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+
 gnumake.obj: $(SOURCE_PATH)/qmake/generators/os2/gnumake.cpp
 	$(CXX) $(CXXFLAGS) generators/os2/gnumake.cpp
Index: /trunk/qmake/Makefile.win32-g++
===================================================================
--- /trunk/qmake/Makefile.win32-g++	(revision 768)
+++ /trunk/qmake/Makefile.win32-g++	(revision 769)
@@ -22,4 +22,5 @@
 		-I$(BUILD_PATH)/src/corelib/xml \
 		-I$(SOURCE_PATH)/mkspecs/win32-g++  \
+		-I$(SOURCE_PATH)/tools/shared \
 		-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \
 		-DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP \
@@ -39,4 +40,6 @@
               borland_bmake.o msvc_nmake.o msvc_dsp.o msvc_vcproj.o \
               msvc_objectmodel.o symmake.o initprojectdeploy_symbian.o \
+              registry.o \
+              epocroot.o \
               symmake_abld.o symmake_sbsv2.o gnumake.o
 
@@ -279,4 +282,10 @@
 	$(CXX) $(CXXFLAGS) generators/symbian/initprojectdeploy_symbian.cpp
 
+registry.o: $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+
+epocroot.o: $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+
 gnumake.o: $(SOURCE_PATH)/qmake/generators/os2/gnumake.cpp
 	$(CXX) $(CXXFLAGS) generators/os2/gnumake.cpp
Index: /trunk/qmake/Makefile.win32-g++-sh
===================================================================
--- /trunk/qmake/Makefile.win32-g++-sh	(revision 768)
+++ /trunk/qmake/Makefile.win32-g++-sh	(revision 769)
@@ -22,4 +22,5 @@
 		-I$(BUILD_PATH)/src/corelib/xml \
 		-I$(SOURCE_PATH)/mkspecs/win32-g++  \
+		-I$(SOURCE_PATH)/tools/shared \
 		-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \
 		-DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP \
@@ -39,4 +40,6 @@
               borland_bmake.o msvc_nmake.o msvc_dsp.o msvc_vcproj.o \
               msvc_objectmodel.o symmake.o initprojectdeploy_symbian.o \
+              registry.o \
+              epocroot.o \
               symmake_abld.o symmake_sbsv2.o gnumake.o
 
@@ -278,4 +281,10 @@
 	$(CXX) $(CXXFLAGS) generators/symbian/initprojectdeploy_symbian.cpp
 
+registry.o: $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/windows/registry.cpp
+
+epocroot.o: $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+	$(CXX) $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/symbian/epocroot.cpp
+
 gnumake.o: $(SOURCE_PATH)/qmake/generators/os2/gnumake.cpp
 	$(CXX) $(CXXFLAGS) generators/os2/gnumake.cpp
Index: /trunk/qmake/generators/makefile.cpp
===================================================================
--- /trunk/qmake/generators/makefile.cpp	(revision 768)
+++ /trunk/qmake/generators/makefile.cpp	(revision 769)
@@ -1267,5 +1267,5 @@
             do_default = false;
             for(QStringList::Iterator wild_it = tmp.begin(); wild_it != tmp.end(); ++wild_it) {
-                QString wild = Option::fixPathToLocalOS((*wild_it), false, false);
+                QString wild = Option::fixPathToTargetOS((*wild_it), false, false);
                 QString dirstr = qmake_getpwd(), filestr = wild;
                 int slsh = filestr.lastIndexOf(Option::dir_sep);
@@ -1307,11 +1307,24 @@
                 QString local_dirstr = Option::fixPathToLocalOS(dirstr, true);
                 QStringList files = QDir(local_dirstr).entryList(QStringList(filestr));
-                if(project->values((*it) + ".CONFIG").indexOf("no_check_exist") != -1 && files.isEmpty()) {
+                const QStringList &installConfigValues = project->values((*it) + ".CONFIG");
+                if (installConfigValues.contains("no_check_exist") && files.isEmpty()) {
                     if(!target.isEmpty())
                         target += "\t";
                     QString dst_file = filePrefixRoot(root, dst);
                     QFileInfo fi(fileInfo(wild));
-                    QString cmd = inst_prefix + QString(fi.isExecutable() ? "$(INSTALL_PROGRAM)" : "$(INSTALL_FILE)") + " " +
-                                   wild + " " + dst_file + "\n";
+                    QString cmd;
+                    if (installConfigValues.contains("directory")) {
+                        cmd = QLatin1String(inst_prefix + "$(INSTALL_DIR)");
+                        if (!dst_file.endsWith(Option::dir_sep))
+                            dst_file += Option::dir_sep;
+                        dst_file += fi.fileName();
+                    } else if (installConfigValues.contains("executable")) {
+                        cmd = QLatin1String(inst_prefix + "$(INSTALL_PROGRAM)");
+                    } else if (installConfigValues.contains("data")) {
+                        cmd = QLatin1String(inst_prefix + "$(INSTALL_FILE)");
+                    } else {
+                        cmd = inst_prefix + QString(fi.isExecutable() ? "$(INSTALL_PROGRAM)" : "$(INSTALL_FILE)");
+                    }
+                    cmd += " " + wild + " " + dst_file + "\n";
                     target += cmd;
                     if(!uninst.isEmpty())
@@ -1878,6 +1891,7 @@
                     }
                 }
-                if(!cleans.isEmpty())
+                if(!cleans.isEmpty()) {
                     t << valGlue(cleans, "\n\t" + del_statement, del_suffix + "\n\t" + del_statement, del_suffix);
+                }
                 if(!wrote_clean_cmds) {
                     for(QStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) {
@@ -2592,4 +2606,5 @@
             if(!ofile.isEmpty())
                 t << "\t-$(DEL_FILE) " << ofile << del_suffix << endl;
+            t << varGlue("QMAKE_DISTCLEAN","\t-$(DEL_FILE) "," ","\n");
         } else if(project->isActiveConfig("no_empty_targets")) {
             t << "\t" << "@cd ." << endl;
Index: /trunk/qmake/generators/makefiledeps.cpp
===================================================================
--- /trunk/qmake/generators/makefiledeps.cpp	(revision 768)
+++ /trunk/qmake/generators/makefiledeps.cpp	(revision 769)
@@ -398,5 +398,5 @@
         for(int have_read = 0;
             (have_read = QT_READ(fd, buffer + buffer_len, fst.st_size - buffer_len));
-            buffer_len += have_read);
+            buffer_len += have_read) ;
         QT_CLOSE(fd);
     }
@@ -419,20 +419,20 @@
                 if(buffer_len >= x + 12 && !strncmp(buffer + x, "includehint", 11) &&
                    (*(buffer + x + 11) == ' ' || *(buffer + x + 11) == '>')) {
-                    for(x += 11; *(buffer + x) != '>'; ++x);
+                    for(x += 11; *(buffer + x) != '>'; ++x) ;
                     int inc_len = 0;
-                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);
+                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len) ;
                     *(buffer + x + inc_len) = '\0';
                     inc = buffer + x;
                 } else if(buffer_len >= x + 13 && !strncmp(buffer + x, "customwidget", 12) &&
                           (*(buffer + x + 12) == ' ' || *(buffer + x + 12) == '>')) {
-                    for(x += 13; *(buffer + x) != '>'; ++x); //skip up to >
+                    for(x += 13; *(buffer + x) != '>'; ++x) ; //skip up to >
                     while(x < buffer_len) {
-                        for(x++; *(buffer + x) != '<'; ++x); //skip up to <
+                        for(x++; *(buffer + x) != '<'; ++x) ; //skip up to <
                         x++;
                         if(buffer_len >= x + 7 && !strncmp(buffer+x, "header", 6) &&
                            (*(buffer + x + 6) == ' ' || *(buffer + x + 6) == '>')) {
-                            for(x += 7; *(buffer + x) != '>'; ++x); //skip up to >
+                            for(x += 7; *(buffer + x) != '>'; ++x) ; //skip up to >
                             int inc_len = 0;
-                            for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);
+                            for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len) ;
                             *(buffer + x + inc_len) = '\0';
                             inc = buffer + x;
@@ -449,8 +449,8 @@
                         if(buffer_len >= x + 9 && *(buffer + x) == 'i' &&
                            !strncmp(buffer + x, "impldecl", 8)) {
-                            for(x += 8; *(buffer + x) != '='; ++x);
+                            for(x += 8; *(buffer + x) != '='; ++x) ;
                             if(*(buffer + x) != '=')
                                 continue;
-                            for(++x; *(buffer+x) == '\t' || *(buffer+x) == ' '; ++x);
+                            for(++x; *(buffer+x) == '\t' || *(buffer+x) == ' '; ++x) ;
                             char quote = 0;
                             if(*(buffer+x) == '\'' || *(buffer+x) == '"') {
@@ -476,5 +476,5 @@
                     }
                     int inc_len = 0;
-                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);
+                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len) ;
                     *(buffer + x + inc_len) = '\0';
                     inc = buffer + x;
@@ -482,5 +482,5 @@
             }
             //read past new line now..
-            for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x);
+            for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x) ;
             ++line_count;
         } else if(file->type == QMakeSourceFileInfo::TYPE_QRC) {
@@ -495,5 +495,5 @@
                         if(buffer_len >= x) {
                             if(*(buffer+x) == '/') { //c++ style comment
-                                for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x);
+                                for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x) ;
                                 beginning = 1;
                             } else if(*(buffer+x) == '*') { //c style comment
@@ -559,5 +559,5 @@
                     for(x+=keyword_len; //skip spaces after keyword
                         x < buffer_len && (*(buffer+x) == ' ' || *(buffer+x) == '\t');
-                        x++);
+                        x++) ;
                     break;
                 } else if(qmake_endOfLine(*(buffer+x+keyword_len))) {
@@ -580,5 +580,5 @@
 
                 int inc_len;
-                for(inc_len = 0; *(buffer + x + inc_len) != term && !qmake_endOfLine(*(buffer + x + inc_len)); ++inc_len);
+                for(inc_len = 0; *(buffer + x + inc_len) != term && !qmake_endOfLine(*(buffer + x + inc_len)); ++inc_len) ;
                 *(buffer + x + inc_len) = '\0';
                 inc = buffer + x;
@@ -595,5 +595,5 @@
                 int msg_len;
                 for(msg_len = 0; (term && *(buffer + x + msg_len) != term) &&
-                              !qmake_endOfLine(*(buffer + x + msg_len)); ++msg_len);
+                              !qmake_endOfLine(*(buffer + x + msg_len)); ++msg_len) ;
                 *(buffer + x + msg_len) = '\0';
                 debug_msg(0, "%s:%d %s -- %s", file->file.local().toLatin1().constData(), line_count, keyword, buffer+x);
@@ -707,5 +707,5 @@
         for(int have_read = buffer_len = 0;
             (have_read = QT_READ(fd, buffer + buffer_len, fst.st_size - buffer_len));
-            buffer_len += have_read);
+            buffer_len += have_read) ;
         QT_CLOSE(fd);
     }
@@ -721,5 +721,5 @@
             if(buffer_len >= x) {
                 if(*(buffer + x) == '/') { //c++ style comment
-                    for(;x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x);
+                    for(;x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x) ;
                 } else if(*(buffer + x) == '*') { //c style comment
                     for(++x; x < buffer_len; ++x) {
Index: unk/qmake/generators/symbian/epocroot.h
===================================================================
--- /trunk/qmake/generators/symbian/epocroot.h	(revision 768)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/****************************************************************************
-**
-** 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 qmake application of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** 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.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef EPOCROOT_H
-#define EPOCROOT_H
-
-#include <qstring.h>
-
-// Implementation of epocRoot method is in initprojectdeploy_symbian.cpp
-// Defined in separate header for inclusion clarity
-extern QString epocRoot();
-
-#endif // EPOCROOT_H
Index: /trunk/qmake/generators/symbian/initprojectdeploy_symbian.cpp
===================================================================
--- /trunk/qmake/generators/symbian/initprojectdeploy_symbian.cpp	(revision 768)
+++ /trunk/qmake/generators/symbian/initprojectdeploy_symbian.cpp	(revision 769)
@@ -47,5 +47,8 @@
 #include <qdebug.h>
 
-#define SYSBIN_DIR "\\sys\\bin"
+// Included from tools/shared
+#include <symbian/epocroot.h>
+
+#define SYSBIN_DIR "/sys/bin"
 
 #define SUFFIX_DLL "dll"
@@ -53,96 +56,9 @@
 #define SUFFIX_QTPLUGIN "qtplugin"
 
-static void fixEpocRootStr(QString& path)
-{
-    path.replace("\\", "/");
-
-    if (path.size() > 1 && path[1] == QChar(':')) {
-        path = path.mid(2);
-    }
-
-    if (!path.size() || path[path.size()-1] != QChar('/')) {
-        path += QChar('/');
-    }
-}
-
-#define SYMBIAN_SDKS_KEY "HKEY_LOCAL_MACHINE\\Software\\Symbian\\EPOC SDKs"
-
-static QString epocRootStr;
-
-QString epocRoot()
-{
-    if (!epocRootStr.isEmpty()) {
-        return epocRootStr;
-    }
-
-    // First, check the env variable
-    epocRootStr = qgetenv("EPOCROOT");
-
-    if (epocRootStr.isEmpty()) {
-        // No EPOCROOT set, check the default device
-        // First check EPOCDEVICE env variable
-        QString defaultDevice = qgetenv("EPOCDEVICE");
-
-        // Check the windows registry via QSettings for devices.xml path
-        QSettings settings(SYMBIAN_SDKS_KEY, QSettings::NativeFormat);
-        QString devicesXmlPath = settings.value("CommonPath").toString();
-
-        if (!devicesXmlPath.isEmpty()) {
-            // Parse xml for correct device
-            devicesXmlPath += "/devices.xml";
-            QFile devicesFile(devicesXmlPath);
-            if (devicesFile.open(QIODevice::ReadOnly)) {
-                QXmlStreamReader xml(&devicesFile);
-                while (!xml.atEnd()) {
-                    xml.readNext();
-                    if (xml.isStartElement() && xml.name() == "devices") {
-                        if (xml.attributes().value("version") == "1.0") {
-                            // Look for correct device
-                            while (!(xml.isEndElement() && xml.name() == "devices") && !xml.atEnd()) {
-                                xml.readNext();
-                                if (xml.isStartElement() && xml.name() == "device") {
-                                    if ((defaultDevice.isEmpty() && xml.attributes().value("default") == "yes") ||
-                                        (!defaultDevice.isEmpty() && (xml.attributes().value("id").toString() + QString(":") + xml.attributes().value("name").toString()) == defaultDevice)) {
-                                        // Found the correct device
-                                        while (!(xml.isEndElement() && xml.name() == "device") && !xml.atEnd()) {
-                                            xml.readNext();
-                                            if (xml.isStartElement() && xml.name() == "epocroot") {
-                                                epocRootStr = xml.readElementText();
-                                                fixEpocRootStr(epocRootStr);
-                                                return epocRootStr;
-                                            }
-                                        }
-                                        xml.raiseError("No epocroot element found");
-                                    }
-                                }
-                            }
-                        } else {
-                            xml.raiseError("Invalid 'devices' element version");
-                        }
-                    }
-                }
-                if (xml.hasError()) {
-                    fprintf(stderr, "ERROR: \"%s\" when parsing devices.xml\n", qPrintable(xml.errorString()));
-                }
-            } else {
-                fprintf(stderr, "Could not open devices.xml (%s)\n", qPrintable(devicesXmlPath));
-            }
-        } else {
-            fprintf(stderr, "Could not retrieve " SYMBIAN_SDKS_KEY " setting\n");
-        }
-
-        fprintf(stderr, "Failed to determine epoc root.\n");
-        if (!defaultDevice.isEmpty())
-            fprintf(stderr, "The device indicated by EPOCDEVICE environment variable (%s) could not be found.\n", qPrintable(defaultDevice));
-        fprintf(stderr, "Either set EPOCROOT or EPOCDEVICE environment variable to a valid value, or provide a default Symbian device.\n");
-
-        // No valid device found; set epocroot to "/"
-        epocRootStr = QLatin1String("/");
-    }
-
-    fixEpocRootStr(epocRootStr);
-    return epocRootStr;
-}
-
+static QString fixPathToEpocOS(const QString &src)
+{
+    QString ret = Option::fixPathToTargetOS(src);
+    return ret.replace('/', '\\');
+}
 
 static bool isPlugin(const QFileInfo& info, const QString& devicePath)
@@ -176,10 +92,10 @@
                              QStringList& generatedFiles)
 {
-    QDir().mkpath(QLatin1String(PLUGIN_STUB_DIR "\\"));
+    QDir().mkpath(QLatin1String(PLUGIN_STUB_DIR));
     if (!generatedDirs.contains(PLUGIN_STUB_DIR))
         generatedDirs << PLUGIN_STUB_DIR;
     // Plugin stubs must have different name from the actual plugins, because
     // the toolchain for creating ROM images cannot handle non-binary .dll files properly.
-    QFile stubFile(QLatin1String(PLUGIN_STUB_DIR "\\") + info.completeBaseName() + "." SUFFIX_QTPLUGIN);
+    QFile stubFile(QLatin1String(PLUGIN_STUB_DIR "/") + info.completeBaseName() + "." SUFFIX_QTPLUGIN);
     if (stubFile.open(QIODevice::WriteOnly)) {
         if (!generatedFiles.contains(stubFile.fileName()))
@@ -195,5 +111,5 @@
     QFileInfo stubInfo(stubFile);
     deploymentList.append(CopyItem(Option::fixPathToLocalOS(stubInfo.absoluteFilePath()),
-                                   Option::fixPathToLocalOS(devicePath + "\\" + stubInfo.fileName())));
+                                   fixPathToEpocOS(devicePath + "/" + stubInfo.fileName())));
 }
 
@@ -208,5 +124,5 @@
     }
 
-    unsigned long hash = 5381;
+    quint32 hash = 5381;
     int c;
 
@@ -259,8 +175,21 @@
     foreach(QString item, project->values("DEPLOYMENT")) {
         QString devicePath = project->first(item + ".path");
+        QString devicePathWithoutDrive = devicePath;
+
+        bool devicePathHasDriveLetter = false;
+        if (devicePath.size() > 1) {
+            devicePathHasDriveLetter = devicePath.at(1) == QLatin1Char(':');
+        }
+
+        // Sometimes devicePath can contain disk but APP_RESOURCE_DIR does not,
+        // so remove the drive letter for comparison purposes.
+        if (devicePathHasDriveLetter)
+        {
+            devicePathWithoutDrive.remove(0,2);
+        }
         if (!deployBinaries
-                && !devicePath.isEmpty()
-                && (0 == devicePath.compare(project->values("APP_RESOURCE_DIR").join(""), Qt::CaseInsensitive)
-                    || 0 == devicePath.compare(project->values("REG_RESOURCE_IMPORT_DIR").join(""), Qt::CaseInsensitive))) {
+                && !devicePathWithoutDrive.isEmpty()
+                && (0 == devicePathWithoutDrive.compare(project->values("APP_RESOURCE_DIR").join(""), Qt::CaseInsensitive)
+                    || 0 == devicePathWithoutDrive.compare(project->values("REG_RESOURCE_IMPORT_DIR").join(""), Qt::CaseInsensitive))) {
             // Do not deploy resources in emulator builds, as that seems to cause conflicts
             // If there is ever a real need to deploy pre-built resources for emulator,
@@ -269,9 +198,4 @@
         }
 
-        bool devicePathHasDriveLetter = false;
-        if (devicePath.size() > 1) {
-            devicePathHasDriveLetter = devicePath.at(1) == QLatin1Char(':');
-        }
-
         if (devicePath.isEmpty() || devicePath == QLatin1String(".")) {
             devicePath = targetPath;
@@ -281,22 +205,33 @@
                    || devicePath.at(0) == QLatin1Char('\\')
                    || devicePathHasDriveLetter)) {
-            // create output path
-            devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath));
+            // Create output path
+            devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('/') + devicePath));
         } else {
-            if (0 == platform.compare(QLatin1String("winscw"), Qt::CaseInsensitive)) {
+            if (!platform.compare(QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM))) {
                 if (devicePathHasDriveLetter) {
-                    devicePath = epocRoot() + "epoc32\\winscw\\" + devicePath.remove(1, 1);
+                    devicePath = epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1);
                 } else {
-                    devicePath = epocRoot() + "epoc32\\winscw\\c" + devicePath;
+                    devicePath = epocRoot() + "epoc32/winscw/c" + devicePath;
                 }
             } else {
-                // Drive letter needed if targetpath contains one and it is not already in
-                if (targetPathHasDriveLetter && !devicePathHasDriveLetter) {
-                    devicePath = deploymentDrive + devicePath;
+                if (!devicePathHasDriveLetter) {
+                    if (!platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) {
+                        //For plugin deployment under ARM no needed drive letter
+                        devicePath = epocRoot() + "epoc32/data/z" + devicePath;
+                    } else if (targetPathHasDriveLetter) {
+                        // Drive letter needed if targetpath contains one and it is not already in
+                        devicePath = deploymentDrive + devicePath;
+                    }
+                } else {
+                    //it is necessary to delete drive letter for ARM deployment
+                    if (!platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) {
+                        devicePath.remove(0,2);
+                        devicePath = epocRoot() + "epoc32/data/z" + devicePath;
+                    }
                 }
             }
         }
 
-        devicePath.replace(QLatin1String("/"), QLatin1String("\\"));
+        devicePath.replace(QLatin1String("\\"), QLatin1String("/"));
 
         if (!deployBinaries &&
@@ -322,5 +257,5 @@
             } else {
                 if (info.exists() || source.indexOf('*') != -1) {
-                    nameFilter = source.split('\\').last();
+                    nameFilter = source.split(QDir::separator()).last();
                     searchPath = info.absolutePath();
                 } else {
@@ -330,11 +265,17 @@
                         if (deployBinaries) {
                             // Executables and libraries are deployed to \sys\bin
-                            QFileInfo releasePath(epocRoot() + "epoc32\\release\\" + platform + "\\" + build + "\\");
+                            QFileInfo targetPath(epocRoot() + "epoc32/release/" + platform + "/" + build + "/");
                             if(devicePathHasDriveLetter) {
-                                deploymentList.append(CopyItem(Option::fixPathToLocalOS(releasePath.absolutePath() + "\\" + info.fileName(), false, true),
-                                                               Option::fixPathToLocalOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "\\") + info.fileName())));
+                                deploymentList.append(CopyItem(
+                                    Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(),
+                                    false, true),
+                                    fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/")
+                                    + info.fileName())));
                             } else {
-                                deploymentList.append(CopyItem(Option::fixPathToLocalOS(releasePath.absolutePath() + "\\" + info.fileName(), false, true),
-                                                               Option::fixPathToLocalOS(deploymentDrive + QLatin1String(SYSBIN_DIR "\\") + info.fileName())));
+                                deploymentList.append(CopyItem(
+                                    Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(),
+                                    false, true),
+                                    fixPathToEpocOS(deploymentDrive + QLatin1String(SYSBIN_DIR "/")
+                                    + info.fileName())));
                             }
                         }
@@ -347,5 +288,5 @@
                         // when generating .pkg files.
                         deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absoluteFilePath()),
-                                                       Option::fixPathToLocalOS(devicePath + "\\" + info.fileName())));
+                                                       fixPathToEpocOS(devicePath + "/" + info.fileName())));
                         continue;
                     }
@@ -369,12 +310,24 @@
                         // as they have SYSBIN_DIR target path.
                         if (deployBinaries) {
-                            deploymentList.append(CopyItem(Option::fixPathToLocalOS(absoluteItemPath + "\\" + iterator.fileName()),
-                                                           Option::fixPathToLocalOS(deploymentDrive + QLatin1String(SYSBIN_DIR "\\") + iterator.fileName())));
+                            if (devicePathHasDriveLetter) {
+                                deploymentList.append(CopyItem(
+                                    Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
+                                    fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/")
+                                    + iterator.fileName())));
+                            } else {
+                                deploymentList.append(CopyItem(
+                                    Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
+                                    fixPathToEpocOS(deploymentDrive + QLatin1String(SYSBIN_DIR "/")
+                                    + iterator.fileName())));
+                            }
                         }
-                        createPluginStub(info, devicePath + "\\" + absoluteItemPath.right(diffSize), deploymentList, generatedDirs, generatedFiles);
+                        createPluginStub(info, devicePath + "/" + absoluteItemPath.right(diffSize),
+                            deploymentList, generatedDirs, generatedFiles);
                         continue;
                     } else {
-                        deploymentList.append(CopyItem(Option::fixPathToLocalOS(absoluteItemPath + "\\" + iterator.fileName()),
-                                                       Option::fixPathToLocalOS(devicePath + "\\" + absoluteItemPath.right(diffSize) + "\\" + iterator.fileName())));
+                        deploymentList.append(CopyItem(
+                            Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
+                            fixPathToEpocOS(devicePath + "/" + absoluteItemPath.right(diffSize)
+                            + "/" + iterator.fileName())));
                     }
                 }
Index: /trunk/qmake/generators/symbian/initprojectdeploy_symbian.h
===================================================================
--- /trunk/qmake/generators/symbian/initprojectdeploy_symbian.h	(revision 768)
+++ /trunk/qmake/generators/symbian/initprojectdeploy_symbian.h	(revision 769)
@@ -51,7 +51,7 @@
 #include <stdlib.h>
 
-#include "epocroot.h"
-
 #define PLUGIN_STUB_DIR "qmakepluginstubs"
+#define ROM_DEPLOYMENT_PLATFORM "rom"
+#define EMULATOR_DEPLOYMENT_PLATFORM "emulator"
 
 struct CopyItem
Index: /trunk/qmake/generators/symbian/symmake.cpp
===================================================================
--- /trunk/qmake/generators/symbian/symmake.cpp	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake.cpp	(revision 769)
@@ -50,4 +50,7 @@
 #include <qdebug.h>
 
+// Included from tools/shared
+#include <symbian/epocroot.h>
+
 #define RESOURCE_DIRECTORY_MMP "/resource/apps"
 #define RESOURCE_DIRECTORY_RESOURCE "\\\\resource\\\\apps\\\\"
@@ -55,5 +58,4 @@
 #define PLUGIN_COMMON_DEF_FILE_FOR_MMP "./plugin_common.def"
 #define PLUGIN_COMMON_DEF_FILE_ACTUAL "plugin_commonU.def"
-#define BLD_INF_FILENAME_LEN (sizeof(BLD_INF_FILENAME) - 1)
 
 #define BLD_INF_RULES_BASE "BLD_INF_RULES."
@@ -62,5 +64,5 @@
 #define BLD_INF_TAG_TESTMMPFILES "prj_testmmpfiles"
 #define BLD_INF_TAG_EXTENSIONS "prj_extensions"
-#define BLD_INF_TAG_EXPORTS "prj_exports"
+#define BLD_INF_TAG_TESTEXTENSIONS "prj_testextensions"
 
 #define RSS_RULES "RSS_RULES"
@@ -68,14 +70,16 @@
 #define RSS_TAG_NBROFICONS "number_of_icons"
 #define RSS_TAG_ICONFILE "icon_file"
+#define RSS_TAG_HEADER "header"
+#define RSS_TAG_SERVICE_LIST "service_list"
+#define RSS_TAG_FILE_OWNERSHIP_LIST "file_ownership_list"
+#define RSS_TAG_DATATYPE_LIST "datatype_list"
+#define RSS_TAG_FOOTER "footer"
+#define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag
 
 #define MMP_TARGET "TARGET"
 #define MMP_TARGETTYPE "TARGETTYPE"
 #define MMP_SECUREID "SECUREID"
-#define MMP_OPTION_CW "OPTION CW"
-#define MMP_OPTION_ARMCC "OPTION ARMCC"
-#define MMP_OPTION_GCCE "OPTION GCCE"
-#define MMP_LINKEROPTION_CW "LINKEROPTION CW"
-#define MMP_LINKEROPTION_ARMCC "LINKEROPTION ARMCC"
-#define MMP_LINKEROPTION_GCCE "LINKEROPTION GCCE"
+#define MMP_OPTION "OPTION"
+#define MMP_LINKEROPTION "LINKEROPTION"
 #define MMP_CAPABILITY "CAPABILITY"
 #define MMP_EPOCALLOWDLLDATA "EPOCALLOWDLLDATA"
@@ -88,8 +92,14 @@
 #define MMP_END_RESOURCE "END"
 
+#define VAR_CXXFLAGS "QMAKE_CXXFLAGS"
+#define VAR_CFLAGS "QMAKE_CFLAGS"
+#define VAR_LFLAGS "QMAKE_LFLAGS"
+
 #define SIS_TARGET "sis"
 #define INSTALLER_SIS_TARGET "installer_sis"
+#define ROM_STUB_SIS_TARGET "stub_sis"
 #define OK_SIS_TARGET "ok_sis"
 #define OK_INSTALLER_SIS_TARGET "ok_installer_sis"
+#define OK_ROM_STUB_SIS_TARGET "ok_stub_sis"
 #define FAIL_SIS_NOPKG_TARGET "fail_sis_nopkg"
 #define FAIL_SIS_NOCACHE_TARGET "fail_sis_nocache"
@@ -106,9 +116,11 @@
     static QString epocRootStr;
     if (epocRootStr.isEmpty()) {
-        QFileInfo efi(epocRoot());
-        epocRootStr = efi.canonicalFilePath();
-        if (epocRootStr.isEmpty()) {
+        epocRootStr = epocRoot();
+        QFileInfo efi(epocRootStr);
+        if (!efi.exists() || epocRootStr.isEmpty()) {
             fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(epocRoot()));
             epocRootStr = "/";
+        } else {
+            epocRootStr = efi.absoluteFilePath();
         }
         if (!epocRootStr.endsWith("/"))
@@ -134,14 +146,6 @@
 }
 
-QString SymbianMakefileGenerator::canonizePath(const QString& origPath)
-{
-    // Since current path gets appended almost always anyway, use it as default
-    // for nonexisting paths.
-    static QString defaultPath;
-    if (defaultPath.isEmpty()) {
-        QFileInfo fi(".");
-        defaultPath = fi.canonicalFilePath();
-    }
-
+QString SymbianMakefileGenerator::absolutizePath(const QString& origPath)
+{
     // Prepend epocroot to any paths beginning with "/epoc32/"
     QString resultPath = QDir::fromNativeSeparators(origPath);
@@ -150,14 +154,15 @@
 
     QFileInfo fi(fileInfo(resultPath));
-    if (fi.isDir()) {
-        resultPath = fi.canonicalFilePath();
+
+    // Since origPath can be something given in HEADERS, we need to check if we are dealing
+    // with a file or a directory. In case the origPath doesn't yet exist, isFile() returns
+    // false and we default to assuming it is a dir.
+    if (fi.isFile()) {
+        resultPath = fi.absolutePath();
     } else {
-        resultPath = fi.canonicalPath();
+        resultPath = fi.absoluteFilePath();
     }
 
     resultPath = QDir::cleanPath(resultPath);
-
-    if (resultPath.isEmpty())
-        resultPath = defaultPath;
 
     return resultPath;
@@ -202,5 +207,5 @@
     QString numberOfIcons;
     QString iconFile;
-    QStringList userRssRules;
+    QMap<QString, QStringList> userRssRules;
     readRssRules(numberOfIcons, iconFile, userRssRules);
 
@@ -235,5 +240,7 @@
     QString outputFileName = fileInfo(Option::output.fileName()).fileName();
     if (outputFileName != BLD_INF_FILENAME) {
-        wrapperFileName.append(".").append((outputFileName.size() > BLD_INF_FILENAME_LEN && outputFileName.left(BLD_INF_FILENAME_LEN) == BLD_INF_FILENAME) ? outputFileName.mid(8) : outputFileName);
+        wrapperFileName.append(".").append(outputFileName.startsWith(BLD_INF_FILENAME)
+                                           ? outputFileName.mid(sizeof(BLD_INF_FILENAME))
+                                           : outputFileName);
         isPrimaryMakefile = false;
     }
@@ -269,5 +276,5 @@
 
     if (targetType == TypeExe) {
-        if (!project->values("CONFIG").contains("no_icon", Qt::CaseInsensitive)) {
+        if (!project->isActiveConfig("no_icon")) {
             writeRegRssFile(userRssRules);
             writeRssFile(numberOfIcons, iconFile);
@@ -316,5 +323,9 @@
 
     // Construct QStringList from pkg_prerules since we need search it before printed to file
+    // Note: Though there can't be more than one language or header line, use stringlists
+    // in case user wants comments to go with the rules.
     QStringList rawPkgPreRules;
+    QStringList languageRules;
+    QStringList headerRules;
     foreach(QString deploymentItem, project->values("DEPLOYMENT")) {
         foreach(QString pkgrulesItem, project->values(deploymentItem + ".pkg_prerules")) {
@@ -323,8 +334,23 @@
             // This is convenience for defining single line mmp statements
             if (pkgrulesValue.isEmpty()) {
-                rawPkgPreRules << pkgrulesItem;
+                if (pkgrulesItem.startsWith("&"))
+                    languageRules << pkgrulesItem;
+                else if (pkgrulesItem.startsWith("#"))
+                    headerRules << pkgrulesItem;
+                else
+                    rawPkgPreRules << pkgrulesItem;
             } else {
-                foreach(QString pkgrule, pkgrulesValue) {
-                    rawPkgPreRules << pkgrule;
+                if (containsStartWithItem('&', pkgrulesValue)) {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        languageRules << pkgrule;
+                    }
+                } else if (containsStartWithItem('#', pkgrulesValue)) {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        headerRules << pkgrule;
+                    }
+                } else {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        rawPkgPreRules << pkgrule;
+                    }
                 }
             }
@@ -334,14 +360,14 @@
     // Apply some defaults if specific data does not exist in PKG pre-rules
 
-    if (!containsStartWithItem('&', rawPkgPreRules)) {
+    if (languageRules.isEmpty()) {
         // language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS)
-        QString languageCode = "; Language\n&EN\n\n";
-        t << languageCode;
-        tw << languageCode;
-    } else {
+        languageRules << "; Language\n&EN\n\n";
+    } else if (headerRules.isEmpty()) {
         // In case user defines langs, he must take care also about SIS header
-        if (!containsStartWithItem('#', rawPkgPreRules))
-            fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n");
-    }
+        fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n");
+    }
+
+    t << languageRules.join("\n") << endl;
+    tw << languageRules.join("\n") << endl;
 
     // name of application, UID and version
@@ -358,7 +384,8 @@
     }
 
-    if (!containsStartWithItem('#', rawPkgPreRules)) {
+    if (headerRules.isEmpty())
         t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion);
-    }
+    else
+        t << headerRules.join("\n") << endl;
 
     // Localized vendor name
@@ -425,5 +452,5 @@
 
         // deploy rsc & reg_rsc file
-        if (!project->values("CONFIG").contains("no_icon", Qt::CaseInsensitive)) {
+        if (!project->isActiveConfig("no_icon")) {
             t << QString("\"%1epoc32/data/z/resource/apps/%2\"    - \"%3\\%4\"")
                  .arg(epocRoot())
@@ -450,4 +477,5 @@
     QString remoteTestPath;
     remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
+    QString zDir = epocRoot() + QLatin1String("epoc32/data/z");
 
     initProjectDeploySymbian(project, depList, remoteTestPath, true, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
@@ -455,7 +483,21 @@
         t << "; DEPLOYMENT" << endl;
     for (int i = 0; i < depList.size(); ++i)  {
-        t << QString("\"%1\"    - \"%2\"")
-             .arg(QString(depList.at(i).from).replace('\\','/'))
-             .arg(depList.at(i).to) << endl;
+        QString from = depList.at(i).from;
+        QString to = depList.at(i).to;
+
+        // Deploy anything not already deployed from under epoc32 instead from under
+        // \epoc32\data\z\ to enable using pkg file without rebuilding
+        // the project, which can be useful for some binary only distributions.
+        if (!from.contains(QLatin1String("epoc32"), Qt::CaseInsensitive)) {
+            from = to;
+            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
+                from = from.mid(2);
+            from.prepend(zDir);
+        } else {
+            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
+                from = from.mid(2);
+        }
+
+        t << QString("\"%1\"    - \"%2\"").arg(from.replace('\\','/')).arg(to) << endl;
     }
     t << endl;
@@ -542,5 +584,5 @@
 void SymbianMakefileGenerator::writeCustomDefFile()
 {
-    if (targetType == TypePlugin && !project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive)) {
+    if (targetType == TypePlugin && !project->isActiveConfig("stdbinary")) {
         // Create custom def file for plugin
         QFile ft(QLatin1String(PLUGIN_COMMON_DEF_FILE_ACTUAL));
@@ -607,7 +649,7 @@
     else if ((project->values("TEMPLATE")).contains("lib")) {
         // Check CONFIG to see if we are to build staticlib or dll
-        if (project->values("CONFIG").contains("staticlib") || project->values("CONFIG").contains("static"))
+        if (project->isActiveConfig("staticlib") || project->isActiveConfig("static"))
             targetType = TypeLib;
-        else if (project->values("CONFIG").contains("plugin"))
+        else if (project->isActiveConfig("plugin"))
             targetType = TypePlugin;
         else
@@ -619,5 +661,5 @@
     if (0 != project->values("TARGET.UID2").size()) {
         uid2 = project->first("TARGET.UID2");
-    } else if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive)) {
+    } else if (project->isActiveConfig("stdbinary")) {
         uid2 = "0x20004C45";
     } else {
@@ -690,5 +732,5 @@
 
     QDir current = QDir::current();
-    QString canonizedCurrent = canonizePath(".");
+    QString absolutizedCurrent = absolutizePath(".");
 
     for (int j = 0; j < srcpaths.size(); ++j) {
@@ -698,8 +740,8 @@
             if (fi.filePath().length() > fi.fileName().length()) {
                 appendIfnotExist(srcincpaths, fi.path());
-                sources[canonizePath(fi.path())] += fi.fileName();
+                sources[absolutizePath(fi.path())] += fi.fileName();
             } else {
-                sources[canonizedCurrent] += fi.fileName();
-                appendIfnotExist(srcincpaths, canonizedCurrent);
+                sources[absolutizedCurrent] += fi.fileName();
+                appendIfnotExist(srcincpaths, absolutizedCurrent);
             }
         }
@@ -715,5 +757,5 @@
 
     for (int j = 0; j < incpaths.size(); ++j) {
-        QString includepath = canonizePath(incpaths.at(j));
+        QString includepath = absolutizePath(incpaths.at(j));
         appendIfnotExist(sysincspaths, includepath);
         appendAbldTempDirs(sysincspaths, includepath);
@@ -757,13 +799,10 @@
     bool inResourceBlock = false;
 
-    overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE);
+    overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE) << QLatin1String(MMP_EPOCHEAPSIZE);
     restrictableMmpKeywords << QLatin1String(MMP_TARGET) << QLatin1String(MMP_SECUREID)
-       << QLatin1String(MMP_OPTION_CW) << QLatin1String(MMP_OPTION_ARMCC)
-       << QLatin1String(MMP_OPTION_GCCE) << QLatin1String(MMP_LINKEROPTION_CW)
-       << QLatin1String(MMP_LINKEROPTION_ARMCC) << QLatin1String(MMP_LINKEROPTION_GCCE)
+       << QLatin1String(MMP_OPTION) << QLatin1String(MMP_LINKEROPTION)
        << QLatin1String(MMP_CAPABILITY) << QLatin1String(MMP_EPOCALLOWDLLDATA)
-       << QLatin1String(MMP_EPOCHEAPSIZE) << QLatin1String(MMP_EPOCSTACKSIZE)
-       << QLatin1String(MMP_UID) << QLatin1String(MMP_VENDORID)
-       << QLatin1String(MMP_VERSION);
+       << QLatin1String(MMP_EPOCSTACKSIZE) << QLatin1String(MMP_UID)
+       << QLatin1String(MMP_VENDORID) << QLatin1String(MMP_VERSION);
 
     foreach (QString item, project->values("MMP_RULES")) {
@@ -886,5 +925,5 @@
         t << endl;
 
-        if (!project->values("CONFIG").contains("static") && !project->values("CONFIG").contains("staticlib")) {
+        if (!project->isActiveConfig("static") && !project->isActiveConfig("staticlib")) {
             writeMmpFileLibraryPart(t);
         }
@@ -935,9 +974,10 @@
 {
     bool skipTargetType = overriddenMmpKeywords.contains(MMP_TARGETTYPE);
+    bool skipEpocHeapSize = overriddenMmpKeywords.contains(MMP_EPOCHEAPSIZE);
 
     if (targetType == TypeExe) {
         t << MMP_TARGET "\t\t" << fixedTarget << ".exe" << endl;
         if (!skipTargetType) {
-            if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
+            if (project->isActiveConfig("stdbinary"))
                 t << MMP_TARGETTYPE "\t\tSTDEXE" << endl;
             else
@@ -947,5 +987,5 @@
         t << MMP_TARGET "\t\t" << fixedTarget << ".dll" << endl;
         if (!skipTargetType) {
-            if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
+            if (project->isActiveConfig("stdbinary"))
                 t << MMP_TARGETTYPE "\t\tSTDDLL" << endl;
             else
@@ -955,5 +995,5 @@
         t << MMP_TARGET "\t\t" << fixedTarget << ".lib" << endl;
         if (!skipTargetType) {
-            if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
+            if (project->isActiveConfig("stdbinary"))
                 t << MMP_TARGETTYPE "\t\tSTDLIB" << endl;
             else
@@ -986,10 +1026,10 @@
     if (0 != project->first("TARGET.EPOCSTACKSIZE").size())
         t << MMP_EPOCSTACKSIZE "\t\t" << project->first("TARGET.EPOCSTACKSIZE") << endl;
-    if (0 != project->values("TARGET.EPOCHEAPSIZE").size())
+    if (!skipEpocHeapSize && 0 != project->values("TARGET.EPOCHEAPSIZE").size())
         t << MMP_EPOCHEAPSIZE "\t\t" << project->values("TARGET.EPOCHEAPSIZE").join(" ") << endl;
     if (0 != project->values("TARGET.EPOCALLOWDLLDATA").size())
         t << MMP_EPOCALLOWDLLDATA << endl;
 
-    if (targetType == TypePlugin && !project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive)) {
+    if (targetType == TypePlugin && !project->isActiveConfig("stdbinary")) {
         // Use custom def file for Qt plugins
         t << "DEFFILE " PLUGIN_COMMON_DEF_FILE_FOR_MMP << endl;
@@ -1007,5 +1047,5 @@
 {
     if ((targetType == TypeExe) &&
-            !project->values("CONFIG").contains("no_icon", Qt::CaseInsensitive)) {
+            !project->isActiveConfig("no_icon")) {
 
         QString locTarget = fixedTarget;
@@ -1111,107 +1151,62 @@
 }
 
+void SymbianMakefileGenerator::writeMmpFileConditionalOptions(QTextStream& t,
+                                                              const QString &optionType,
+                                                              const QString &optionTag,
+                                                              const QString &variableBase)
+{
+    foreach(QString compilerVersion, project->values("VERSION_FLAGS." + optionTag)) {
+        QStringList currentValues = project->values(variableBase + "." + compilerVersion);
+        if (currentValues.size()) {
+            t << "#if defined(" << compilerVersion << ")" << endl;
+            t << optionType << " " << optionTag << " " << currentValues.join(" ") <<  endl;
+            t << "#endif" << endl;
+        }
+    }
+}
+
+void SymbianMakefileGenerator::writeMmpFileSimpleOption(QTextStream& t,
+                                                        const QString &optionType,
+                                                        const QString &optionTag,
+                                                        const QString &options)
+{
+    QString trimmedOptions = options.trimmed();
+    if (!trimmedOptions.isEmpty())
+        t << optionType << " " << optionTag << " " << trimmedOptions << endl;
+}
+
+void SymbianMakefileGenerator::appendMmpFileOptions(QString &options, const QStringList &list)
+{
+    if (list.size()) {
+        options.append(list.join(" "));
+        options.append(" ");
+    }
+}
+
 void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
 {
-    QString cw, armcc, gcce;
-    QString cwlink, armlink, gccelink;
-
-    if (0 != project->values("QMAKE_CXXFLAGS.CW").size()) {
-        cw.append(project->values("QMAKE_CXXFLAGS.CW").join(" "));
-        cw.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CXXFLAGS.ARMCC").size()) {
-        armcc.append(project->values("QMAKE_CXXFLAGS.ARMCC").join(" "));
-        armcc.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CXXFLAGS.GCCE").size()) {
-        gcce.append(project->values("QMAKE_CXXFLAGS.GCCE").join(" "));
-        gcce.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CFLAGS.CW").size()) {
-        cw.append(project->values("QMAKE_CFLAGS.CW").join(" "));
-        cw.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CFLAGS.ARMCC").size()) {
-        armcc.append(project->values("QMAKE_CFLAGS.ARMCC").join(" "));
-        armcc.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CFLAGS.GCCE").size()) {
-        gcce.append(project->values("QMAKE_CXXFLAGS.GCCE").join(" "));
-        gcce.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CXXFLAGS").size()) {
-        cw.append(project->values("QMAKE_CXXFLAGS").join(" "));
-        cw.append(" ");
-        armcc.append(project->values("QMAKE_CXXFLAGS").join(" "));
-        armcc.append(" ");
-        gcce.append(project->values("QMAKE_CXXFLAGS").join(" "));
-        gcce.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_CFLAGS").size()) {
-        cw.append(project->values("QMAKE_CFLAGS").join(" "));
-        cw.append(" ");
-        armcc.append(project->values("QMAKE_CFLAGS").join(" "));
-        armcc.append(" ");
-        gcce.append(project->values("QMAKE_CFLAGS").join(" "));
-        gcce.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_LFLAGS.CW").size()) {
-        cwlink.append(project->values("QMAKE_LFLAGS.CW").join(" "));
-        cwlink.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_LFLAGS.ARMCC").size()) {
-        armlink.append(project->values("QMAKE_LFLAGS.ARMCC").join(" "));
-        armlink.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_LFLAGS.GCCE").size()) {
-        gccelink.append(project->values("QMAKE_LFLAGS.GCCE").join(" "));
-        gccelink.append(" ");
-    }
-
-    if (0 != project->values("QMAKE_LFLAGS").size()) {
-        cwlink.append(project->values("QMAKE_LFLAGS").join(" "));
-        cwlink.append(" ");
-        armlink.append(project->values("QMAKE_LFLAGS").join(" "));
-        armlink.append(" ");
-        gccelink.append(project->values("QMAKE_LFLAGS").join(" "));
-        gccelink.append(" ");
-    }
-
-    if (!cw.isEmpty() && cw[cw.size()-1] == ' ')
-        cw.chop(1);
-    if (!armcc.isEmpty() && armcc[armcc.size()-1] == ' ')
-        armcc.chop(1);
-    if (!gcce.isEmpty() && gcce[gcce.size()-1] == ' ')
-        gcce.chop(1);
-    if (!cwlink.isEmpty() && cwlink[cwlink.size()-1] == ' ')
-        cwlink.chop(1);
-    if (!armlink.isEmpty() && armlink[armlink.size()-1] == ' ')
-        armlink.chop(1);
-    if (!gccelink.isEmpty() && gccelink[gccelink.size()-1] == ' ')
-        gccelink.chop(1);
-
-    if (!cw.isEmpty())
-        t << MMP_OPTION_CW " " << cw <<  endl;
-    if (!armcc.isEmpty())
-        t << MMP_OPTION_ARMCC " " << armcc <<  endl;
-    if (!gcce.isEmpty())
-        t << MMP_OPTION_GCCE " " << gcce <<  endl;
-
-    if (!cwlink.isEmpty())
-        t << MMP_LINKEROPTION_CW " " << cwlink <<  endl;
-    if (!armlink.isEmpty())
-        t << MMP_LINKEROPTION_ARMCC " " << armlink <<  endl;
-    if (!gccelink.isEmpty())
-        t << MMP_LINKEROPTION_GCCE " " << gccelink <<  endl;
+    QStringList keywords =  project->values("MMP_OPTION_KEYWORDS");
+    QStringList commonCxxFlags = project->values(VAR_CXXFLAGS);
+    QStringList commonCFlags = project->values(VAR_CFLAGS);
+    QStringList commonLFlags = project->values(VAR_LFLAGS);
+
+    foreach(QString item, keywords) {
+        QString compilerOption;
+        QString linkerOption;
+
+        appendMmpFileOptions(compilerOption, project->values(VAR_CXXFLAGS "." + item));
+        appendMmpFileOptions(compilerOption, project->values(VAR_CFLAGS "." + item));
+        appendMmpFileOptions(compilerOption, commonCxxFlags);
+        appendMmpFileOptions(compilerOption, commonCFlags);
+
+        appendMmpFileOptions(linkerOption, project->values(VAR_LFLAGS "."  + item));
+        appendMmpFileOptions(linkerOption, commonLFlags);
+
+        writeMmpFileSimpleOption(t, MMP_OPTION, item, compilerOption);
+        writeMmpFileSimpleOption(t, MMP_LINKEROPTION, item, linkerOption);
+
+        writeMmpFileConditionalOptions(t, MMP_OPTION, item, VAR_CXXFLAGS);
+        writeMmpFileConditionalOptions(t, MMP_LINKEROPTION, item, VAR_LFLAGS);
+    }
 
     t << endl;
@@ -1317,4 +1312,8 @@
         }
 
+        QString condition;
+        if (!project->isEmpty(item + ".condition"))
+            condition = project->first(item + ".condition");
+
         QFileInfo subdir(fileInfo(fixedItem));
         QString relativePath = directory.relativeFilePath(fixedItem);
@@ -1345,7 +1344,14 @@
         removeSpecialCharacters(bldinfDefine);
 
+        if (!condition.isEmpty())
+            t << "#if defined(" << condition << ")" << endl;
+
         t << "#ifndef " << bldinfDefine << endl;
-        t << "\t#include \"" << QDir::toNativeSeparators(bldinfFilename) << "\"" << endl;
-        t << "#endif // " << bldinfDefine << endl;
+        t << "\t#include \"" << bldinfFilename << "\"" << endl;
+        t << "#endif" << endl;
+
+        if (!condition.isEmpty())
+            t << "#endif" << endl;
+
     }
 
@@ -1365,5 +1371,5 @@
 
     QString mmpTag;
-    if (project->values("CONFIG").contains("symbian_test", Qt::CaseInsensitive))
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
         mmpTag = QLatin1String(BLD_INF_TAG_TESTMMPFILES);
     else
@@ -1388,5 +1394,11 @@
     userBldInfRules.remove(mmpTag);
 
-    t << endl << BLD_INF_TAG_EXTENSIONS << endl << endl;
+    QString extensionTag;
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
+        extensionTag = QLatin1String(BLD_INF_TAG_TESTEXTENSIONS);
+    else
+        extensionTag = QLatin1String(BLD_INF_TAG_EXTENSIONS);
+
+    t << endl << extensionTag << endl << endl;
 
     // Generate extension rules
@@ -1394,27 +1406,8 @@
     writeBldInfExtensionRulesPart(t, iconFile);
 
-    userItems = userBldInfRules.value(BLD_INF_TAG_EXTENSIONS);
+    userItems = userBldInfRules.value(extensionTag);
     foreach(QString item, userItems)
         t << item << endl;
-    userBldInfRules.remove(BLD_INF_TAG_EXTENSIONS);
-
-    t << endl << BLD_INF_TAG_EXPORTS << endl << endl;
-
-    // Generate export rules
-
-    // Export any deployed plugin stubs under /epoc32/data/z to support ROM builds
-    for (int i = 0; i < depList.size(); ++i)  {
-        int index = depList.at(i).from.indexOf(PLUGIN_STUB_DIR);
-        if (index != -1) {
-            t << QString("%1 /epoc32/data/z%2")
-                .arg(QString(depList.at(i).from).mid(index).replace('\\','/'))
-                .arg(QString(depList.at(i).to).mid(2).replace('\\','/')) << endl;
-        }
-    }
-
-    userItems = userBldInfRules.value(BLD_INF_TAG_EXPORTS);
-    foreach(QString item, userItems)
-        t << item << endl;
-    userBldInfRules.remove(BLD_INF_TAG_EXPORTS);
+    userBldInfRules.remove(extensionTag);
 
     // Add rest of the user defined content
@@ -1428,5 +1421,5 @@
 }
 
-void SymbianMakefileGenerator::writeRegRssFile(QStringList &userItems)
+void SymbianMakefileGenerator::writeRegRssFile(QMap<QString, QStringList> &userItems)
 {
     QString filename(fixedTarget);
@@ -1445,4 +1438,6 @@
         t << "#include <" << fixedTarget << ".rsg>" << endl;
         t << "#include <appinfo.rh>" << endl;
+        foreach(QString item, userItems[RSS_TAG_HEADER])
+            t << item << endl;
         t << endl;
         t << "UID2 KUidAppRegistrationResourceFile" << endl;
@@ -1452,11 +1447,46 @@
         t << "\tapp_file=\"" << fixedTarget << "\";" << endl;
         t << "\tlocalisable_resource_file=\"" RESOURCE_DIRECTORY_RESOURCE << fixedTarget << "\";" << endl;
+
+        writeRegRssList(t, userItems[RSS_TAG_SERVICE_LIST],
+                        QLatin1String(RSS_TAG_SERVICE_LIST),
+                        QLatin1String("SERVICE_INFO"));
+        writeRegRssList(t, userItems[RSS_TAG_FILE_OWNERSHIP_LIST],
+                        QLatin1String(RSS_TAG_FILE_OWNERSHIP_LIST),
+                        QLatin1String("FILE_OWNERSHIP_INFO"));
+        writeRegRssList(t, userItems[RSS_TAG_DATATYPE_LIST],
+                        QLatin1String(RSS_TAG_DATATYPE_LIST),
+                        QLatin1String("DATATYPE"));
         t << endl;
 
-        foreach(QString item, userItems)
-            t << "\t" << item << endl;
+        foreach(QString item, userItems[RSS_TAG_DEFAULT])
+            t << "\t" << item.replace("\n","\n\t") << endl;
         t << "\t}" << endl;
+
+        foreach(QString item, userItems[RSS_TAG_FOOTER])
+            t << item << endl;
     } else {
         PRINT_FILE_CREATE_ERROR(filename)
+    }
+}
+
+void SymbianMakefileGenerator::writeRegRssList(QTextStream &t,
+                                               QStringList &userList,
+                                               const QString &listTag,
+                                               const QString &listItem)
+{
+    int itemCount = userList.count();
+    if (itemCount) {
+        t << "\t" << listTag << " ="<< endl;
+        t << "\t\t{" << endl;
+        foreach(QString item, userList) {
+            t << "\t\t" << listItem << endl;
+            t << "\t\t\t{" << endl;
+            t << "\t\t\t" << item.replace("\n","\n\t\t\t") << endl;
+            t << "\t\t\t}";
+            if (--itemCount)
+                t << ",";
+            t << endl;
+        }
+        t << "\t\t}; "<< endl;
     }
 }
@@ -1540,5 +1570,7 @@
 }
 
-void SymbianMakefileGenerator::readRssRules(QString &numberOfIcons, QString &iconFile, QStringList &userRssRules)
+void SymbianMakefileGenerator::readRssRules(QString &numberOfIcons,
+                                            QString &iconFile, QMap<QString,
+                                            QStringList> &userRssRules)
 {
     for (QMap<QString, QStringList>::iterator it = project->variables().begin(); it != project->variables().end(); ++it) {
@@ -1552,12 +1584,14 @@
             QStringList values = it.value();
             foreach(QString item, values) {
-                // If there is no stringlist defined for a rule, use rule name directly
+                // If there is no stringlist defined for a rule, use rule value directly
                 // This is convenience for defining single line statements
                 if (project->values(item).isEmpty()) {
                     newValues << item;
                 } else {
+                    QStringList itemList;
                     foreach(QString itemRow, project->values(item)) {
-                        newValues << itemRow;
+                        itemList << itemRow;
                     }
+                    newValues << itemList.join("\n");
                 }
             }
@@ -1580,4 +1614,12 @@
                     continue;
                 }
+            } else if (newKey == RSS_TAG_HEADER
+                       || newKey == RSS_TAG_SERVICE_LIST
+                       || newKey == RSS_TAG_FILE_OWNERSHIP_LIST
+                       || newKey == RSS_TAG_DATATYPE_LIST
+                       || newKey == RSS_TAG_FOOTER
+                       || newKey == RSS_TAG_DEFAULT) {
+                userRssRules[newKey] = newValues;
+                continue;
             } else {
                 fprintf(stderr, "Warning: Unsupported key:'%s%s'\n",
@@ -1588,13 +1630,15 @@
     }
 
+    QStringList newValues;
     foreach(QString item, project->values(RSS_RULES)) {
-        // If there is no stringlist defined for a rule, use rule name directly
-        // This is convenience for defining single line mmp statements
+        // If there is no stringlist defined for a rule, use rule value directly
+        // This is convenience for defining single line statements
         if (project->values(item).isEmpty()) {
-            userRssRules << item;
+            newValues << item;
         } else {
-            userRssRules << project->values(item);
-        }
-    }
+            newValues << project->values(item);
+        }
+    }
+    userRssRules[RSS_TAG_DEFAULT] << newValues;
 
     // Validate that either both RSS_TAG_NBROFICONS and RSS_TAG_ICONFILE keys exist
@@ -1612,5 +1656,5 @@
         bool ok;
         numberOfIcons = numberOfIcons.simplified();
-        int tmp = numberOfIcons.toInt(&ok);
+        numberOfIcons.toInt(&ok);
         if (!ok) {
             numberOfIcons.clear();
@@ -1883,5 +1927,5 @@
 
     t << SIS_TARGET ":" << endl;
-    QString siscommand = QString("\t$(if $(wildcard %1_template.%2),$(if $(wildcard %3)," \
+    QString siscommand = QString::fromLatin1("\t$(if $(wildcard %1_template.%2),$(if $(wildcard %3)," \
                                   "$(MAKE) -s -f $(MAKEFILE) %4," \
                                   "$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) %4," \
@@ -1899,5 +1943,5 @@
     t << OK_SIS_TARGET ":" << endl;
 
-    QString pkgcommand = QString("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_template.%2 $(QT_SIS_TARGET) " \
+    QString pkgcommand = QString::fromLatin1("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_template.%2 $(QT_SIS_TARGET) " \
                                  "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
                           .arg(fixedTarget)
@@ -1912,6 +1956,30 @@
     t << "\t$(MAKE) -s -f $(MAKEFILE) " SIS_TARGET << endl << endl;
 
+    t << ROM_STUB_SIS_TARGET ":" << endl;
+    QString stubsiscommand = QString::fromLatin1("\t$(if $(wildcard %1_template.%2),$(if $(wildcard %3)," \
+                                  "$(MAKE) -s -f $(MAKEFILE) %4," \
+                                  "$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) %4," \
+                                  "$(MAKE) -s -f $(MAKEFILE) %5))," \
+                                  "$(MAKE) -s -f $(MAKEFILE) %6)")
+                          .arg(fixedTarget)
+                          .arg("pkg")
+                          .arg(MAKE_CACHE_NAME)
+                          .arg(OK_ROM_STUB_SIS_TARGET)
+                          .arg(FAIL_SIS_NOCACHE_TARGET)
+                          .arg(FAIL_SIS_NOPKG_TARGET);
+    t << stubsiscommand << endl;
+    t << endl;
+
+    t << OK_ROM_STUB_SIS_TARGET ":" << endl;
+
+    QString stubpkgcommand = QString::fromLatin1("\tcreatepackage.bat -s $(QT_SIS_OPTIONS) %1_template.%2 $(QT_SIS_TARGET) " \
+                                 "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
+                          .arg(fixedTarget)
+                          .arg("pkg");
+    t << stubpkgcommand << endl;
+    t << endl;
+
     t << INSTALLER_SIS_TARGET ": " << sisName << endl;
-    siscommand = QString("\t$(if $(wildcard %1_installer.%2)," \
+    siscommand = QString::fromLatin1("\t$(if $(wildcard %1_installer.%2)," \
                                   "$(MAKE) -s -f $(MAKEFILE) %3," \
                                   "$(MAKE) -s -f $(MAKEFILE) %4)")
@@ -1925,5 +1993,5 @@
     t << OK_INSTALLER_SIS_TARGET ": " << endl;
 
-    pkgcommand = QString("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_installer.%2 - " \
+    pkgcommand = QString::fromLatin1("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_installer.%2 - " \
                          "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
                   .arg(fixedTarget)
@@ -2005,5 +2073,5 @@
         }
         t << "runonphone: sis" << endl;
-        t << "\trunonphone $(QT_RUN_ON_PHONE_OPTIONS) --sis " << fixedTarget << "_$(QT_SIS_TARGET).sis " << fixedTarget << ".exe " << "$(QT_RUN_OPTIONS)" << endl;
+        t << "\trunonphone $(QT_RUN_ON_PHONE_OPTIONS) --sis " << fixedTarget << ".sis " << fixedTarget << ".exe " << "$(QT_RUN_OPTIONS)" << endl;
         t << endl;
     }
Index: /trunk/qmake/generators/symbian/symmake.h
===================================================================
--- /trunk/qmake/generators/symbian/symmake.h	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake.h	(revision 769)
@@ -50,7 +50,7 @@
 #define BLD_INF_FILENAME "bld.inf"
 #define MAKEFILE_DEPENDENCY_SEPARATOR " \\\n\t"
-
 #define QT_EXTRA_INCLUDE_DIR "tmp"
 #define MAKE_CACHE_NAME ".make.cache"
+#define SYMBIAN_TEST_CONFIG "symbian_test"
 
 class SymbianMakefileGenerator : public MakefileGenerator
@@ -85,5 +85,5 @@
     void removeSpecialCharacters(QString& str);
     QString fixPathForMmp(const QString& origPath, const QDir& parentDir);
-    QString canonizePath(const QString& origPath);
+    QString absolutizePath(const QString& origPath);
 
     virtual bool writeMakefile(QTextStream &t);
@@ -108,5 +108,8 @@
 
     void writeHeader(QTextStream &t);
-    void writeBldInfContent(QTextStream& t, bool addDeploymentExtension, const QString &iconFile, DeploymentList &depList);
+    void writeBldInfContent(QTextStream& t,
+                            bool addDeploymentExtension,
+                            const QString &iconFile,
+                            DeploymentList &depList);
 
     static bool removeDuplicatedStrings(QStringList& stringList);
@@ -122,4 +125,13 @@
     void writeMmpFileLibraryPart(QTextStream& t);
     void writeMmpFileCapabilityPart(QTextStream& t);
+    void writeMmpFileConditionalOptions(QTextStream& t,
+                                        const QString &optionType,
+                                        const QString &optionTag,
+                                        const QString &variableBase);
+    void writeMmpFileSimpleOption(QTextStream& t,
+                                  const QString &optionType,
+                                  const QString &optionTag,
+                                  const QString &options);
+    void appendMmpFileOptions(QString &options, const QStringList &list);
     void writeMmpFileCompilerOptionPart(QTextStream& t);
     void writeMmpFileBinaryVersionPart(QTextStream& t);
@@ -128,8 +140,13 @@
     void writeCustomDefFile();
 
-    void writeRegRssFile(QStringList &useritems);
+    void writeRegRssFile(QMap<QString, QStringList> &useritems);
+    void writeRegRssList(QTextStream &t, QStringList &userList,
+                         const QString &listTag,
+                         const QString &listItem);
     void writeRssFile(QString &numberOfIcons, QString &iconfile);
     void writeLocFile(QStringList &symbianLangCodes);
-    void readRssRules(QString &numberOfIcons, QString &iconFile, QStringList &userRssRules);
+    void readRssRules(QString &numberOfIcons,
+                      QString &iconFile,
+                      QMap<QString, QStringList> &userRssRules);
 
     QStringList symbianLangCodesFromTsFiles();
Index: /trunk/qmake/generators/symbian/symmake_abld.cpp
===================================================================
--- /trunk/qmake/generators/symbian/symmake_abld.cpp	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake_abld.cpp	(revision 769)
@@ -48,4 +48,7 @@
 #include <qdatetime.h>
 #include <qdebug.h>
+
+// Included from tools/shared
+#include <symbian/epocroot.h>
 
 #define DO_NOTHING_TARGET "do_nothing"
@@ -57,4 +60,6 @@
 #define GENERATED_SOURCES_TARGET "generated_sources"
 #define ALL_SOURCE_DEPS_TARGET "all_source_deps"
+#define DEPLOYMENT_TARGET "deployment"
+#define DEPLOYMENT_CLEAN_TARGET "deployment_clean"
 #define WINSCW_DEPLOYMENT_TARGET "winscw_deployment"
 #define WINSCW_DEPLOYMENT_CLEAN_TARGET "winscw_deployment_clean"
@@ -110,17 +115,19 @@
         if (deploymentOnly) {
             buildDeps.append(STORE_BUILD_TARGET);
-            cleanDeps.append(DO_NOTHING_TARGET);
-            cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET);
-            finalDeps.append(DO_NOTHING_TARGET);
-            finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET);
+            cleanDeps.append(DEPLOYMENT_CLEAN_TARGET);
+            cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET " " DEPLOYMENT_CLEAN_TARGET);
+            finalDeps.append(DEPLOYMENT_TARGET);
+            finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET);
             wrapperTargets << WINSCW_DEPLOYMENT_TARGET
                 << WINSCW_DEPLOYMENT_CLEAN_TARGET
+                << DEPLOYMENT_TARGET
+                << DEPLOYMENT_CLEAN_TARGET
                 << STORE_BUILD_TARGET;
         } else {
             buildDeps.append(CREATE_TEMPS_TARGET " " PRE_TARGETDEPS_TARGET " " STORE_BUILD_TARGET);
-            cleanDeps.append(EXTENSION_CLEAN);
-            cleanDepsWinscw.append(EXTENSION_CLEAN " " WINSCW_DEPLOYMENT_CLEAN_TARGET);
-            finalDeps.append(FINALIZE_TARGET);
-            finalDepsWinscw.append(FINALIZE_TARGET " " WINSCW_DEPLOYMENT_TARGET);
+            cleanDeps.append(EXTENSION_CLEAN " " DEPLOYMENT_CLEAN_TARGET);
+            cleanDepsWinscw.append(EXTENSION_CLEAN " " WINSCW_DEPLOYMENT_CLEAN_TARGET " " DEPLOYMENT_CLEAN_TARGET);
+            finalDeps.append(FINALIZE_TARGET " " DEPLOYMENT_TARGET);
+            finalDepsWinscw.append(FINALIZE_TARGET " " WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET);
             wrapperTargets << PRE_TARGETDEPS_TARGET
                 << CREATE_TEMPS_TARGET
@@ -129,4 +136,6 @@
                 << WINSCW_DEPLOYMENT_CLEAN_TARGET
                 << WINSCW_DEPLOYMENT_TARGET
+                << DEPLOYMENT_CLEAN_TARGET
+                << DEPLOYMENT_TARGET
                 << STORE_BUILD_TARGET;
         }
@@ -173,5 +182,5 @@
 
     QString testClause;
-    if (project->values("CONFIG").contains("symbian_test", Qt::CaseInsensitive))
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
         testClause = QLatin1String(" test");
     else
@@ -196,4 +205,6 @@
     t << "DEL_DIR           = " << var("QMAKE_DEL_DIR") << endl;
     t << "MOVE              = " << var("QMAKE_MOVE") << endl;
+    t << "CHK_DIR_EXISTS    = " << var("QMAKE_CHK_DIR_EXISTS") << endl;
+    t << "MKDIR             = " << var("QMAKE_MKDIR") << endl;
     t << "XCOPY             = xcopy /d /f /h /r /y /i" << endl;
     t << "ABLD              = ABLD.BAT" << endl;
@@ -360,5 +371,7 @@
     }
 
-    writeDeploymentTargets(t);
+    // Deploymend targets for both emulator and rom deployment
+    writeDeploymentTargets(t, false);
+    writeDeploymentTargets(t, true);
 
     writeSisTargets(t);
@@ -405,11 +418,19 @@
 }
 
-bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t)
-{
-    t << WINSCW_DEPLOYMENT_TARGET ":" << endl;
-
-    QString remoteTestPath = epocRoot() + QLatin1String("epoc32\\winscw\\c\\private\\") + privateDirUid;   // default 4 OpenC; 4 all Symbian too
+bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool isRom)
+{
+    if (isRom)
+        t << DEPLOYMENT_TARGET ":" << endl;
+    else
+        t << WINSCW_DEPLOYMENT_TARGET ":" << endl;
+
+    QString remoteTestPath = epocRoot()
+        + QLatin1String(isRom ? "epoc32\\data\\z\\private\\" : "epoc32\\winscw\\c\\private\\")
+        + privateDirUid;
     DeploymentList depList;
-    initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("winscw"), QLatin1String("udeb"), generatedDirs, generatedFiles);
+
+    initProjectDeploySymbian(project, depList, remoteTestPath, false,
+        QLatin1String(isRom ? ROM_DEPLOYMENT_PLATFORM : EMULATOR_DEPLOYMENT_PLATFORM),
+        QString(), generatedDirs, generatedFiles);
 
     if (depList.size())
@@ -420,10 +441,15 @@
         // and doesn't provide switch to force file selection. It does provide dir forcing, though,
         // so strip the last part of the destination.
-        t << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \"" << depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl;
-    }
-
-    t << endl;
-
-    t << WINSCW_DEPLOYMENT_CLEAN_TARGET ":" << endl;
+        t << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \""
+          << depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl;
+    }
+
+    t << endl;
+
+    if (isRom)
+        t << DEPLOYMENT_CLEAN_TARGET ":" << endl;
+    else
+        t << WINSCW_DEPLOYMENT_CLEAN_TARGET ":" << endl;
+
     QStringList cleanList;
     for (int i = 0; i < depList.size(); ++i) {
Index: /trunk/qmake/generators/symbian/symmake_abld.h
===================================================================
--- /trunk/qmake/generators/symbian/symmake_abld.h	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake_abld.h	(revision 769)
@@ -59,5 +59,5 @@
 
     void writeStoreBuildTarget(QTextStream &t);
-    bool writeDeploymentTargets(QTextStream &t);
+    bool writeDeploymentTargets(QTextStream &t, bool isRom);
 
 public:
Index: /trunk/qmake/generators/symbian/symmake_sbsv2.cpp
===================================================================
--- /trunk/qmake/generators/symbian/symmake_sbsv2.cpp	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake_sbsv2.cpp	(revision 769)
@@ -49,4 +49,7 @@
 #include <qdebug.h>
 
+// Included from tools/shared
+#include <symbian/epocroot.h>
+
 SymbianSbsv2MakefileGenerator::SymbianSbsv2MakefileGenerator() : SymbianMakefileGenerator() { }
 SymbianSbsv2MakefileGenerator::~SymbianSbsv2MakefileGenerator() { }
@@ -73,5 +76,5 @@
         foreach(QFileInfo item, sourceInfos) {
             QFileInfo destInfo = QFileInfo(destDir.absolutePath() + "/" + item.fileName());
-            if (!destInfo.exists() || destInfo.lastModified() < item.lastModified()) {
+            if (!destInfo.exists() || destInfo.lastModified() != item.lastModified()) {
                 if (destInfo.exists())
                     QFile::remove(destInfo.absoluteFilePath());
@@ -88,285 +91,6 @@
 }
 
-void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName, bool deploymentOnly)
-{
-    // Can't use extension makefile with sbsv2
-    Q_UNUSED(wrapperFileName);
-    Q_UNUSED(deploymentOnly);
-}
-
-void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile)
-{
-    QStringList allPlatforms;
-    foreach(QString platform, project->values("SYMBIAN_PLATFORMS")) {
-        allPlatforms << platform.toLower();
-    }
-
-    QStringList debugPlatforms = allPlatforms;
-    QStringList releasePlatforms = allPlatforms;
-    releasePlatforms.removeAll("winscw"); // No release for emulator
-
-    QString testClause;
-    if (project->values("CONFIG").contains("symbian_test", Qt::CaseInsensitive))
-        testClause = QLatin1String(".test");
-    else
-        testClause = QLatin1String("");
-
-    QTextStream t(&wrapperFile);
-
-    t << "# ==============================================================================" << endl;
-    t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
-    t << QDateTime::currentDateTime().toString() << endl;
-    t << "# This file is generated by qmake and should not be modified by the" << endl;
-    t << "# user." << endl;
-    t << "#  Name        : " << wrapperFile.fileName() << endl;
-    t << "#  Description : Wrapper Makefile for calling Symbian build tools" << endl;
-    t << "#" << endl;
-    t << "# ==============================================================================" << "\n" << endl;
-    t << endl;
-    t << "MAKEFILE          = " << wrapperFile.fileName() << endl;
-    t << "QMAKE             = " << Option::fixPathToTargetOS(var("QMAKE_QMAKE")) << endl;
-    t << "DEL_FILE          = " << var("QMAKE_DEL_FILE") << endl;
-    t << "DEL_DIR           = " << var("QMAKE_DEL_DIR") << endl;
-    t << "MOVE              = " << var("QMAKE_MOVE") << endl;
-    t << "DEBUG_PLATFORMS   = " << debugPlatforms.join(" ") << endl;
-    t << "RELEASE_PLATFORMS = " << releasePlatforms.join(" ") << endl;
-    t << "MAKE              = make" << endl;
-    t << "SBS               = sbs" << endl;
-    t << endl;
-    t << "DEFINES" << '\t' << " = "
-        << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ")
-        << varGlue("QMAKE_COMPILER_DEFINES", "-D", "-D", " ")
-        << varGlue("DEFINES","-D"," -D","") << endl;
-
-    t << "INCPATH" << '\t' << " = ";
-
-    for (QMap<QString, QStringList>::iterator it = systeminclude.begin(); it != systeminclude.end(); ++it) {
-        QStringList values = it.value();
-        for (int i = 0; i < values.size(); ++i) {
-            t << " -I\"" << values.at(i) << "\" ";
-        }
-    }
-    t << endl;
-    t << "first: default" << endl;
-    if (debugPlatforms.contains("winscw"))
-        t << "default: debug-winscw";
-    else if (debugPlatforms.contains("armv5"))
-        t << "default: debug-armv5";
-    else if (debugPlatforms.size())
-        t << "default: debug-" << debugPlatforms.first();
-    else
-        t << "default: all";
-
-    t << endl;
-    if (!isPrimaryMakefile) {
-        t << "all:" << endl;
-    } else {
-        t << "all: debug release" << endl;
-        t << endl;
-        t << "qmake:" << endl;
-        t << "\t$(QMAKE) -spec symbian-sbsv2 -o \"" << fileInfo(Option::output.fileName()).fileName()
-          << "\" \"" << project->projectFile() << "\"" << endl;
-        t << endl;
-        t << BLD_INF_FILENAME ":" << endl;
-        t << "\t$(QMAKE)" << endl;
-        t << endl;
-
-        QString winscw("winscw");
-        t << "debug: " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS)";
-        foreach(QString item, debugPlatforms) {
-            if(QString::compare(item, winscw) == 0)
-                t << " -c " << item << "_udeb.mwccinc" << testClause;
-            else
-                t << " -c " << item << "_udeb" << testClause;
-        }
-        t << endl;
-        t << "release: " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS)";
-        foreach(QString item, releasePlatforms) {
-            if(QString::compare(item, winscw) == 0)
-                t << " -c " << item << "_urel.mwccinc" << testClause;
-            else
-                t << " -c " << item << "_urel" << testClause;
-        }
-        t << endl;
-
-        // For more specific builds, targets are in this form: build-platform, e.g. release-armv5
-        foreach(QString item, debugPlatforms) {
-            t << "debug-" << item << ": " << BLD_INF_FILENAME << endl;
-            if(QString::compare(item, winscw) == 0)
-                t << "\t$(SBS) -c " << item << "_udeb.mwccinc" << testClause << endl;
-            else
-                t << "\t$(SBS) -c " << item << "_udeb" << testClause << endl;
-        }
-
-        foreach(QString item, releasePlatforms) {
-            t << "release-" << item << ": " << BLD_INF_FILENAME << endl;
-            if(QString::compare(item, winscw) == 0)
-                t << "\t$(SBS) -c " << item << "_urel.mwccinc" << testClause << endl;
-            else
-                t << "\t$(SBS) -c " << item << "_urel" << testClause << endl;
-        }
-
-        t << endl;
-        t << "export: " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS) export" << endl;
-        t << endl;
-
-        t << "cleanexport: " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS) cleanexport" << endl;
-        t << endl;
-
-    }
-
-    // Add all extra targets including extra compiler targest also to wrapper makefile,
-    // even though many of them may have already been added to bld.inf as FLMs.
-    // This is to enable use of targets like 'mocables', which call targets generated by extra compilers.
-    if (targetType != TypeSubdirs) {
-        t << extraTargetsCache;
-        t << extraCompilersCache;
-    } else {
-        QList<MakefileGenerator::SubTarget*> subtargets = findSubDirsSubTargets();
-        writeSubTargets(t, subtargets, SubTargetSkipDefaultVariables|SubTargetSkipDefaultTargets);
-        qDeleteAll(subtargets);
-    }
-
-    writeSisTargets(t);
-
-    generateDistcleanTargets(t);
-
-    t << "clean: " << BLD_INF_FILENAME << endl;
-    t << "\t-$(SBS) reallyclean" << endl;
-    t << endl;
-
-    t << "clean-debug: " << BLD_INF_FILENAME << endl;
-    t << "\t$(SBS) reallyclean";
-    foreach(QString item, debugPlatforms) {
-        t << " -c " << item << "_udeb" << testClause;
-    }
-    t << endl;
-    t << "clean-release: " << BLD_INF_FILENAME << endl;
-    t << "\t$(SBS) reallyclean";
-    foreach(QString item, releasePlatforms) {
-        t << " -c " << item << "_urel" << testClause;
-    }
-    t << endl;
-
-    // For more specific builds, targets are in this form: clean-build-platform, e.g. clean-release-armv5
-    foreach(QString item, debugPlatforms) {
-        t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS) reallyclean -c " << item << "_udeb" << testClause << endl;
-    }
-    foreach(QString item, releasePlatforms) {
-        t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl;
-        t << "\t$(SBS) reallyclean -c " << item << "_urel" << testClause << endl;
-    }
-    t << endl;
-
-    generateExecutionTargets(t, debugPlatforms);
-}
-
-void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile)
-{
-    // Makes sure we have needed FLMs in place.
-    exportFlm();
-
-    // Parse extra compilers data
-    QStringList defines;
-    QStringList incPath;
-
-    defines << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ")
-            << varGlue("QMAKE_COMPILER_DEFINES", "-D", "-D", " ")
-            << varGlue("DEFINES","-D"," -D","");
-    for (QMap<QString, QStringList>::iterator it = systeminclude.begin(); it != systeminclude.end(); ++it) {
-        QStringList values = it.value();
-        for (int i = 0; i < values.size(); ++i) {
-            incPath << QLatin1String(" -I\"") + values.at(i) + "\"";
-        }
-    }
-
-    // Write extra compilers and targets to initialize QMAKE_ET_* variables
-    // Cache results to avoid duplicate calls when creating wrapper makefile
-    QTextStream extraCompilerStream(&extraCompilersCache);
-    QTextStream extraTargetStream(&extraTargetsCache);
-    writeExtraCompilerTargets(extraCompilerStream);
-    writeExtraTargets(extraTargetStream);
-
-    // Figure out everything the target depends on as we don't want to run extra targets that
-    // are not necessary.
-    QStringList allPreDeps;
-    foreach(QString item, project->values("PRE_TARGETDEPS")) {
-        // Predeps get mangled in windows, so fix them to more sbsv2 friendly format
-#if defined(Q_OS_WIN)
-        if (item.mid(1, 1) == ":")
-            item = item.mid(0, 1).toUpper().append(item.mid(1)); // Fix drive to uppercase
-#endif
-        item.replace("\\", "/");
-        allPreDeps << escapeDependencyPath(item);
-    }
-
-    foreach (QString item, project->values("GENERATED_SOURCES")) {
-        allPreDeps.append(fileInfo(item).absoluteFilePath());
-    }
-
-    for (QMap<QString, QStringList>::iterator it = sources.begin(); it != sources.end(); ++it) {
-        QString currentSourcePath = it.key();
-        QStringList values = it.value();
-        for (int i = 0; i < values.size(); ++i) {
-            QString sourceFile = currentSourcePath + "/" + values.at(i);
-            QStringList deps = findDependencies(QDir::toNativeSeparators(sourceFile));
-            foreach(QString depItem, deps) {
-                appendIfnotExist(allPreDeps, fileInfo(depItem).absoluteFilePath());
-            }
-        }
-    }
-
-    // Write FLM rules for all extra targets and compilers that we depend on to build the target.
-    QStringList extraTargets;
-    extraTargets << project->values("QMAKE_EXTRA_TARGETS") <<  project->values("QMAKE_EXTRA_COMPILERS");
-    foreach(QString item, extraTargets) {
-        foreach(QString targetItem, project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + item)) {
-            // Make sure targetpath is absolute
-            QString absoluteTarget = fileInfo(targetItem).absoluteFilePath();
-            if (allPreDeps.contains(absoluteTarget)) {
-                QStringList deps = project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + item + targetItem);
-                QString commandItem =  project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + item + targetItem).join(" ");
-
-
-                // Make sure all deps paths are absolute
-                QString absoluteDeps;
-                foreach (QString depItem, deps) {
-                    if (!depItem.isEmpty()) {
-                        absoluteDeps.append(fileInfo(depItem).absoluteFilePath());
-                        absoluteDeps.append(" ");
-                    }
-                }
-
-                t << "START EXTENSION qt/qmake_extra_pre_targetdep" << endl;
-                t << "OPTION PREDEP_TARGET " << absoluteTarget << endl;
-                t << "OPTION DEPS " << absoluteDeps << endl;
-
-                if (commandItem.indexOf("$(INCPATH)") != -1)
-                    commandItem.replace("$(INCPATH)", incPath.join(" "));
-                if (commandItem.indexOf("$(DEFINES)") != -1)
-                    commandItem.replace("$(DEFINES)", defines.join(" "));
-
-                // Sbsv2 strips all backslashes (even doubles ones) from option parameters, so just replace them with slashes
-                // Problem: If some command actually needs backslashes for something else than dir separator, we are out of luck...
-                commandItem.replace("\\", "/");
-                t << "OPTION COMMAND " << commandItem << endl;
-                t << "END" << endl;
-            }
-        }
-    }
-
-    t << endl;
-
-    // Write winscw deployment rules
-    QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid;
-    DeploymentList depList;
-    initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("winscw"), QLatin1String("udeb"), generatedDirs, generatedFiles);
-
-    t << "#if defined(WINSCW)" << endl;
+void SymbianSbsv2MakefileGenerator::writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t)
+{
     for (int i = 0; i < depList.size(); ++i) {
         t << "START EXTENSION qt/qmake_emulator_deployment" << endl;
@@ -382,6 +106,300 @@
         t << "END" << endl;
     }
+}
+
+void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName, bool deploymentOnly)
+{
+    // Can't use extension makefile with sbsv2
+    Q_UNUSED(wrapperFileName);
+    Q_UNUSED(deploymentOnly);
+}
+
+void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile)
+{
+    QStringList allPlatforms;
+    foreach(QString platform, project->values("SYMBIAN_PLATFORMS")) {
+        allPlatforms << platform.toLower();
+    }
+
+    QStringList debugPlatforms = allPlatforms;
+    QStringList releasePlatforms = allPlatforms;
+    releasePlatforms.removeAll("winscw"); // No release for emulator
+
+    QString testClause;
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
+        testClause = QLatin1String(".test");
+    else
+        testClause = QLatin1String("");
+
+    QTextStream t(&wrapperFile);
+
+    t << "# ==============================================================================" << endl;
+    t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+    t << QDateTime::currentDateTime().toString() << endl;
+    t << "# This file is generated by qmake and should not be modified by the" << endl;
+    t << "# user." << endl;
+    t << "#  Name        : " << wrapperFile.fileName() << endl;
+    t << "#  Description : Wrapper Makefile for calling Symbian build tools" << endl;
+    t << "#" << endl;
+    t << "# ==============================================================================" << "\n" << endl;
+    t << endl;
+    t << "MAKEFILE          = " << wrapperFile.fileName() << endl;
+    t << "QMAKE             = " << Option::fixPathToTargetOS(var("QMAKE_QMAKE")) << endl;
+    t << "DEL_FILE          = " << var("QMAKE_DEL_FILE") << endl;
+    t << "DEL_DIR           = " << var("QMAKE_DEL_DIR") << endl;
+    t << "CHK_DIR_EXISTS    = " << var("QMAKE_CHK_DIR_EXISTS") << endl;
+    t << "MKDIR             = " << var("QMAKE_MKDIR") << endl;
+    t << "MOVE              = " << var("QMAKE_MOVE") << endl;
+    t << "DEBUG_PLATFORMS   = " << debugPlatforms.join(" ") << endl;
+    t << "RELEASE_PLATFORMS = " << releasePlatforms.join(" ") << endl;
+    t << "MAKE              = make" << endl;
+    t << "SBS               = sbs" << endl;
+    t << endl;
+    t << "DEFINES" << '\t' << " = "
+        << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ")
+        << varGlue("QMAKE_COMPILER_DEFINES", "-D", "-D", " ")
+        << varGlue("DEFINES","-D"," -D","") << endl;
+
+    t << "INCPATH" << '\t' << " = ";
+
+    for (QMap<QString, QStringList>::iterator it = systeminclude.begin(); it != systeminclude.end(); ++it) {
+        QStringList values = it.value();
+        for (int i = 0; i < values.size(); ++i) {
+            t << " -I\"" << values.at(i) << "\" ";
+        }
+    }
+    t << endl;
+    t << "first: default" << endl;
+    if (debugPlatforms.contains("winscw"))
+        t << "default: debug-winscw";
+    else if (debugPlatforms.contains("armv5"))
+        t << "default: debug-armv5";
+    else if (debugPlatforms.size())
+        t << "default: debug-" << debugPlatforms.first();
+    else
+        t << "default: all";
+
+    t << endl;
+    if (!isPrimaryMakefile) {
+        t << "all:" << endl;
+    } else {
+        t << "all: debug release" << endl;
+        t << endl;
+        t << "qmake:" << endl;
+        t << "\t$(QMAKE) -spec symbian-sbsv2 -o \"" << fileInfo(Option::output.fileName()).fileName()
+          << "\" \"" << project->projectFile() << "\"" << endl;
+        t << endl;
+        t << BLD_INF_FILENAME ":" << endl;
+        t << "\t$(QMAKE)" << endl;
+        t << endl;
+
+        QString winscw("winscw");
+        t << "debug: " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS)";
+        foreach(QString item, debugPlatforms) {
+            if(QString::compare(item, winscw) == 0)
+                t << " -c " << item << "_udeb.mwccinc" << testClause;
+            else
+                t << " -c " << item << "_udeb" << testClause;
+        }
+        t << endl;
+        t << "release: " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS)";
+        foreach(QString item, releasePlatforms) {
+            if(QString::compare(item, winscw) == 0)
+                t << " -c " << item << "_urel.mwccinc" << testClause;
+            else
+                t << " -c " << item << "_urel" << testClause;
+        }
+        t << endl;
+
+        // For more specific builds, targets are in this form: build-platform, e.g. release-armv5
+        foreach(QString item, debugPlatforms) {
+            t << "debug-" << item << ": " << BLD_INF_FILENAME << endl;
+            if(QString::compare(item, winscw) == 0)
+                t << "\t$(SBS) -c " << item << "_udeb.mwccinc" << testClause << endl;
+            else
+                t << "\t$(SBS) -c " << item << "_udeb" << testClause << endl;
+        }
+
+        foreach(QString item, releasePlatforms) {
+            t << "release-" << item << ": " << BLD_INF_FILENAME << endl;
+            if(QString::compare(item, winscw) == 0)
+                t << "\t$(SBS) -c " << item << "_urel.mwccinc" << testClause << endl;
+            else
+                t << "\t$(SBS) -c " << item << "_urel" << testClause << endl;
+        }
+
+        t << endl;
+        t << "export: " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS) export" << endl;
+        t << endl;
+
+        t << "cleanexport: " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS) cleanexport" << endl;
+        t << endl;
+
+    }
+
+    // Add all extra targets including extra compiler targest also to wrapper makefile,
+    // even though many of them may have already been added to bld.inf as FLMs.
+    // This is to enable use of targets like 'mocables', which call targets generated by extra compilers.
+    if (targetType != TypeSubdirs) {
+        t << extraTargetsCache;
+        t << extraCompilersCache;
+    } else {
+        QList<MakefileGenerator::SubTarget*> subtargets = findSubDirsSubTargets();
+        writeSubTargets(t, subtargets, SubTargetSkipDefaultVariables|SubTargetSkipDefaultTargets);
+        qDeleteAll(subtargets);
+    }
+
+    writeSisTargets(t);
+
+    generateDistcleanTargets(t);
+
+    t << "clean: " << BLD_INF_FILENAME << endl;
+    t << "\t-$(SBS) reallyclean" << endl;
+    t << endl;
+
+    t << "clean-debug: " << BLD_INF_FILENAME << endl;
+    t << "\t$(SBS) reallyclean";
+    foreach(QString item, debugPlatforms) {
+        t << " -c " << item << "_udeb" << testClause;
+    }
+    t << endl;
+    t << "clean-release: " << BLD_INF_FILENAME << endl;
+    t << "\t$(SBS) reallyclean";
+    foreach(QString item, releasePlatforms) {
+        t << " -c " << item << "_urel" << testClause;
+    }
+    t << endl;
+
+    // For more specific builds, targets are in this form: clean-build-platform, e.g. clean-release-armv5
+    foreach(QString item, debugPlatforms) {
+        t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS) reallyclean -c " << item << "_udeb" << testClause << endl;
+    }
+    foreach(QString item, releasePlatforms) {
+        t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl;
+        t << "\t$(SBS) reallyclean -c " << item << "_urel" << testClause << endl;
+    }
+    t << endl;
+
+    generateExecutionTargets(t, debugPlatforms);
+}
+
+void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile)
+{
+    // Makes sure we have needed FLMs in place.
+    exportFlm();
+
+    // Parse extra compilers data
+    QStringList defines;
+    QStringList incPath;
+
+    defines << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ")
+            << varGlue("QMAKE_COMPILER_DEFINES", "-D", "-D", " ")
+            << varGlue("DEFINES","-D"," -D","");
+    for (QMap<QString, QStringList>::iterator it = systeminclude.begin(); it != systeminclude.end(); ++it) {
+        QStringList values = it.value();
+        for (int i = 0; i < values.size(); ++i) {
+            incPath << QLatin1String(" -I\"") + values.at(i) + "\"";
+        }
+    }
+
+    // Write extra compilers and targets to initialize QMAKE_ET_* variables
+    // Cache results to avoid duplicate calls when creating wrapper makefile
+    QTextStream extraCompilerStream(&extraCompilersCache);
+    QTextStream extraTargetStream(&extraTargetsCache);
+    writeExtraCompilerTargets(extraCompilerStream);
+    writeExtraTargets(extraTargetStream);
+
+    // Figure out everything the target depends on as we don't want to run extra targets that
+    // are not necessary.
+    QStringList allPreDeps;
+    foreach(QString item, project->values("PRE_TARGETDEPS")) {
+        // Predeps get mangled in windows, so fix them to more sbsv2 friendly format
+#if defined(Q_OS_WIN)
+        if (item.mid(1, 1) == ":")
+            item = item.mid(0, 1).toUpper().append(item.mid(1)); // Fix drive to uppercase
+#endif
+        item.replace("\\", "/");
+        allPreDeps << escapeDependencyPath(item);
+    }
+
+    foreach (QString item, project->values("GENERATED_SOURCES")) {
+        allPreDeps.append(fileInfo(item).absoluteFilePath());
+    }
+
+    for (QMap<QString, QStringList>::iterator it = sources.begin(); it != sources.end(); ++it) {
+        QString currentSourcePath = it.key();
+        QStringList values = it.value();
+        for (int i = 0; i < values.size(); ++i) {
+            QString sourceFile = currentSourcePath + "/" + values.at(i);
+            QStringList deps = findDependencies(QDir::toNativeSeparators(sourceFile));
+            foreach(QString depItem, deps) {
+                appendIfnotExist(allPreDeps, fileInfo(depItem).absoluteFilePath());
+            }
+        }
+    }
+
+    // Write FLM rules for all extra targets and compilers that we depend on to build the target.
+    QStringList extraTargets;
+    extraTargets << project->values("QMAKE_EXTRA_TARGETS") <<  project->values("QMAKE_EXTRA_COMPILERS");
+    foreach(QString item, extraTargets) {
+        foreach(QString targetItem, project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + item)) {
+            // Make sure targetpath is absolute
+            QString absoluteTarget = fileInfo(targetItem).absoluteFilePath();
+            if (allPreDeps.contains(absoluteTarget)) {
+                QStringList deps = project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + item + targetItem);
+                QString commandItem =  project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + item + targetItem).join(" ");
+
+
+                // Make sure all deps paths are absolute
+                QString absoluteDeps;
+                foreach (QString depItem, deps) {
+                    if (!depItem.isEmpty()) {
+                        absoluteDeps.append(fileInfo(depItem).absoluteFilePath());
+                        absoluteDeps.append(" ");
+                    }
+                }
+
+                t << "START EXTENSION qt/qmake_extra_pre_targetdep.export" << endl;
+                t << "OPTION PREDEP_TARGET " << absoluteTarget << endl;
+                t << "OPTION DEPS " << absoluteDeps << endl;
+
+                if (commandItem.indexOf("$(INCPATH)") != -1)
+                    commandItem.replace("$(INCPATH)", incPath.join(" "));
+                if (commandItem.indexOf("$(DEFINES)") != -1)
+                    commandItem.replace("$(DEFINES)", defines.join(" "));
+
+                // Sbsv2 strips all backslashes (even doubles ones) from option parameters, so just replace them with slashes
+                // Problem: If some command actually needs backslashes for something else than dir separator, we are out of luck...
+                commandItem.replace("\\", "/");
+                t << "OPTION COMMAND " << commandItem << endl;
+                t << "END" << endl;
+            }
+        }
+    }
+
+    t << endl;
+
+    // Write deployment rules
+    QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid;
+    DeploymentList depList;
+
+    //write emulator deployment
+    t << "#if defined(WINSCW)" << endl;
+    initProjectDeploySymbian(project, depList, remoteTestPath, false,
+        QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles);
+    writeSbsDeploymentList(depList, t);
     t << "#endif" << endl;
 
+    //write ROM deployment
+    remoteTestPath = epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid;
+    depList.clear();
+    initProjectDeploySymbian(project, depList, remoteTestPath, false,
+        QLatin1String(ROM_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles);
+    writeSbsDeploymentList(depList, t);
     t << endl;
 
Index: /trunk/qmake/generators/symbian/symmake_sbsv2.h
===================================================================
--- /trunk/qmake/generators/symbian/symmake_sbsv2.h	(revision 768)
+++ /trunk/qmake/generators/symbian/symmake_sbsv2.h	(revision 769)
@@ -65,4 +65,5 @@
 private:
     void exportFlm();
+    void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t);
 
     QString extraTargetsCache;
Index: /trunk/qmake/generators/win32/msvc_vcproj.cpp
===================================================================
--- /trunk/qmake/generators/win32/msvc_vcproj.cpp	(revision 768)
+++ /trunk/qmake/generators/win32/msvc_vcproj.cpp	(revision 769)
@@ -68,4 +68,5 @@
 #ifdef Q_OS_WIN32
 #include <qt_windows.h>
+#include <windows/registry.h>
 
 QT_BEGIN_NAMESPACE
@@ -94,100 +95,4 @@
 };
 
-static QString keyPath(const QString &rKey)
-{
-    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
-    if (idx == -1)
-        return QString();
-    return rKey.left(idx + 1);
-}
-
-static QString keyName(const QString &rKey)
-{
-    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
-    if (idx == -1)
-        return rKey;
-
-    QString res(rKey.mid(idx + 1));
-    if (res == "Default" || res == ".")
-        res = "";
-    return res;
-}
-
-static QString readRegistryKey(HKEY parentHandle, const QString &rSubkey)
-{
-
-    QString rSubkeyName = keyName(rSubkey);
-    QString rSubkeyPath = keyPath(rSubkey);
-
-    HKEY handle = 0;
-    LONG res = RegOpenKeyEx(parentHandle, (wchar_t*)rSubkeyPath.utf16(), 0, KEY_READ, &handle);
-
-    if (res != ERROR_SUCCESS)
-        return QString();
-
-    // get the size and type of the value
-    DWORD dataType;
-    DWORD dataSize;
-    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, &dataType, 0, &dataSize);
-    if (res != ERROR_SUCCESS) {
-        RegCloseKey(handle);
-        return QString();
-    }
-
-    // get the value
-    QByteArray data(dataSize, 0);
-    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, 0,
-                          reinterpret_cast<unsigned char*>(data.data()), &dataSize);
-    if (res != ERROR_SUCCESS) {
-        RegCloseKey(handle);
-        return QString();
-    }
-
-    QString result;
-    switch (dataType) {
-        case REG_EXPAND_SZ:
-        case REG_SZ: {
-            result = QString::fromWCharArray(((const wchar_t *)data.constData()));
-            break;
-        }
-
-        case REG_MULTI_SZ: {
-            QStringList l;
-            int i = 0;
-            for (;;) {
-                QString s = QString::fromWCharArray((const wchar_t *)data.constData() + i);
-                i += s.length() + 1;
-
-                if (s.isEmpty())
-                    break;
-                l.append(s);
-            }
-            result = l.join(", ");
-            break;
-        }
-
-        case REG_NONE:
-        case REG_BINARY: {
-            result = QString::fromWCharArray((const wchar_t *)data.constData(), data.size() / 2);
-            break;
-        }
-
-        case REG_DWORD_BIG_ENDIAN:
-        case REG_DWORD: {
-            Q_ASSERT(data.size() == sizeof(int));
-            int i;
-            memcpy((char*)&i, data.constData(), sizeof(int));
-            result = QString::number(i);
-            break;
-        }
-
-        default:
-            qWarning("QSettings: unknown data %d type in windows registry", dataType);
-            break;
-    }
-
-    RegCloseKey(handle);
-    return result;
-}
 QT_END_NAMESPACE
 #endif
Index: /trunk/qmake/generators/win32/winmakefile.cpp
===================================================================
--- /trunk/qmake/generators/win32/winmakefile.cpp	(revision 768)
+++ /trunk/qmake/generators/win32/winmakefile.cpp	(revision 769)
@@ -151,4 +151,8 @@
                        exists((*it).local() + Option::dir_sep + lib + extension)) {
                         out = (*it).real() + Option::dir_sep + lib + extension;
+                        if (out.contains(QLatin1Char(' '))) {
+                            out.prepend(QLatin1Char('\"'));
+                            out.append(QLatin1Char('\"'));
+                        }
                         break;
                     }
Index: /trunk/qmake/meta.cpp
===================================================================
--- /trunk/qmake/meta.cpp	(revision 768)
+++ /trunk/qmake/meta.cpp	(revision 769)
@@ -120,8 +120,9 @@
         }
     }
-    if(ret.isNull())
+    if(ret.isNull()) {
         debug_msg(2, "QMakeMetaInfo: Cannot find info file for %s", lib.toLatin1().constData());
-    else
+    } else {
         debug_msg(2, "QMakeMetaInfo: Found info file %s for %s", ret.toLatin1().constData(), lib.toLatin1().constData());
+    }
     return ret;
 }
Index: /trunk/qmake/option.cpp
===================================================================
--- /trunk/qmake/option.cpp	(revision 768)
+++ /trunk/qmake/option.cpp	(revision 769)
@@ -645,6 +645,6 @@
     }
 
-    if (string.startsWith("\"") && string.endsWith("\"") ||
-        string.startsWith("\'") && string.endsWith("\'"))
+    if ((string.startsWith("\"") && string.endsWith("\"")) ||
+        (string.startsWith("\'") && string.endsWith("\'")))
         string = string.mid(1, string.length()-2);
 
Index: /trunk/qmake/project.cpp
===================================================================
--- /trunk/qmake/project.cpp	(revision 768)
+++ /trunk/qmake/project.cpp	(revision 769)
@@ -45,6 +45,4 @@
 #include "cachekeys.h"
 
-#include "epocroot.h"
-
 #include <qdatetime.h>
 #include <qfile.h>
@@ -66,4 +64,7 @@
 #include <stdio.h>
 #include <stdlib.h>
+
+// Included from tools/shared
+#include <symbian/epocroot.h>
 
 #ifdef Q_OS_WIN32
@@ -3076,5 +3077,5 @@
     } else if(var == QLatin1String("_PRO_FILE_PWD_")) {
         var = ".BUILTIN." + var;
-        place[var] =  QStringList(QFileInfo(pfile).absolutePath());
+        place[var] = QStringList(pfile.isEmpty() ? qmake_getpwd() : QFileInfo(pfile).absolutePath());
     } else if(var == QLatin1String("_QMAKE_CACHE_")) {
         var = ".BUILTIN." + var;
Index: /trunk/qmake/qmake.pri
===================================================================
--- /trunk/qmake/qmake.pri	(revision 768)
+++ /trunk/qmake/qmake.pri	(revision 769)
@@ -14,4 +14,6 @@
            generators/symbian/symmake_sbsv2.cpp \
            generators/symbian/initprojectdeploy_symbian.cpp \
+           windows/registry.cpp \
+           symbian/epocroot.cpp \
            generators/os2/gnumake.cpp
 
@@ -26,6 +28,7 @@
            generators/symbian/symmake_abld.h \
            generators/symbian/symmake_sbsv2.h \
-           generators/symbian/epocroot.h \
            generators/symbian/initprojectdeploy_symbian.h \
+           windows/registry.h \
+           symbian/epocroot.h \
            generators/os2/gnumake.h
 
@@ -129,4 +132,5 @@
         SOURCES += qfsfileengine_win.cpp qfsfileengine_iterator_win.cpp qsettings_win.cpp
         win32-msvc*:LIBS += ole32.lib advapi32.lib
+        win32-g++:LIBS += -lole32 -luuid
     } else:os2 {
         SOURCES += qfsfileengine_os2.cpp qfsfileengine_iterator_os2.cpp qsettings_os2.cpp
Index: /trunk/qmake/qmake.pro
===================================================================
--- /trunk/qmake/qmake.pro	(revision 768)
+++ /trunk/qmake/qmake.pro	(revision 769)
@@ -20,8 +20,19 @@
          $$QT_SOURCE_TREE/src/corelib/codecs \
          $$QT_SOURCE_TREE/src/corelib/plugin \
-	 $$QT_SOURCE_TREE/src/corelib/xml \
-	 $$QT_SOURCE_TREE/src/corelib/io
-INCPATH += generators generators/unix generators/win32 generators/mac generators/symbian generators/os2 \
-           $$QT_SOURCE_TREE/include $$QT_SOURCE_TREE/include/QtCore
+         $$QT_SOURCE_TREE/src/corelib/xml \
+         $$QT_SOURCE_TREE/src/corelib/io
+INCPATH += generators \
+           generators/unix \
+           generators/win32 \
+           generators/mac \
+           generators/symbian \
+           generators/os2 \
+           $$QT_SOURCE_TREE/include \
+           $$QT_SOURCE_TREE/include/QtCore \
+           $$QT_SOURCE_TREE/qmake
+
+VPATH += $$QT_SOURCE_TREE/tools/shared
+INCPATH += $$QT_SOURCE_TREE/tools/shared
+
 include(qmake.pri)
 
Index: /trunk/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
===================================================================
--- /trunk/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp	(revision 768)
+++ /trunk/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp	(revision 769)
@@ -1108,4 +1108,5 @@
 #ifndef NO_OPENTYPE
 static const HB_OpenTypeFeature indic_features[] = {
+    { HB_MAKE_TAG('l', 'o', 'c', 'a'), LocaProperty },
     { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty },
     { HB_MAKE_TAG('i', 'n', 'i', 't'), InitProperty },
@@ -1116,4 +1117,5 @@
     { HB_MAKE_TAG('h', 'a', 'l', 'f'), HalfFormProperty },
     { HB_MAKE_TAG('p', 's', 't', 'f'), PostFormProperty },
+    { HB_MAKE_TAG('c', 'j', 'c', 't'), ConjunctFormProperty },
     { HB_MAKE_TAG('v', 'a', 't', 'u'), VattuProperty },
     { HB_MAKE_TAG('p', 'r', 'e', 's'), PreSubstProperty },
@@ -1122,4 +1124,5 @@
     { HB_MAKE_TAG('p', 's', 't', 's'), PostSubstProperty },
     { HB_MAKE_TAG('h', 'a', 'l', 'n'), HalantProperty },
+    { HB_MAKE_TAG('c', 'a', 'l', 't'), IndicCaltProperty },
     { 0, 0 }
 };
@@ -1149,4 +1152,6 @@
     QString res;
     properties = ~properties;
+    if (properties & LocaProperty)
+        res += "Loca ";
     if (properties & CcmpProperty)
         res += "Ccmp ";
@@ -1169,4 +1174,6 @@
     if (properties & PostFormProperty)
         res += "PostForm ";
+    if (properties & ConjunctFormProperty)
+        res += "PostForm ";
     if (properties & VattuProperty)
         res += "Vattu ";
@@ -1183,4 +1190,6 @@
     if (properties & CligProperty)
         res += "Clig ";
+    if (properties & IndicCaltProperty)
+        res += "Calt ";
     return res;
 }
@@ -1297,7 +1306,12 @@
             int skipped = 0;
             Position pos = Post;
-            for (i = len-1; i > base; i--) {
+            for (i = len-1; i >= base; i--) {
                 if (position[i] != Consonant && (position[i] != Control || script == HB_Script_Kannada))
                     continue;
+
+                if (i < len-1 && position[i] == Control && position[i+1] == Consonant) {
+                    base = i+1;
+                    break;
+                }
 
                 Position charPosition = indic_position(uc[i]);
@@ -1546,7 +1560,9 @@
         // features we should always apply
         for (i = 0; i < len; ++i)
-            properties[i] = ~(CcmpProperty
+            properties[i] = ~(LocaProperty
+                              | CcmpProperty
                               | NuktaProperty
                               | VattuProperty
+                              | ConjunctFormProperty
                               | PreSubstProperty
                               | BelowSubstProperty
@@ -1554,6 +1570,8 @@
                               | PostSubstProperty
                               | HalantProperty
+                              | IndicCaltProperty
                               | PositioningProperties);
 
+        // Loca always applies
         // Ccmp always applies
         // Init
@@ -1612,4 +1630,5 @@
         // psts always applies
         // halant always applies
+        // calt always applies
 
 #ifdef INDIC_DEBUG
Index: /trunk/src/3rdparty/harfbuzz/src/harfbuzz-shaper-private.h
===================================================================
--- /trunk/src/3rdparty/harfbuzz/src/harfbuzz-shaper-private.h	(revision 768)
+++ /trunk/src/3rdparty/harfbuzz/src/harfbuzz-shaper-private.h	(revision 769)
@@ -58,32 +58,35 @@
 
 typedef enum {
-    CcmpProperty = 0x1,
-    InitProperty = 0x2,
-    IsolProperty = 0x4,
-    FinaProperty = 0x8,
-    MediProperty = 0x10,
-    RligProperty = 0x20,
-    CaltProperty = 0x40,
-    LigaProperty = 0x80,
-    DligProperty = 0x100,
-    CswhProperty = 0x200,
-    MsetProperty = 0x400,
+    LocaProperty = 0x1,
+    CcmpProperty = 0x2,
+    InitProperty = 0x4,
+    IsolProperty = 0x8,
+    FinaProperty = 0x10,
+    MediProperty = 0x20,
+    RligProperty = 0x40,
+    CaltProperty = 0x80,
+    LigaProperty = 0x100,
+    DligProperty = 0x200,
+    CswhProperty = 0x400,
+    MsetProperty = 0x800,
 
     /* used by indic and myanmar shaper */
-    NuktaProperty = 0x4,
-    AkhantProperty = 0x8,
-    RephProperty = 0x10,
-    PreFormProperty = 0x20,
-    BelowFormProperty = 0x40,
-    AboveFormProperty = 0x80,
-    HalfFormProperty = 0x100,
-    PostFormProperty = 0x200,
-    VattuProperty = 0x400,
-    PreSubstProperty = 0x800,
-    BelowSubstProperty = 0x1000,
-    AboveSubstProperty = 0x2000,
-    PostSubstProperty = 0x4000,
-    HalantProperty = 0x8000,
-    CligProperty = 0x10000
+    NuktaProperty = 0x8,
+    AkhantProperty = 0x10,
+    RephProperty = 0x20,
+    PreFormProperty = 0x40,
+    BelowFormProperty = 0x80,
+    AboveFormProperty = 0x100,
+    HalfFormProperty = 0x200,
+    PostFormProperty = 0x400,
+    ConjunctFormProperty = 0x800,
+    VattuProperty = 0x1000,
+    PreSubstProperty = 0x2000,
+    BelowSubstProperty = 0x4000,
+    AboveSubstProperty = 0x8000,
+    PostSubstProperty = 0x10000,
+    HalantProperty = 0x20000,
+    CligProperty = 0x40000,
+    IndicCaltProperty = 0x80000
 
 } HB_OpenTypeProperty;
Index: /trunk/src/3rdparty/harfbuzz/tests/shaping/main.cpp
===================================================================
--- /trunk/src/3rdparty/harfbuzz/tests/shaping/main.cpp	(revision 768)
+++ /trunk/src/3rdparty/harfbuzz/tests/shaping/main.cpp	(revision 769)
@@ -137,5 +137,5 @@
 }
 
-void hb_getGlyphMetrics(HB_Font font, HB_Glyph glyph, HB_GlyphMetrics *metrics)
+void hb_getGlyphMetrics(HB_Font, HB_Glyph, HB_GlyphMetrics *metrics)
 {
     // ###
@@ -143,5 +143,5 @@
 }
 
-HB_Fixed hb_getFontMetric(HB_Font font, HB_FontMetric metric)
+HB_Fixed hb_getFontMetric(HB_Font, HB_FontMetric )
 {
     return 0; // ####
@@ -170,4 +170,6 @@
     void cleanupTestCase();
 private slots:
+    void greek();
+
     void devanagari();
     void bengali();
@@ -204,16 +206,23 @@
 }
 
-struct ShapeTable {
-    unsigned short unicode[16];
-    unsigned short glyphs[16];
+class Shaper
+{
+public:
+    Shaper(FT_Face face, HB_Script script, const QString &str);
+
+    HB_FontRec hbFont;
+    HB_ShaperItem shaper_item;
+    QVarLengthArray<HB_Glyph> hb_glyphs;
+    QVarLengthArray<HB_GlyphAttributes> hb_attributes;
+    QVarLengthArray<HB_Fixed> hb_advances;
+    QVarLengthArray<HB_FixedPoint> hb_offsets;
+    QVarLengthArray<unsigned short> hb_logClusters;
+
 };
 
-static bool shaping(FT_Face face, const ShapeTable *s, HB_Script script)
-{
-    QString str = QString::fromUtf16( s->unicode );
-
+Shaper::Shaper(FT_Face face, HB_Script script, const QString &str)
+{
     HB_Face hbFace = HB_NewFace(face, hb_getSFntTable);
 
-    HB_FontRec hbFont;
     hbFont.klass = &hb_fontClass;
     hbFont.userData = face;
@@ -223,5 +232,4 @@
     hbFont.y_scale = face->size->metrics.y_scale;
 
-    HB_ShaperItem shaper_item;
     shaper_item.kerning_applied = false;
     shaper_item.string = reinterpret_cast<const HB_UChar16 *>(str.constData());
@@ -238,9 +246,4 @@
     shaper_item.initialGlyphCount = 0;
 
-    QVarLengthArray<HB_Glyph> hb_glyphs(shaper_item.num_glyphs);
-    QVarLengthArray<HB_GlyphAttributes> hb_attributes(shaper_item.num_glyphs);
-    QVarLengthArray<HB_Fixed> hb_advances(shaper_item.num_glyphs);
-    QVarLengthArray<HB_FixedPoint> hb_offsets(shaper_item.num_glyphs);
-    QVarLengthArray<unsigned short> hb_logClusters(shaper_item.num_glyphs);
 
     while (1) {
@@ -264,8 +267,64 @@
         if (HB_ShapeItem(&shaper_item))
             break;
-
     }
 
     HB_FreeFace(hbFace);
+}
+
+
+static bool decomposedShaping(FT_Face face, HB_Script script, const QChar &ch)
+{
+    QString uc = QString().append(ch);
+    Shaper shaper(face, script, uc);
+
+    uc = uc.normalized(QString::NormalizationForm_D);
+    Shaper decomposed(face, script, uc);
+
+    if( shaper.shaper_item.num_glyphs != decomposed.shaper_item.num_glyphs )
+        goto error;
+
+    for (unsigned int i = 0; i < shaper.shaper_item.num_glyphs; ++i) {
+        if ((shaper.shaper_item.glyphs[i]&0xffffff) != (decomposed.shaper_item.glyphs[i]&0xffffff))
+            goto error;
+    }
+    return true;
+ error:
+    QString str = "";
+    int i = 0;
+    while (i < uc.length()) {
+        str += QString("%1 ").arg(uc[i].unicode(), 4, 16);
+        ++i;
+    }
+    qDebug("%s: decomposedShaping of char %4x failed\n    decomposedString: %s\n   nglyphs=%d, decomposed nglyphs %d",
+           face->family_name,
+           ch.unicode(), str.toLatin1().data(),
+           shaper.shaper_item.num_glyphs,
+           decomposed.shaper_item.num_glyphs);
+
+    str = "";
+    i = 0;
+    while (i < shaper.shaper_item.num_glyphs) {
+        str += QString("%1 ").arg(shaper.shaper_item.glyphs[i], 4, 16);
+        ++i;
+    }
+    qDebug("    composed glyph result   = %s", str.toLatin1().constData());
+    str = "";
+    i = 0;
+    while (i < decomposed.shaper_item.num_glyphs) {
+        str += QString("%1 ").arg(decomposed.shaper_item.glyphs[i], 4, 16);
+        ++i;
+    }
+    qDebug("    decomposed glyph result = %s", str.toLatin1().constData());
+    return false;
+}
+
+struct ShapeTable {
+    unsigned short unicode[16];
+    unsigned short glyphs[16];
+};
+
+static bool shaping(FT_Face face, const ShapeTable *s, HB_Script script)
+{
+    Shaper shaper(face, script, QString::fromUtf16( s->unicode ));
 
     hb_uint32 nglyphs = 0;
@@ -276,14 +335,14 @@
     }
 
-    if( nglyphs != shaper_item.num_glyphs )
+    if( nglyphs != shaper.shaper_item.num_glyphs )
 	goto error;
 
     for (hb_uint32 i = 0; i < nglyphs; ++i) {
-	if ((shaper_item.glyphs[i]&0xffffff) != s->glyphs[i])
+        if ((shaper.shaper_item.glyphs[i]&0xffffff) != s->glyphs[i])
 	    goto error;
     }
     return true;
  error:
-    str = "";
+    QString str = "";
     const unsigned short *uc = s->unicode;
     while (*uc) {
@@ -294,10 +353,10 @@
            face->family_name,
            str.toLatin1().constData(),
-           shaper_item.num_glyphs, nglyphs);
+           shaper.shaper_item.num_glyphs, nglyphs);
 
     str = "";
     hb_uint32 i = 0;
-    while (i < shaper_item.num_glyphs) {
-	str += QString("%1 ").arg(shaper_item.glyphs[i], 4, 16);
+    while (i < shaper.shaper_item.num_glyphs) {
+        str += QString("%1 ").arg(shaper.shaper_item.glyphs[i], 4, 16);
 	++i;
     }
@@ -305,4 +364,64 @@
     return false;
 }
+
+
+void tst_QScriptEngine::greek()
+{
+    FT_Face face = loadFace("DejaVuSans.ttf");
+    if (face) {
+        for (int uc = 0x1f00; uc <= 0x1fff; ++uc) {
+            QString str;
+            str.append(uc);
+            if (str.normalized(QString::NormalizationForm_D).normalized(QString::NormalizationForm_C) != str) {
+                //qDebug() << "skipping" << hex << uc;
+                continue;
+            }
+            if (uc == 0x1fc1 || uc == 0x1fed)
+                continue;
+            QVERIFY( decomposedShaping(face, HB_Script_Greek, QChar(uc)) );
+        }
+        FT_Done_Face(face);
+    } else {
+        QSKIP("couln't find DejaVu Sans", SkipAll);
+    }
+
+
+    face = loadFace("SBL_grk.ttf");
+    if (face) {
+        for (int uc = 0x1f00; uc <= 0x1fff; ++uc) {
+            QString str;
+            str.append(uc);
+            if (str.normalized(QString::NormalizationForm_D).normalized(QString::NormalizationForm_C) != str) {
+                //qDebug() << "skipping" << hex << uc;
+                continue;
+            }
+            if (uc == 0x1fc1 || uc == 0x1fed)
+                continue;
+            QVERIFY( decomposedShaping(face, HB_Script_Greek, QChar(uc)) );
+
+        }
+
+        const ShapeTable shape_table [] = {
+            { { 0x3b1, 0x300, 0x313, 0x0 },
+              { 0xb8, 0x3d3, 0x3c7, 0x0 } },
+            { { 0x3b1, 0x313, 0x300, 0x0 },
+              { 0xd4, 0x0 } },
+
+            { {0}, {0} }
+        };
+
+
+        const ShapeTable *s = shape_table;
+        while (s->unicode[0]) {
+            QVERIFY( shaping(face, s, HB_Script_Greek) );
+            ++s;
+        }
+
+        FT_Done_Face(face);
+    } else {
+        QSKIP("couln't find DejaVu Sans", SkipAll);
+    }
+}
+
 
 void tst_QScriptEngine::devanagari()
@@ -1012,4 +1131,6 @@
                 { { 0xd2f, 0xd4d, 0xd15, 0xd4d, 0xd15, 0xd41, 0x0 },
                   { 0x2ff, 0x0 } },
+                { { 0xd30, 0xd4d, 0x200d, 0xd35, 0xd4d, 0xd35, 0x0 },
+                  { 0xf3, 0x350, 0x0 } },
 
                 { {0}, {0} }
Index: /trunk/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
===================================================================
--- /trunk/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h	(revision 768)
+++ /trunk/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h	(revision 769)
@@ -325,4 +325,9 @@
 #endif
 
+/* PLATFORM(ALPHA) */
+#if defined(__alpha__)
+#define WTF_PLATFORM_ALPHA 1
+#endif
+
 /* PLATFORM(SH4) */
 #if defined(__SH4__)
@@ -738,5 +743,5 @@
 #if PLATFORM(X86_64) && (PLATFORM(DARWIN) || PLATFORM(LINUX) || PLATFORM(SOLARIS) || PLATFORM(HPUX))
 #define WTF_USE_JSVALUE64 1
-#elif (PLATFORM(IA64) && !PLATFORM(IA64_32)) || PLATFORM(SPARC64)
+#elif (PLATFORM(IA64) && !PLATFORM(IA64_32)) || PLATFORM(SPARC64) || PLATFORM(ALPHA)
 #define WTF_USE_JSVALUE64 1
 #elif PLATFORM(AIX64)
Index: /trunk/src/3rdparty/phonon/ds9/videowidget.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/ds9/videowidget.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/ds9/videowidget.cpp	(revision 769)
@@ -219,4 +219,7 @@
                 return current; //no switch here
 
+            if (!mediaObject())
+                return current;
+
             //firt we delete the renderer
             //initialization of the widgets
Index: /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp	(revision 769)
@@ -21,5 +21,4 @@
 #include "abstractaudioeffect.h"
 #include "audioplayer.h"
-#include "mmf_videoplayer.h"
 
 QT_BEGIN_NAMESPACE
Index: /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.h	(revision 769)
@@ -29,5 +29,4 @@
 #include "effectparameter.h"
 #include "mmf_medianode.h"
-#include "mmf_videoplayer.h"
 
 class CMdaAudioOutputStream;
Index: /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp	(revision 769)
@@ -49,5 +49,5 @@
         :   AbstractPlayer(player)
         ,   m_parent(parent)
-        ,   m_playPending(false)
+        ,   m_pending(NothingPending)
         ,   m_positionTimer(new QTimer(this))
         ,   m_bufferStatusTimer(new QTimer(this))
@@ -75,12 +75,10 @@
 
     case LoadingState:
-        m_playPending = true;
+        setPending(PlayPending);
         break;
 
     case StoppedState:
     case PausedState:
-        doPlay();
-        startPositionTimer();
-        changeState(PlayingState);
+        startPlayback();
         break;
 
@@ -104,5 +102,4 @@
     TRACE_ENTRY("state %d", privateState());
 
-    m_playPending = false;
     stopTimers();
 
@@ -110,6 +107,9 @@
     case GroundState:
     case LoadingState:
+    case StoppedState:
+        setPending(PausePending);
+        break;
+
     case PausedState:
-    case StoppedState:
         // Do nothing
         break;
@@ -136,5 +136,5 @@
     TRACE_ENTRY("state %d", privateState());
 
-    m_playPending = false;
+    setPending(NothingPending);
     stopTimers();
 
@@ -366,10 +366,29 @@
 }
 
+void MMF::AbstractMediaPlayer::loadingComplete(int error)
+{
+    Q_ASSERT(Phonon::LoadingState == state());
+
+    if (KErrNone == error) {
+        updateMetaData();
+        changeState(StoppedState);
+    } else {
+        setError(tr("Loading clip failed"), error);
+    }
+}
+
 void MMF::AbstractMediaPlayer::playbackComplete(int error)
 {
     stopTimers();
 
+    if (KErrNone == error && !m_aboutToFinishSent) {
+        const qint64 total = totalTime();
+        emit MMF::AbstractPlayer::tick(total);
+        m_aboutToFinishSent = true;
+        emit aboutToFinish();
+    }
+
     if (KErrNone == error) {
-        changeState(StoppedState);
+        changeState(PausedState);
 
         // MediaObject::switchToNextSource deletes the current player, so we
@@ -380,4 +399,5 @@
     else {
         setError(tr("Playback complete"), error);
+        emit finished();
     }
 }
@@ -394,13 +414,11 @@
 void MMF::AbstractMediaPlayer::positionTick()
 {
-    emitMarksIfReached();
-
     const qint64 current = currentTime();
+    emitMarksIfReached(current);
     emit MMF::AbstractPlayer::tick(current);
 }
 
-void MMF::AbstractMediaPlayer::emitMarksIfReached()
-{
-    const qint64 current = currentTime();
+void MMF::AbstractMediaPlayer::emitMarksIfReached(qint64 current)
+{
     const qint64 total = totalTime();
     const qint64 remaining = total - current;
@@ -436,7 +454,35 @@
 }
 
+void MMF::AbstractMediaPlayer::setPending(Pending pending)
+{
+    const Phonon::State oldState = state();
+    m_pending = pending;
+    const Phonon::State newState = state();
+    if (newState != oldState)
+        emit stateChanged(newState, oldState);
+}
+
+void MMF::AbstractMediaPlayer::startPlayback()
+{
+    doPlay();
+    startPositionTimer();
+    changeState(PlayingState);
+}
+
 void MMF::AbstractMediaPlayer::bufferStatusTick()
 {
     emit MMF::AbstractPlayer::bufferStatus(bufferStatus());
+}
+
+Phonon::State MMF::AbstractMediaPlayer::phononState(PrivateState state) const
+{
+    Phonon::State result = AbstractPlayer::phononState(state);
+
+    if (PausePending == m_pending) {
+        Q_ASSERT(Phonon::StoppedState == result || Phonon::LoadingState == result);
+        result = Phonon::PausedState;
+    }
+
+    return result;
 }
 
@@ -448,18 +494,24 @@
     const Phonon::State newPhononState = phononState(newState);
 
-    // TODO: add some invariants to check that the transition is valid
-    AbstractPlayer::changeState(newState);
-
     if (LoadingState == oldPhononState && StoppedState == newPhononState) {
-        // Ensure initial volume is set on MMF API before starting playback
-        doVolumeChanged();
-
-        // Check whether play() was called while clip was being loaded.  If so,
-        // playback should be started now
-        if (m_playPending) {
-            TRACE_0("play was called while loading; starting playback now");
-            m_playPending = false;
-            play();
-        }
+        switch (m_pending) {
+        case NothingPending:
+            AbstractPlayer::changeState(newState);
+            break;
+
+        case PlayPending:
+            changeState(PlayingState); // necessary in order to apply initial volume
+            doVolumeChanged();
+            startPlayback();
+            break;
+
+        case PausePending:
+            AbstractPlayer::changeState(PausedState);
+            break;
+        }
+
+        setPending(NothingPending);
+    } else {
+        AbstractPlayer::changeState(newState);
     }
 }
Index: /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.h	(revision 769)
@@ -61,4 +61,6 @@
     // AbstractPlayer
     virtual void doSetTickInterval(qint32 interval);
+    virtual Phonon::State phononState(PrivateState state) const;
+    virtual void changeState(PrivateState newState);
 
     virtual void doPlay() = 0;
@@ -71,5 +73,4 @@
     virtual int bufferStatus() const = 0;
     virtual void close() = 0;
-    virtual void changeState(PrivateState newState);
 
     void updateMetaData();
@@ -81,4 +82,5 @@
     void bufferingComplete();
     void maxVolumeChanged(int maxVolume);
+    void loadingComplete(int error);
     void playbackComplete(int error);
 
@@ -92,6 +94,15 @@
     void stopTimers();
     void doVolumeChanged();
-    void emitMarksIfReached();
+    void emitMarksIfReached(qint64 position);
     void resetMarksIfRewound();
+    void startPlayback();
+
+    enum Pending {
+        NothingPending,
+        PausePending,
+        PlayPending
+    };
+
+    void setPending(Pending pending);
 
 private Q_SLOTS:
@@ -102,10 +113,5 @@
     MediaObject *const          m_parent;
 
-    /**
-     * This flag is set to true if play is called when the object is
-     * in a Loading state.  Once loading is complete, playback will
-     * be started.
-     */
-    bool                        m_playPending;
+    Pending                     m_pending;
 
     QScopedPointer<QTimer>      m_positionTimer;
Index: /trunk/src/3rdparty/phonon/mmf/abstractplayer.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractplayer.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractplayer.cpp	(revision 769)
@@ -49,4 +49,9 @@
         m_transitionTime = player->m_transitionTime;
         m_prefinishMark = player->m_prefinishMark;
+
+        // This is to prevent unwanted state transitions occurring as a result
+        // of MediaObject::switchToNextSource() during playlist playback.
+        if (StoppedState == player->m_state)
+            m_state = player->m_state;
     }
 }
@@ -97,5 +102,5 @@
 //-----------------------------------------------------------------------------
 
-void MMF::AbstractPlayer::setVideoOutput(VideoOutput* videoOutput)
+void MMF::AbstractPlayer::setVideoOutput(AbstractVideoOutput* videoOutput)
 {
     m_videoOutput = videoOutput;
@@ -142,5 +147,5 @@
 }
 
-Phonon::State MMF::AbstractPlayer::phononState(PrivateState state)
+Phonon::State MMF::AbstractPlayer::phononState(PrivateState state) const
 {
     const Phonon::State phononState =
Index: /trunk/src/3rdparty/phonon/mmf/abstractplayer.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractplayer.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/abstractplayer.h	(revision 769)
@@ -25,5 +25,5 @@
 #include <QObject>
 
-#include "videooutput.h"
+#include "abstractvideooutput.h"
 
 class RFile;
@@ -35,5 +35,4 @@
 namespace MMF
 {
-class VideoOutput;
 
 /**
@@ -80,5 +79,5 @@
     virtual void volumeChanged(qreal volume);
 
-    void setVideoOutput(VideoOutput* videoOutput);
+    void setVideoOutput(AbstractVideoOutput *videoOutput);
 
     /**
@@ -135,5 +134,5 @@
      * Converts PrivateState into the corresponding Phonon::State
      */
-    static Phonon::State phononState(PrivateState state);
+    virtual Phonon::State phononState(PrivateState state) const;
 
     virtual void videoOutputChanged();
@@ -157,5 +156,5 @@
 protected:
     // Not owned
-    VideoOutput*                m_videoOutput;
+    AbstractVideoOutput*        m_videoOutput;
 
     qreal                       m_volume;
Index: /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.cpp	(revision 769)
@@ -0,0 +1,185 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "abstractvideooutput.h"
+#include "utils.h"
+
+#ifndef QT_NO_DEBUG
+#include "objectdump.h"
+#endif
+
+#include <QtCore/private/qcore_symbian_p.h> // for qt_TSize2QSize
+
+#include <QMoveEvent>
+#include <QResizeEvent>
+
+#include <QApplication> // for QApplication::activeWindow
+
+#include <coecntrl.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+/*! \class MMF::AbstractVideoOutput
+  \internal
+*/
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio =
+    Phonon::VideoWidget::AspectRatioAuto;
+static const Phonon::VideoWidget::ScaleMode DefaultScaleMode =
+    Phonon::VideoWidget::FitInView;
+
+
+//-----------------------------------------------------------------------------
+// Constructor / destructor
+//-----------------------------------------------------------------------------
+
+MMF::AbstractVideoOutput::AbstractVideoOutput(QWidget *parent)
+    :   QWidget(parent)
+    ,   m_aspectRatio(DefaultAspectRatio)
+    ,   m_scaleMode(DefaultScaleMode)
+{
+
+}
+
+MMF::AbstractVideoOutput::~AbstractVideoOutput()
+{
+
+}
+
+void MMF::AbstractVideoOutput::setVideoSize(const QSize &frameSize)
+{
+    TRACE_CONTEXT(AbstractVideoOutput::setVideoSize, EVideoInternal);
+    TRACE("oldSize %d %d newSize %d %d",
+          m_videoFrameSize.width(), m_videoFrameSize.height(),
+          frameSize.width(), frameSize.height());
+
+    if (frameSize != m_videoFrameSize) {
+        m_videoFrameSize = frameSize;
+        updateGeometry();
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// QWidget
+//-----------------------------------------------------------------------------
+
+QSize MMF::AbstractVideoOutput::sizeHint() const
+{
+    // TODO: replace this with a more sensible default
+    QSize result(320, 240);
+
+    if (!m_videoFrameSize.isNull())
+        result = m_videoFrameSize;
+
+    return result;
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+RWindowBase* MMF::AbstractVideoOutput::videoWindow() const
+{
+    CCoeControl *control = internalWinId();
+    if (!control)
+        control = effectiveWinId();
+
+    RWindowBase *window = 0;
+    if (control)
+        window = control->DrawableWindow();
+
+    return window;
+}
+
+QSize MMF::AbstractVideoOutput::videoWindowSize() const
+{
+    QSize result;
+    if (RWindowBase *const window = videoWindow())
+        result = qt_TSize2QSize(window->Size());
+    return result;
+}
+
+Phonon::VideoWidget::AspectRatio MMF::AbstractVideoOutput::aspectRatio() const
+{
+    return m_aspectRatio;
+}
+
+void MMF::AbstractVideoOutput::setAspectRatio
+    (Phonon::VideoWidget::AspectRatio aspectRatio)
+{
+    if (m_aspectRatio != aspectRatio) {
+        m_aspectRatio = aspectRatio;
+        emit aspectRatioChanged();
+    }
+}
+
+Phonon::VideoWidget::ScaleMode MMF::AbstractVideoOutput::scaleMode() const
+{
+    return m_scaleMode;
+}
+
+void MMF::AbstractVideoOutput::setScaleMode
+    (Phonon::VideoWidget::ScaleMode scaleMode)
+{
+    if (m_scaleMode != scaleMode) {
+        m_scaleMode = scaleMode;
+        emit scaleModeChanged();
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoOutput::dump() const
+{
+#ifndef QT_NO_DEBUG
+    TRACE_CONTEXT(AbstractVideoOutput::dump, EVideoInternal);
+
+    QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor);
+    visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs
+    ObjectDump::addDefaultAnnotators(*visitor);
+
+    if (QWidget *window = QApplication::activeWindow()) {
+        TRACE("Dumping from root window 0x%08x:", window);
+        ObjectDump::dumpTreeFromLeaf(*window, *visitor);
+    }
+
+    TRACE("Dumping tree from leaf 0x%08x:", this);
+    ObjectDump::dumpTreeFromLeaf(*this, *visitor);
+
+    QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper);
+    dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs
+    ObjectDump::addDefaultAnnotators(*dumper);
+    TRACE_0("Dumping AbstractVideoOutput:");
+    dumper->dumpObject(*this);
+#endif
+}
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/abstractvideooutput.h	(revision 769)
@@ -0,0 +1,93 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_ABSTRACTVIDEOOUTPUT_H
+#define PHONON_MMF_ABSTRACTVIDEOOUTPUT_H
+
+#include <QtGui/QWidget>
+#include <QVector>
+#include <QRect>
+#include "defs.h"
+
+#include <phonon/abstractvideooutput.h>
+#include <phonon/videowidget.h>
+
+#include <e32std.h>
+class RWindowBase;
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+
+/**
+ * @short ABC for widget on which video is displayed
+ *
+ * @see DsaVideoOutput, SurfaceVideoOutput
+ */
+class AbstractVideoOutput
+    :   public QWidget
+{
+    Q_OBJECT
+
+public:
+    ~AbstractVideoOutput();
+
+    // Set size of video frame.  Called by VideoPlayer.
+    void setVideoSize(const QSize &size);
+
+    RWindowBase* videoWindow() const;
+    QSize videoWindowSize() const;
+
+    Phonon::VideoWidget::AspectRatio aspectRatio() const;
+    void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio);
+
+    Phonon::VideoWidget::ScaleMode scaleMode() const;
+    void setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode);
+
+    // Debugging output
+    void dump() const;
+
+Q_SIGNALS:
+    void videoWindowChanged();
+    void aspectRatioChanged();
+    void scaleModeChanged();
+
+protected:
+    AbstractVideoOutput(QWidget *parent);
+
+private:
+    // QWidget
+    QSize sizeHint() const;
+
+private:
+    // Dimensions of the video clip
+    QSize                   m_videoFrameSize;
+
+    Phonon::VideoWidget::AspectRatio        m_aspectRatio;
+    Phonon::VideoWidget::ScaleMode          m_scaleMode;
+
+};
+}
+}
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp	(revision 769)
@@ -0,0 +1,495 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <QUrl>
+#include <QTimer>
+#include <QWidget>
+
+#include <coemain.h>    // for CCoeEnv
+
+#include "abstractvideoplayer.h"
+#include "utils.h"
+
+#ifndef QT_NO_DEBUG
+#include "objectdump.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+/*! \class MMF::AbstractVideoPlayer
+  \internal
+*/
+
+//-----------------------------------------------------------------------------
+// Constructor / destructor
+//-----------------------------------------------------------------------------
+
+MMF::AbstractVideoPlayer::AbstractVideoPlayer(MediaObject *parent, const AbstractPlayer *player)
+    :   AbstractMediaPlayer(parent, player)
+    ,   m_wsSession(CCoeEnv::Static()->WsSession())
+    ,   m_screenDevice(*CCoeEnv::Static()->ScreenDevice())
+    ,   m_window(0)
+    ,   m_scaleWidth(1.0)
+    ,   m_scaleHeight(1.0)
+    ,   m_totalTime(0)
+{
+
+}
+
+void MMF::AbstractVideoPlayer::construct()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::AbstractVideoPlayer, EVideoApi);
+    TRACE_ENTRY_0();
+
+    if (m_videoOutput) {
+        initVideoOutput();
+        m_window = m_videoOutput->videoWindow();
+    }
+
+    createPlayer();
+
+    TRACE_EXIT_0();
+}
+
+MMF::AbstractVideoPlayer::~AbstractVideoPlayer()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::~AbstractVideoPlayer, EVideoApi);
+    TRACE_ENTRY_0();
+
+    // QObject destructor removes all signal-slot connections involving this
+    // object, so we do not need to disconnect from m_videoOutput here.
+
+    TRACE_EXIT_0();
+}
+
+CVideoPlayerUtility* MMF::AbstractVideoPlayer::nativePlayer() const
+{
+    return m_player.data();
+}
+
+//-----------------------------------------------------------------------------
+// Public API
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoPlayer::doPlay()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::doPlay, EVideoApi);
+
+    handlePendingParametersChanged();
+
+    m_player->Play();
+}
+
+void MMF::AbstractVideoPlayer::doPause()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::doPause, EVideoApi);
+
+    TRAPD(err, m_player->PauseL());
+    if (KErrNone != err && state() != ErrorState) {
+        TRACE("PauseL error %d", err);
+        setError(tr("Pause failed"), err);
+    }
+}
+
+void MMF::AbstractVideoPlayer::doStop()
+{
+    m_player->Stop();
+}
+
+void MMF::AbstractVideoPlayer::doSeek(qint64 ms)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::doSeek, EVideoApi);
+
+    TRAPD(err, m_player->SetPositionL(TTimeIntervalMicroSeconds(ms * 1000)));
+
+    if (KErrNone != err)
+        setError(tr("Seek failed"), err);
+}
+
+int MMF::AbstractVideoPlayer::setDeviceVolume(int mmfVolume)
+{
+    TRAPD(err, m_player->SetVolumeL(mmfVolume));
+    return err;
+}
+
+int MMF::AbstractVideoPlayer::openFile(RFile &file)
+{
+    TRAPD(err, m_player->OpenFileL(file));
+    return err;
+}
+
+int MMF::AbstractVideoPlayer::openUrl(const QString &url)
+{
+    TRAPD(err, m_player->OpenUrlL(qt_QString2TPtrC(url)));
+    return err;
+}
+
+int MMF::AbstractVideoPlayer::bufferStatus() const
+{
+    int result = 0;
+    TRAP_IGNORE(m_player->GetVideoLoadingProgressL(result));
+    return result;
+}
+
+void MMF::AbstractVideoPlayer::close()
+{
+    m_player->Close();
+}
+
+bool MMF::AbstractVideoPlayer::hasVideo() const
+{
+    return true;
+}
+
+qint64 MMF::AbstractVideoPlayer::currentTime() const
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::currentTime, EVideoApi);
+
+    TTimeIntervalMicroSeconds us;
+    TRAPD(err, us = m_player->PositionL())
+
+    qint64 result = 0;
+
+    if (KErrNone == err) {
+        result = toMilliSeconds(us);
+    } else {
+        TRACE("PositionL error %d", err);
+
+        // If we don't cast away constness here, we simply have to ignore
+        // the error.
+        const_cast<AbstractVideoPlayer*>(this)->setError(tr("Getting position failed"), err);
+    }
+
+    return result;
+}
+
+qint64 MMF::AbstractVideoPlayer::totalTime() const
+{
+    return m_totalTime;
+}
+
+
+//-----------------------------------------------------------------------------
+// Public slots
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoPlayer::videoWindowChanged()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::videoWindowChanged, EVideoInternal);
+    TRACE_ENTRY("state %d", state());
+
+    m_window = m_videoOutput ? m_videoOutput->videoWindow() : 0;
+
+    if (m_videoOutput)
+        m_videoOutput->dump();
+
+    handleVideoWindowChanged();
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::aspectRatioChanged()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::aspectRatioChanged, EVideoInternal);
+    TRACE_ENTRY("state %d aspectRatio %d", state());
+
+    updateScaleFactors(m_videoOutput->videoWindowSize());
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::scaleModeChanged()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::scaleModeChanged, EVideoInternal);
+    TRACE_ENTRY("state %d", state());
+
+    updateScaleFactors(m_videoOutput->videoWindowSize());
+
+    TRACE_EXIT_0();
+}
+
+
+//-----------------------------------------------------------------------------
+// MVideoPlayerUtilityObserver callbacks
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoPlayer::MvpuoOpenComplete(TInt aError)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::MvpuoOpenComplete, EVideoApi);
+    TRACE_ENTRY("state %d error %d", state(), aError);
+
+    __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
+
+    if (KErrNone == aError)
+        m_player->Prepare();
+    else
+        setError(tr("Opening clip failed"), aError);
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::MvpuoPrepareComplete(TInt aError)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::MvpuoPrepareComplete, EVideoApi);
+    TRACE_ENTRY("state %d error %d", state(), aError);
+
+    __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
+
+    TRAPD(err, getVideoClipParametersL(aError));
+
+    if (KErrNone == err) {
+        if (m_videoOutput)
+            m_videoOutput->dump();
+
+        maxVolumeChanged(m_player->MaxVolume());
+
+        if (m_videoOutput)
+            m_videoOutput->setVideoSize(m_videoFrameSize);
+
+        prepareCompleted();
+        handlePendingParametersChanged();
+
+        emit totalTimeChanged(totalTime());
+    }
+
+    loadingComplete(aError);
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::getVideoClipParametersL(TInt aError)
+{
+    User::LeaveIfError(aError);
+
+    // Get frame size
+    TSize size;
+    m_player->VideoFrameSizeL(size);
+    m_videoFrameSize = QSize(size.iWidth, size.iHeight);
+
+    // Get duration
+    m_totalTime = toMilliSeconds(m_player->DurationL());
+}
+
+
+void MMF::AbstractVideoPlayer::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::MvpuoFrameReady, EVideoApi);
+    TRACE_ENTRY("state %d error %d", state(), aError);
+
+    Q_UNUSED(aFrame);
+    Q_UNUSED(aError);   // suppress warnings in release builds
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::MvpuoPlayComplete(TInt aError)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::MvpuoPlayComplete, EVideoApi)
+    TRACE_ENTRY("state %d error %d", state(), aError);
+
+    // Call base class function which handles end of playback for both
+    // audio and video clips.
+    playbackComplete(aError);
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::MvpuoEvent(const TMMFEvent &aEvent)
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::MvpuoEvent, EVideoApi);
+    TRACE_ENTRY("state %d", state());
+
+    Q_UNUSED(aEvent);
+
+    TRACE_EXIT_0();
+}
+
+
+//-----------------------------------------------------------------------------
+// MVideoLoadingObserver callbacks
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoPlayer::MvloLoadingStarted()
+{
+    bufferingStarted();
+}
+
+void MMF::AbstractVideoPlayer::MvloLoadingComplete()
+{
+    bufferingComplete();
+}
+
+
+//-----------------------------------------------------------------------------
+// Video window updates
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractVideoPlayer::videoOutputChanged()
+{
+    TRACE_CONTEXT(AbstractVideoPlayer::videoOutputChanged, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    if (m_videoOutput)
+        initVideoOutput();
+
+    videoWindowChanged();
+
+    TRACE_EXIT_0();
+}
+
+void MMF::AbstractVideoPlayer::initVideoOutput()
+{
+    bool connected = connect(
+        m_videoOutput, SIGNAL(videoWindowChanged()),
+        this, SLOT(videoWindowChanged())
+    );
+    Q_ASSERT(connected);
+
+    connected = connect(
+        m_videoOutput, SIGNAL(aspectRatioChanged()),
+        this, SLOT(aspectRatioChanged())
+    );
+    Q_ASSERT(connected);
+
+    connected = connect(
+        m_videoOutput, SIGNAL(scaleModeChanged()),
+        this, SLOT(scaleModeChanged())
+    );
+    Q_ASSERT(connected);
+
+    // Suppress warnings in release builds
+    Q_UNUSED(connected);
+
+    // Do these after all connections are complete, to ensure
+    // that any signals generated get to their destinations.
+    m_videoOutput->winId();
+    m_videoOutput->setVideoSize(m_videoFrameSize);
+}
+
+// Helper function for aspect ratio / scale mode handling
+QSize scaleToAspect(const QSize &srcRect, int aspectWidth, int aspectHeight)
+{
+    const qreal aspectRatio = qreal(aspectWidth) / aspectHeight;
+
+    int width = srcRect.width();
+    int height = srcRect.width() / aspectRatio;
+    if (height > srcRect.height()){
+        height = srcRect.height();
+        width = srcRect.height() * aspectRatio;
+    }
+    return QSize(width, height);
+}
+
+void MMF::AbstractVideoPlayer::updateScaleFactors(const QSize &windowSize, bool apply)
+{
+    if (m_videoFrameSize.isValid()) {
+        QRect videoRect;
+
+        // Calculate size of smallest rect which contains video frame size
+        // and conforms to aspect ratio
+        switch (m_videoOutput->aspectRatio()) {
+        case Phonon::VideoWidget::AspectRatioAuto:
+            videoRect.setSize(m_videoFrameSize);
+            break;
+
+        case Phonon::VideoWidget::AspectRatioWidget:
+            videoRect.setSize(windowSize);
+            break;
+
+        case Phonon::VideoWidget::AspectRatio4_3:
+            videoRect.setSize(scaleToAspect(m_videoFrameSize, 4, 3));
+            break;
+
+        case Phonon::VideoWidget::AspectRatio16_9:
+            videoRect.setSize(scaleToAspect(m_videoFrameSize, 16, 9));
+            break;
+        }
+
+        // Scale to fill the window width
+        const int windowWidth = windowSize.width();
+        const int windowHeight = windowSize.height();
+        const qreal windowScaleFactor = qreal(windowWidth) / videoRect.width();
+        int videoWidth = windowWidth;
+        int videoHeight = videoRect.height() * windowScaleFactor;
+
+        const qreal windowToVideoHeightRatio = qreal(windowHeight) / videoHeight;
+
+        switch (m_videoOutput->scaleMode()) {
+        case Phonon::VideoWidget::ScaleAndCrop:
+            if (videoHeight < windowHeight) {
+                videoWidth *= windowToVideoHeightRatio;
+                videoHeight = windowHeight;
+            }
+            break;
+        case Phonon::VideoWidget::FitInView:
+        default:
+            if (videoHeight > windowHeight) {
+                videoWidth *= windowToVideoHeightRatio;
+                videoHeight = windowHeight;
+            }
+            break;
+        }
+
+        // Calculate scale factors
+        m_scaleWidth = 100.0f * videoWidth / m_videoFrameSize.width();
+        m_scaleHeight = 100.0f * videoHeight / m_videoFrameSize.height();
+
+        if (apply)
+            parametersChanged(ScaleFactors);
+    }
+}
+
+void MMF::AbstractVideoPlayer::parametersChanged(VideoParameters parameters)
+{
+    if (state() == LoadingState)
+        m_pendingChanges |= parameters;
+    else
+        handleParametersChanged(parameters);
+}
+
+void MMF::AbstractVideoPlayer::handlePendingParametersChanged()
+{
+    if (m_pendingChanges)
+        handleParametersChanged(m_pendingChanges);
+    m_pendingChanges = 0;
+}
+
+
+//-----------------------------------------------------------------------------
+// Metadata
+//-----------------------------------------------------------------------------
+
+int MMF::AbstractVideoPlayer::numberOfMetaDataEntries() const
+{
+    int numberOfEntries = 0;
+    TRAP_IGNORE(numberOfEntries = m_player->NumberOfMetaDataEntriesL());
+    return numberOfEntries;
+}
+
+QPair<QString, QString> MMF::AbstractVideoPlayer::metaDataEntry(int index) const
+{
+    CMMFMetaDataEntry *entry = 0;
+    QT_TRAP_THROWING(entry = m_player->MetaDataEntryL(index));
+    return QPair<QString, QString>(qt_TDesC2QString(entry->Name()), qt_TDesC2QString(entry->Value()));
+}
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/abstractvideoplayer.h	(revision 769)
@@ -0,0 +1,171 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_ABSTRACTVIDEOPLAYER_H
+#define PHONON_MMF_ABSTRACTVIDEOPLAYER_H
+
+#include <videoplayer.h> // from epoc32/include
+
+#include <QSize>
+
+#include "abstractmediaplayer.h"
+#include "abstractvideooutput.h"
+#include "defs.h"
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+/**
+ * @short ABC for classes which wrap the MMF video player utility
+ *
+ * On devices which use the legacy graphics subsystem which does not
+ * support surfaces, video rendering is done via Direct Screen Access using
+ * the CVideoPlayerUtility API.  On devices with a graphics subsystem which
+ * does support surfaces, video rendering is done using the
+ * CVideoPlayerUtility2 API.  Because CVideoPlayerUtility2 inherits from
+ * CVideoPlayerUtility, AbstractVideoPlayer holds a pointer to the latter.
+ *
+ * @see DsaVideoPlayer, SurfaceVideoPlayer
+ */
+class AbstractVideoPlayer
+    :   public AbstractMediaPlayer
+    ,   public MVideoPlayerUtilityObserver
+    ,   public MVideoLoadingObserver
+{
+    Q_OBJECT
+
+public:
+    ~AbstractVideoPlayer();
+
+    typedef CVideoPlayerUtility NativePlayer;
+    NativePlayer *nativePlayer() const;
+
+    // AbstractPlayer
+    virtual void doPlay();
+    virtual void doPause();
+    virtual void doStop();
+    virtual void doSeek(qint64 milliseconds);
+    virtual int setDeviceVolume(int mmfVolume);
+    virtual int openFile(RFile &file);
+    virtual int openUrl(const QString &url);
+    virtual int bufferStatus() const;
+    virtual void close();
+
+    // MediaObjectInterface
+    virtual bool hasVideo() const;
+    virtual qint64 currentTime() const;
+    virtual qint64 totalTime() const;
+
+    // AbstractPlayer
+    virtual void videoOutputChanged();
+
+    // AbstractMediaPlayer
+    virtual int numberOfMetaDataEntries() const;
+    virtual QPair<QString, QString> metaDataEntry(int index) const;
+
+public Q_SLOTS:
+    void videoWindowChanged();
+    void aspectRatioChanged();
+    void scaleModeChanged();
+
+protected:
+    AbstractVideoPlayer(MediaObject *parent, const AbstractPlayer *player);
+    void construct();
+    virtual void initVideoOutput();
+    void updateScaleFactors(const QSize &windowSize, bool apply = true);
+
+    // Called when a video parameter changes.  If the underlying native API is
+    // ready to handle the change, it is propagated immediately, otherwise the
+    // change is recorded in m_pendingChanged and handled later by
+    // handlePendingParametersChanged().
+    void parametersChanged(VideoParameters parameter);
+
+    // Implementation must initialize the m_player pointer.
+    virtual void createPlayer() = 0;
+
+    // Called from the MvpuoPrepareComplete callback.  Allows derived class to
+    // calculate clipping rectangles and scale factors prior to starting
+    // playback.
+    virtual void prepareCompleted() = 0;
+
+    // Called when native video window handle changes.  Derived class may defer
+    // propagation of this change to the MMF video player utility by calling
+    // parametersChanged().
+    virtual void handleVideoWindowChanged() = 0;
+
+    // Called when the derived class must handle changes which have been made
+    // to video parameters such as window handle, screen rectangle and scale
+    // factors.  Guaranteed to be called only when the underlying MMF video
+    // player object is ready to handle changes to these parameters.
+    virtual void handleParametersChanged(VideoParameters parameters) = 0;
+
+private:
+    void getVideoClipParametersL(TInt aError);
+
+    // Called when native player API enters a state in which it is able to
+    // handle pending changes such as new video window handle, updated scale
+    // factors etc.
+    void handlePendingParametersChanged();
+
+private:
+    // MVideoPlayerUtilityObserver
+    virtual void MvpuoOpenComplete(TInt aError);
+    virtual void MvpuoPrepareComplete(TInt aError);
+    virtual void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError);
+    virtual void MvpuoPlayComplete(TInt aError);
+    virtual void MvpuoEvent(const TMMFEvent &aEvent);
+
+    // MVideoLoadingObserver
+    virtual void MvloLoadingStarted();
+    virtual void MvloLoadingComplete();
+
+protected:
+    QScopedPointer<NativePlayer>        m_player;
+
+    // Not owned
+    RWsSession&                         m_wsSession;
+    CWsScreenDevice&                    m_screenDevice;
+    RWindowBase*                        m_window;
+
+    // Scaling factors for video display, expressed as percentages
+    TReal32                             m_scaleWidth;
+    TReal32                             m_scaleHeight;
+
+    // Dimensions of the video clip
+    QSize                               m_videoFrameSize;
+
+private:
+    // Bitmask of parameters which have changed while the MMF video player
+    // object is not yet ready to receive these changes.
+    // See handlePendingParametersChanged().
+    VideoParameters                     m_pendingChanges;
+
+    // Duration of the video clip
+    qint64                              m_totalTime;
+
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp	(revision 769)
@@ -19,5 +19,6 @@
 #include "ancestormovemonitor.h"
 #include "utils.h"
-#include "videooutput.h"
+
+#include "videooutput_dsa.h"
 
 #include <QCoreApplication>
@@ -60,5 +61,5 @@
 //-----------------------------------------------------------------------------
 
-void AncestorMoveMonitor::registerTarget(VideoOutput *target)
+void AncestorMoveMonitor::registerTarget(DsaVideoOutput *target)
 {
     TRACE_CONTEXT(AncestorMoveMonitor::registerTarget, EVideoInternal);
@@ -94,5 +95,5 @@
 }
 
-void AncestorMoveMonitor::unRegisterTarget(VideoOutput *target)
+void AncestorMoveMonitor::unRegisterTarget(DsaVideoOutput *target)
 {
     TRACE_CONTEXT(AncestorMoveMonitor::unRegisterTarget, EVideoInternal);
@@ -127,5 +128,5 @@
         if(it != m_hash.end()) {
             const TargetList& targetList = it.value();
-            VideoOutput* target = 0;
+            DsaVideoOutput* target = 0;
             foreach(target, targetList) {
                 switch (event->type()) {
@@ -167,5 +168,5 @@
         TRACE("ancestor 0x%08x", ancestor);
         const TargetList& targetList = it.value();
-        VideoOutput* target = 0;
+        DsaVideoOutput* target = 0;
         foreach(target, targetList) {
             TRACE("    target 0x%08x", target);
@@ -175,6 +176,4 @@
 }
 
-
-
 QT_END_NAMESPACE
 
Index: /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/ancestormovemonitor.h	(revision 769)
@@ -30,5 +30,5 @@
 namespace MMF
 {
-class VideoOutput;
+class DsaVideoOutput;
 
 class AncestorMoveMonitor : public QObject
@@ -50,5 +50,5 @@
      * the target receives a ParentChange event.
      */
-    void registerTarget(VideoOutput *target);
+    void registerTarget(DsaVideoOutput *target);
 
     /**
@@ -58,5 +58,5 @@
      * delivered to its ancestors.
      */
-    void unRegisterTarget(VideoOutput *target);
+    void unRegisterTarget(DsaVideoOutput *target);
 
 protected:
@@ -78,5 +78,5 @@
      * efficiency of iteration.
      */
-    typedef QList<VideoOutput *> TargetList;
+    typedef QList<DsaVideoOutput *> TargetList;
 
     /**
@@ -93,3 +93,3 @@
 QT_END_NAMESPACE
 
-#endif
+#endif // !PHONON_MMF_ANCESTORMOVEMONITOR_H
Index: /trunk/src/3rdparty/phonon/mmf/audioplayer.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/audioplayer.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/audioplayer.cpp	(revision 769)
@@ -100,5 +100,5 @@
 #if !defined(__SERIES60_31__)
     const int err = m_player->SetVolume(mmfVolume);
-    if (QSysInfo::s60Version() >= QSysInfo::SV_S60_5_0)
+    if (QSysInfo::s60Version() >= QSysInfo::SV_S60_3_2)
         return err;
     else
@@ -204,9 +204,7 @@
         m_totalTime = toMilliSeconds(m_player->Duration());
         emit totalTimeChanged(m_totalTime);
-        updateMetaData();
-        changeState(StoppedState);
-    } else {
-        setError(tr("Opening clip failed"), aError);
     }
+
+    loadingComplete(aError);
 
     TRACE_EXIT_0();
Index: /trunk/src/3rdparty/phonon/mmf/backend.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/backend.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/backend.cpp	(revision 769)
@@ -25,5 +25,4 @@
 
 #include "abstractaudioeffect.h"
-#include "ancestormovemonitor.h"
 #include "audiooutput.h"
 #include "audioplayer.h"
@@ -45,5 +44,7 @@
 Backend::Backend(QObject *parent)
     : QObject(parent)
+#ifndef PHONON_MMF_VIDEO_SURFACES
     , m_ancestorMoveMonitor(new AncestorMoveMonitor(this))
+#endif
     , m_effectFactory(new EffectFactory(this))
 {
@@ -87,6 +88,13 @@
         return m_effectFactory->createAudioEffect(type, parent);
     }
+
     case VideoWidgetClass:
-        result = new VideoWidget(m_ancestorMoveMonitor.data(), qobject_cast<QWidget *>(parent));
+    {
+        VideoWidget *widget = new VideoWidget(qobject_cast<QWidget *>(parent));
+#ifndef PHONON_MMF_VIDEO_SURFACES
+        widget->setAncestorMoveMonitor(m_ancestorMoveMonitor.data());
+#endif
+        result = widget;
+    }
         break;
 
Index: /trunk/src/3rdparty/phonon/mmf/backend.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/backend.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/backend.h	(revision 769)
@@ -20,5 +20,8 @@
 #define PHONON_MMF_BACKEND_H
 
+#ifndef PHONON_MMF_VIDEO_SURFACES
 #include "ancestormovemonitor.h"
+#endif
+
 #include "effectfactory.h"
 
@@ -54,5 +57,7 @@
 
 private:
+#ifndef PHONON_MMF_VIDEO_SURFACES
     QScopedPointer<AncestorMoveMonitor> m_ancestorMoveMonitor;
+#endif
     QScopedPointer<EffectFactory>       m_effectFactory;
 
Index: /trunk/src/3rdparty/phonon/mmf/defs.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/defs.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/defs.h	(revision 769)
@@ -36,4 +36,13 @@
     MediaTypeVideo
 };
+
+enum VideoParameter {
+    WindowHandle        = 0x1,
+    WindowScreenRect    = 0x2,
+    ScaleFactors        = 0x4
+};
+Q_DECLARE_FLAGS(VideoParameters, VideoParameter)
+Q_DECLARE_OPERATORS_FOR_FLAGS(VideoParameters)
+
 }
 }
Index: /trunk/src/3rdparty/phonon/mmf/mediaobject.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/mediaobject.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/mediaobject.cpp	(revision 769)
@@ -23,5 +23,11 @@
 #include "utils.h"
 #include "utils.h"
-#include "mmf_videoplayer.h"
+
+#ifdef PHONON_MMF_VIDEO_SURFACES
+#include "videoplayer_surface.h"
+#else
+#include "videoplayer_dsa.h"
+#endif
+
 #include "videowidget.h"
 
@@ -294,5 +300,9 @@
 
     case MediaTypeVideo:
-        newPlayer = new VideoPlayer(this, oldPlayer);
+#ifdef PHONON_MMF_VIDEO_SURFACES
+        newPlayer = SurfaceVideoPlayer::create(this, oldPlayer);
+#else
+        newPlayer = DsaVideoPlayer::create(this, oldPlayer);
+#endif
         break;
     }
@@ -314,9 +324,10 @@
     connect(m_player.data(), SIGNAL(stateChanged(Phonon::State,Phonon::State)), SIGNAL(stateChanged(Phonon::State,Phonon::State)));
     connect(m_player.data(), SIGNAL(finished()), SIGNAL(finished()));
-    connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
     connect(m_player.data(), SIGNAL(bufferStatus(int)), SIGNAL(bufferStatus(int)));
     connect(m_player.data(), SIGNAL(metaDataChanged(QMultiMap<QString,QString>)), SIGNAL(metaDataChanged(QMultiMap<QString,QString>)));
     connect(m_player.data(), SIGNAL(aboutToFinish()), SIGNAL(aboutToFinish()));
-    connect(m_player.data(), SIGNAL(prefinishMarkReached(qint32)), SIGNAL(tick(qint32)));
+    connect(m_player.data(), SIGNAL(prefinishMarkReached(qint32)), SIGNAL(prefinishMarkReached(qint32)));
+    connect(m_player.data(), SIGNAL(prefinishMarkReached(qint32)), SLOT(handlePrefinishMarkReached(qint32)));
+    connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
 
     // We need to call setError() after doing the connects, otherwise the
@@ -384,5 +395,5 @@
 //-----------------------------------------------------------------------------
 
-void MMF::MediaObject::setVideoOutput(VideoOutput* videoOutput)
+void MMF::MediaObject::setVideoOutput(AbstractVideoOutput* videoOutput)
 {
     m_player->setVideoOutput(videoOutput);
@@ -405,6 +416,18 @@
         switchToSource(m_nextSource);
         play();
-    }
-}
+    } else {
+        emit finished();
+    }
+}
+
+//-----------------------------------------------------------------------------
+// Other private functions
+//-----------------------------------------------------------------------------
+
+void MMF::MediaObject::handlePrefinishMarkReached(qint32 time)
+{
+    emit tick(time);
+}
+
 
 QT_END_NAMESPACE
Index: /trunk/src/3rdparty/phonon/mmf/mediaobject.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/mediaobject.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/mediaobject.h	(revision 769)
@@ -39,5 +39,5 @@
 {
 class AbstractPlayer;
-class VideoOutput;
+class AbstractVideoOutput;
 
 /**
@@ -86,5 +86,5 @@
     AbstractPlayer *abstractPlayer() const;
 
-    void setVideoOutput(VideoOutput* videoOutput);
+    void setVideoOutput(AbstractVideoOutput* videoOutput);
 
 public Q_SLOTS:
@@ -107,4 +107,7 @@
     void finished();
     void tick(qint64 time);
+
+private Q_SLOTS:
+    void handlePrefinishMarkReached(qint32);
 
 private:
Index: unk/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp	(revision 768)
+++ 	(revision )
@@ -1,658 +1,0 @@
-/*  This file is part of the KDE project.
-
-Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-
-This library is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 2.1 or 3 of the License.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this library.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include <QApplication>    // for QApplication::activeWindow
-#include <QUrl>
-#include <QTimer>
-#include <QWidget>
-
-#include <coemain.h>    // for CCoeEnv
-#include <coecntrl.h>
-
-#include "mmf_videoplayer.h"
-#include "utils.h"
-
-#ifndef QT_NO_DEBUG
-#include "objectdump.h"
-#endif
-
-QT_BEGIN_NAMESPACE
-
-using namespace Phonon;
-using namespace Phonon::MMF;
-
-/*! \class MMF::VideoPlayer
-  \internal
-*/
-
-//-----------------------------------------------------------------------------
-// Constructor / destructor
-//-----------------------------------------------------------------------------
-
-MMF::VideoPlayer::VideoPlayer(MediaObject *parent, const AbstractPlayer *player)
-        :   AbstractMediaPlayer(parent, player)
-        ,   m_wsSession(CCoeEnv::Static()->WsSession())
-        ,   m_screenDevice(*CCoeEnv::Static()->ScreenDevice())
-        ,   m_window(0)
-        ,   m_totalTime(0)
-        ,   m_pendingChanges(false)
-        ,   m_dsaActive(false)
-{
-    construct();
-}
-
-void MMF::VideoPlayer::construct()
-{
-    TRACE_CONTEXT(VideoPlayer::VideoPlayer, EVideoApi);
-    TRACE_ENTRY_0();
-
-    getVideoWindow();
-
-    const TInt priority = 0;
-    const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone;
-
-    CVideoPlayerUtility *player = 0;
-    QT_TRAP_THROWING(player = CVideoPlayerUtility::NewL
-            (
-                 *this,
-                 priority, preference,
-                 m_wsSession, m_screenDevice,
-                 *m_window,
-                 m_videoRect, m_videoRect
-            )
-        );
-    m_player.reset(player);
-
-    // CVideoPlayerUtility::NewL starts DSA
-    m_dsaActive = true;
-
-    m_player->RegisterForVideoLoadingNotification(*this);
-
-    TRACE_EXIT_0();
-}
-
-MMF::VideoPlayer::~VideoPlayer()
-{
-    TRACE_CONTEXT(VideoPlayer::~VideoPlayer, EVideoApi);
-    TRACE_ENTRY_0();
-
-    // QObject destructor removes all signal-slot connections involving this
-    // object, so we do not need to disconnect from m_videoOutput here.
-
-    TRACE_EXIT_0();
-}
-
-CVideoPlayerUtility* MMF::VideoPlayer::nativePlayer() const
-{
-    return m_player.data();
-}
-
-//-----------------------------------------------------------------------------
-// Public API
-//-----------------------------------------------------------------------------
-
-void MMF::VideoPlayer::doPlay()
-{
-    TRACE_CONTEXT(VideoPlayer::doPlay, EVideoApi);
-
-    applyPendingChanges();
-
-    m_player->Play();
-}
-
-void MMF::VideoPlayer::doPause()
-{
-    TRACE_CONTEXT(VideoPlayer::doPause, EVideoApi);
-
-    TRAPD(err, m_player->PauseL());
-    if (KErrNone != err && state() != ErrorState) {
-        TRACE("PauseL error %d", err);
-        setError(tr("Pause failed"), err);
-    }
-}
-
-void MMF::VideoPlayer::doStop()
-{
-    m_player->Stop();
-}
-
-void MMF::VideoPlayer::doSeek(qint64 ms)
-{
-    TRACE_CONTEXT(VideoPlayer::doSeek, EVideoApi);
-
-    TRAPD(err, m_player->SetPositionL(TTimeIntervalMicroSeconds(ms * 1000)));
-
-    if(KErrNone != err)
-        setError(tr("Seek failed"), err);
-}
-
-int MMF::VideoPlayer::setDeviceVolume(int mmfVolume)
-{
-    TRAPD(err, m_player->SetVolumeL(mmfVolume));
-    return err;
-}
-
-int MMF::VideoPlayer::openFile(RFile& file)
-{
-    TRAPD(err, m_player->OpenFileL(file));
-    return err;
-}
-
-int MMF::VideoPlayer::openUrl(const QString& url)
-{
-    TRAPD(err, m_player->OpenUrlL(qt_QString2TPtrC(url)));
-    return err;
-}
-
-int MMF::VideoPlayer::bufferStatus() const
-{
-    int result = 0;
-    TRAP_IGNORE(m_player->GetVideoLoadingProgressL(result));
-    return result;
-}
-
-void MMF::VideoPlayer::close()
-{
-    m_player->Close();
-}
-
-bool MMF::VideoPlayer::hasVideo() const
-{
-    return true;
-}
-
-qint64 MMF::VideoPlayer::currentTime() const
-{
-    TRACE_CONTEXT(VideoPlayer::currentTime, EVideoApi);
-
-    TTimeIntervalMicroSeconds us;
-    TRAPD(err, us = m_player->PositionL())
-
-    qint64 result = 0;
-
-    if (KErrNone == err) {
-        result = toMilliSeconds(us);
-    } else {
-        TRACE("PositionL error %d", err);
-
-        // If we don't cast away constness here, we simply have to ignore
-        // the error.
-        const_cast<VideoPlayer*>(this)->setError(tr("Getting position failed"), err);
-    }
-
-    return result;
-}
-
-qint64 MMF::VideoPlayer::totalTime() const
-{
-    return m_totalTime;
-}
-
-
-//-----------------------------------------------------------------------------
-// MVideoPlayerUtilityObserver callbacks
-//-----------------------------------------------------------------------------
-
-void MMF::VideoPlayer::MvpuoOpenComplete(TInt aError)
-{
-    TRACE_CONTEXT(VideoPlayer::MvpuoOpenComplete, EVideoApi);
-    TRACE_ENTRY("state %d error %d", state(), aError);
-
-    __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
-
-    if (KErrNone == aError)
-        m_player->Prepare();
-    else
-        setError(tr("Opening clip failed"), aError);
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::MvpuoPrepareComplete(TInt aError)
-{
-    TRACE_CONTEXT(VideoPlayer::MvpuoPrepareComplete, EVideoApi);
-    TRACE_ENTRY("state %d error %d", state(), aError);
-
-    __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
-
-    TRAPD(err, doPrepareCompleteL(aError));
-
-    if (KErrNone == err) {
-        maxVolumeChanged(m_player->MaxVolume());
-
-        if (m_videoOutput)
-            m_videoOutput->setVideoSize(m_videoFrameSize);
-
-        updateVideoRect();
-        applyPendingChanges();
-
-        emit totalTimeChanged(totalTime());
-        changeState(StoppedState);
-    } else {
-        setError(tr("Buffering clip failed"), err);
-    }
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::doPrepareCompleteL(TInt aError)
-{
-    User::LeaveIfError(aError);
-
-    // Get frame size
-    TSize size;
-    m_player->VideoFrameSizeL(size);
-    m_videoFrameSize = QSize(size.iWidth, size.iHeight);
-
-    // Get duration
-    m_totalTime = toMilliSeconds(m_player->DurationL());
-}
-
-
-void MMF::VideoPlayer::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
-{
-    TRACE_CONTEXT(VideoPlayer::MvpuoFrameReady, EVideoApi);
-    TRACE_ENTRY("state %d error %d", state(), aError);
-
-    Q_UNUSED(aFrame);
-    Q_UNUSED(aError);   // suppress warnings in release builds
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::MvpuoPlayComplete(TInt aError)
-{
-    TRACE_CONTEXT(VideoPlayer::MvpuoPlayComplete, EVideoApi)
-    TRACE_ENTRY("state %d error %d", state(), aError);
-
-    // Call base class function which handles end of playback for both
-    // audio and video clips.
-    playbackComplete(aError);
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::MvpuoEvent(const TMMFEvent &aEvent)
-{
-    TRACE_CONTEXT(VideoPlayer::MvpuoEvent, EVideoApi);
-    TRACE_ENTRY("state %d", state());
-
-    Q_UNUSED(aEvent);
-
-    TRACE_EXIT_0();
-}
-
-
-//-----------------------------------------------------------------------------
-// MVideoLoadingObserver callbacks
-//-----------------------------------------------------------------------------
-
-void MMF::VideoPlayer::MvloLoadingStarted()
-{
-    bufferingStarted();
-}
-
-void MMF::VideoPlayer::MvloLoadingComplete()
-{
-    bufferingComplete();
-}
-
-
-//-----------------------------------------------------------------------------
-// Video window updates
-//-----------------------------------------------------------------------------
-
-void MMF::VideoPlayer::getVideoWindow()
-{
-    TRACE_CONTEXT(VideoPlayer::getVideoWindow, EVideoInternal);
-    TRACE_ENTRY_0();
-
-    if(m_videoOutput) {
-        // Dump information to log, only in debug builds
-        m_videoOutput->dump();
-
-        initVideoOutput();
-        videoWindowChanged();
-    } else
-        // Top-level window
-        m_window = QApplication::activeWindow()->effectiveWinId()->DrawableWindow();
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::videoOutputChanged()
-{
-    TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal);
-    TRACE_ENTRY_0();
-
-    if (m_videoOutput) {
-        initVideoOutput();
-        videoWindowChanged();
-    }
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::initVideoOutput()
-{
-    m_videoOutput->winId();
-    m_videoOutput->setVideoSize(m_videoFrameSize);
-
-    bool connected = connect(
-        m_videoOutput, SIGNAL(videoWindowChanged()),
-        this, SLOT(videoWindowChanged())
-    );
-    Q_ASSERT(connected);
-
-    connected = connect(
-        m_videoOutput, SIGNAL(beginVideoWindowNativePaint()),
-        this, SLOT(suspendDirectScreenAccess())
-    );
-    Q_ASSERT(connected);
-
-    connected = connect(
-        m_videoOutput, SIGNAL(endVideoWindowNativePaint()),
-        this, SLOT(resumeDirectScreenAccess())
-    );
-    Q_ASSERT(connected);
-
-    connected = connect(
-        m_videoOutput, SIGNAL(aspectRatioChanged()),
-        this, SLOT(aspectRatioChanged())
-    );
-    Q_ASSERT(connected);
-
-    connected = connect(
-        m_videoOutput, SIGNAL(scaleModeChanged()),
-        this, SLOT(scaleModeChanged())
-    );
-    Q_ASSERT(connected);
-
-    // Suppress warnings in release builds
-    Q_UNUSED(connected);
-}
-
-void MMF::VideoPlayer::videoWindowChanged()
-{
-    TRACE_CONTEXT(VideoPlayer::videoOutputRegionChanged, EVideoInternal);
-    TRACE_ENTRY("state %d", state());
-
-    m_window = m_videoOutput->videoWindow();
-    updateVideoRect();
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::suspendDirectScreenAccess()
-{
-    m_dsaWasActive = stopDirectScreenAccess();
-}
-
-void MMF::VideoPlayer::resumeDirectScreenAccess()
-{
-    if(m_dsaWasActive) {
-        startDirectScreenAccess();
-        m_dsaWasActive = false;
-    }
-}
-
-void MMF::VideoPlayer::startDirectScreenAccess()
-{
-    if(!m_dsaActive) {
-        TRAPD(err, m_player->StartDirectScreenAccessL());
-        if(KErrNone == err)
-            m_dsaActive = true;
-        else
-            setError(tr("Video display error"), err);
-    }
-}
-
-bool MMF::VideoPlayer::stopDirectScreenAccess()
-{
-    const bool dsaWasActive = m_dsaActive;
-    if(m_dsaActive) {
-        TRAPD(err, m_player->StopDirectScreenAccessL());
-        if(KErrNone == err)
-            m_dsaActive = false;
-        else
-            setError(tr("Video display error"), err);
-    }
-    return dsaWasActive;
-}
-
-// Helper function for aspect ratio / scale mode handling
-QSize scaleToAspect(const QSize& srcRect, int aspectWidth, int aspectHeight)
-{
-    const qreal aspectRatio = qreal(aspectWidth) / aspectHeight;
-
-    int width = srcRect.width();
-    int height = srcRect.width() / aspectRatio;
-    if (height > srcRect.height()){
-        height = srcRect.height();
-        width = srcRect.height() * aspectRatio;
-    }
-    return QSize(width, height);
-}
-
-void MMF::VideoPlayer::updateVideoRect()
-{
-    QRect videoRect;
-    QRect windowRect = m_videoOutput->videoWindowRect();
-
-    // Clip to physical window size
-    // This is due to a defect in the layout when running on S60 3.2, which
-    // results in the rectangle of the video widget extending outside the
-    // screen in certain circumstances.  These include the initial startup
-    // of the mediaplayer demo in portrait mode.  When this rectangle is
-    // passed to the CVideoPlayerUtility, no video is rendered.
-    const TSize screenSize = m_screenDevice.SizeInPixels();
-    const QRect screenRect(0, 0, screenSize.iWidth, screenSize.iHeight);
-    windowRect = windowRect.intersected(screenRect);
-
-    const QSize windowSize = windowRect.size();
-
-    // Calculate size of smallest rect which contains video frame size
-    // and conforms to aspect ratio
-    switch (m_videoOutput->aspectRatio()) {
-    case Phonon::VideoWidget::AspectRatioAuto:
-        videoRect.setSize(m_videoFrameSize);
-        break;
-
-    case Phonon::VideoWidget::AspectRatioWidget:
-        videoRect.setSize(windowSize);
-        break;
-
-    case Phonon::VideoWidget::AspectRatio4_3:
-        videoRect.setSize(scaleToAspect(m_videoFrameSize, 4, 3));
-        break;
-
-    case Phonon::VideoWidget::AspectRatio16_9:
-        videoRect.setSize(scaleToAspect(m_videoFrameSize, 16, 9));
-        break;
-    }
-
-    // Scale to fill the window width
-    const int windowWidth = windowSize.width();
-    const int windowHeight = windowSize.height();
-    const qreal windowScaleFactor = qreal(windowWidth) / videoRect.width();
-    int videoWidth = windowWidth;
-    int videoHeight = videoRect.height() * windowScaleFactor;
-
-    const qreal windowToVideoHeightRatio = qreal(windowHeight) / videoHeight;
-
-    switch(m_videoOutput->scaleMode()) {
-    case Phonon::VideoWidget::ScaleAndCrop:
-        if(videoHeight < windowHeight) {
-            videoWidth *= windowToVideoHeightRatio;
-            videoHeight = windowHeight;
-        }
-        break;
-    case Phonon::VideoWidget::FitInView:
-    default:
-        if(videoHeight > windowHeight) {
-            videoWidth *= windowToVideoHeightRatio;
-            videoHeight = windowHeight;
-        }
-        break;
-    }
-
-    // Calculate scale factors
-    m_scaleWidth = 100.0f * videoWidth / m_videoFrameSize.width();
-    m_scaleHeight = 100.0f * videoHeight / m_videoFrameSize.height();
-
-    m_videoRect = qt_QRect2TRect(windowRect);
-
-    if (state() == LoadingState)
-        m_pendingChanges = true;
-    else {
-        applyVideoWindowChange();
-        m_pendingChanges = false;
-    }
-}
-
-void MMF::VideoPlayer::aspectRatioChanged()
-{
-    TRACE_CONTEXT(VideoPlayer::aspectRatioChanged, EVideoInternal);
-    TRACE_ENTRY("state %d aspectRatio %d", state());
-
-    updateVideoRect();
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoPlayer::scaleModeChanged()
-{
-    TRACE_CONTEXT(VideoPlayer::scaleModeChanged, EVideoInternal);
-    TRACE_ENTRY("state %d", state());
-
-    updateVideoRect();
-
-    TRACE_EXIT_0();
-}
-
-#ifndef QT_NO_DEBUG
-
-// The following code is for debugging problems related to video visibility.  It allows
-// the VideoPlayer instance to query the window server in order to determine the
-// DSA drawing region for the video window.
-
-class CDummyAO : public CActive
-{
-public:
-    CDummyAO() : CActive(CActive::EPriorityStandard) { CActiveScheduler::Add(this); }
-    void RunL() { }
-    void DoCancel() { }
-    TRequestStatus& Status() { return iStatus; }
-    void SetActive() { CActive::SetActive(); }
-};
-
-void getDsaRegion(RWsSession &session, const RWindowBase &window)
-{
-    RDirectScreenAccess dsa(session);
-    TInt err = dsa.Construct();
-    CDummyAO ao;
-    RRegion* region;
-    err = dsa.Request(region, ao.Status(), window);
-    ao.SetActive();
-    dsa.Close();
-    ao.Cancel();
-    if (region) {
-        qDebug() << "Phonon::MMF::getDsaRegion count" << region->Count();
-        for (int i=0; i<region->Count(); ++i) {
-            const TRect& rect = region->RectangleList()[i];
-            qDebug() << "Phonon::MMF::getDsaRegion rect"
-                << rect.iTl.iX << rect.iTl.iY << rect.iBr.iX << rect.iBr.iY;
-        }
-        region->Close();
-    }
-}
-
-#endif // _DEBUG
-
-void MMF::VideoPlayer::applyPendingChanges()
-{
-    if(m_pendingChanges)
-        applyVideoWindowChange();
-
-    m_pendingChanges = false;
-}
-
-void MMF::VideoPlayer::applyVideoWindowChange()
-{
-    TRACE_CONTEXT(VideoPlayer::applyVideoWindowChange, EVideoInternal);
-    TRACE_ENTRY_0();
-
-#ifndef QT_NO_DEBUG
-    getDsaRegion(m_wsSession, *m_window);
-#endif
-
-    static const TBool antialias = ETrue;
-
-    TRAPD(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias));
-    if(KErrNone != err) {
-        TRACE("SetScaleFactorL (1) err %d", err);
-        setError(tr("Video display error"), err);
-    }
-
-    if(KErrNone == err) {
-        TRAP(err,
-            m_player->SetDisplayWindowL
-                (
-                    m_wsSession, m_screenDevice,
-                    *m_window,
-                    m_videoRect, m_videoRect
-                )
-            );
-
-        if (KErrNone != err) {
-            TRACE("SetDisplayWindowL err %d", err);
-            setError(tr("Video display error"), err);
-        } else {
-            m_dsaActive = true;
-            TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias));
-            if(KErrNone != err) {
-                TRACE("SetScaleFactorL (2) err %d", err);
-                setError(tr("Video display error"), err);
-            }
-        }
-    }
-
-    TRACE_EXIT_0();
-}
-
-
-//-----------------------------------------------------------------------------
-// Metadata
-//-----------------------------------------------------------------------------
-
-int MMF::VideoPlayer::numberOfMetaDataEntries() const
-{
-    int numberOfEntries = 0;
-    TRAP_IGNORE(numberOfEntries = m_player->NumberOfMetaDataEntriesL());
-    return numberOfEntries;
-}
-
-QPair<QString, QString> MMF::VideoPlayer::metaDataEntry(int index) const
-{
-    CMMFMetaDataEntry *entry = 0;
-    QT_TRAP_THROWING(entry = m_player->MetaDataEntryL(index));
-    return QPair<QString, QString>(qt_TDesC2QString(entry->Name()), qt_TDesC2QString(entry->Value()));
-}
-
-QT_END_NAMESPACE
-
Index: unk/src/3rdparty/phonon/mmf/mmf_videoplayer.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/mmf_videoplayer.h	(revision 768)
+++ 	(revision )
@@ -1,138 +1,0 @@
-/*  This file is part of the KDE project.
-
-Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-
-This library is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 2.1 or 3 of the License.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this library.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#ifndef PHONON_MMF_VIDEOPLAYER_H
-#define PHONON_MMF_VIDEOPLAYER_H
-
-#include <videoplayer.h> // from epoc32/include
-
-#include "abstractmediaplayer.h"
-#include "videooutput.h"
-
-QT_BEGIN_NAMESPACE
-
-namespace Phonon
-{
-namespace MMF
-{
-/**
- * @short Wrapper over MMF video client utility
- *
- * See
- * <a href="http://wiki.forum.nokia.com/index.php/How_to_play_a_video_file_using_CVideoPlayerUtility">How to
- * play a video file using CVideoPlayerUtility</a>
- */
-class VideoPlayer : public AbstractMediaPlayer
-                  , public MVideoPlayerUtilityObserver
-                  , public MVideoLoadingObserver
-{
-    Q_OBJECT
-
-public:
-    VideoPlayer(MediaObject *parent = 0, const AbstractPlayer *player = 0);
-    virtual ~VideoPlayer();
-
-    typedef CVideoPlayerUtility NativePlayer;
-    NativePlayer *nativePlayer() const;
-
-    // AbstractPlayer
-    virtual void doPlay();
-    virtual void doPause();
-    virtual void doStop();
-    virtual void doSeek(qint64 milliseconds);
-    virtual int setDeviceVolume(int mmfVolume);
-    virtual int openFile(RFile& file);
-    virtual int openUrl(const QString& url);
-    virtual int bufferStatus() const;
-    virtual void close();
-
-    // MediaObjectInterface
-    virtual bool hasVideo() const;
-    virtual qint64 currentTime() const;
-    virtual qint64 totalTime() const;
-
-    // AbstractPlayer
-    virtual void videoOutputChanged();
-
-    // AbstractMediaPlayer
-    virtual int numberOfMetaDataEntries() const;
-    virtual QPair<QString, QString> metaDataEntry(int index) const;
-
-public Q_SLOTS:
-    void videoWindowChanged();
-    void aspectRatioChanged();
-    void scaleModeChanged();
-    void suspendDirectScreenAccess();
-    void resumeDirectScreenAccess();
-
-private:
-    void construct();
-
-    void doPrepareCompleteL(TInt aError);
-
-    void getVideoWindow();
-    void initVideoOutput();
-    void updateVideoRect();
-
-    void applyPendingChanges();
-    void applyVideoWindowChange();
-
-    void startDirectScreenAccess();
-    bool stopDirectScreenAccess();
-
-private:
-    // MVideoPlayerUtilityObserver
-    virtual void MvpuoOpenComplete(TInt aError);
-    virtual void MvpuoPrepareComplete(TInt aError);
-    virtual void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError);
-    virtual void MvpuoPlayComplete(TInt aError);
-    virtual void MvpuoEvent(const TMMFEvent &aEvent);
-
-    // MVideoLoadingObserver
-    virtual void MvloLoadingStarted();
-    virtual void MvloLoadingComplete();
-
-private:
-    QScopedPointer<NativePlayer>        m_player;
-
-    // Not owned
-    RWsSession&                         m_wsSession;
-    CWsScreenDevice&                    m_screenDevice;
-    RWindowBase*                        m_window;
-
-    /* Extent of the video display - will be clipped to m_windowRect */
-    TRect                               m_videoRect;
-
-    TReal32                             m_scaleWidth;
-    TReal32                             m_scaleHeight;
-
-    QSize                               m_videoFrameSize;
-    qint64                              m_totalTime;
-
-    bool                                m_pendingChanges;
-    bool                                m_dsaActive;
-    bool                                m_dsaWasActive;
-
-};
-
-}
-}
-
-QT_END_NAMESPACE
-
-#endif
Index: /trunk/src/3rdparty/phonon/mmf/utils.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/utils.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/utils.cpp	(revision 769)
@@ -53,20 +53,22 @@
 }
 
-
-static const TInt KMimePrefixLength = 6; // either "audio/" or "video/"
 _LIT(KMimePrefixAudio, "audio/");
 _LIT(KMimePrefixVideo, "video/");
+_LIT(KMimeSDP, "application/sdp");
+
+enum ConstantStringLengths {
+    KMimePrefixLength = 6, // either "audio/" or "video/",
+    KMimeSDPLength = 15 // "application/sdp"
+};
 
 MMF::MediaType MMF::Utils::mimeTypeToMediaType(const TDesC& mimeType)
 {
-    MediaType result = MediaTypeUnknown;
-
     if (mimeType.Left(KMimePrefixLength).Compare(KMimePrefixAudio) == 0) {
-        result = MediaTypeAudio;
-    } else if (mimeType.Left(KMimePrefixLength).Compare(KMimePrefixVideo) == 0) {
-        result = MediaTypeVideo;
-    }
-
-    return result;
+        return MediaTypeAudio;
+    } else if (mimeType.Left(KMimePrefixLength).Compare(KMimePrefixVideo) == 0 ||
+               mimeType.Left(KMimeSDPLength).Compare(KMimeSDP) == 0) {
+        return MediaTypeVideo;
+    } else
+        return MediaTypeUnknown;
 }
 
Index: unk/src/3rdparty/phonon/mmf/videooutput.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput.cpp	(revision 768)
+++ 	(revision )
@@ -1,303 +1,0 @@
-/*  This file is part of the KDE project.
-
-Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-
-This library is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 2.1 or 3 of the License.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this library.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "ancestormovemonitor.h"
-#include "utils.h"
-#include "videooutput.h"
-
-#ifndef QT_NO_DEBUG
-#include "objectdump.h"
-#endif
-
-#include <QPaintEvent>
-#include <QPainter>
-#include <QMoveEvent>
-#include <QResizeEvent>
-
-#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect
-#include <QtGui/private/qwidget_p.h> // to access QWExtra
-
-#include <coecntrl.h>
-
-#include <coemain.h>    // for CCoeEnv
-
-QT_BEGIN_NAMESPACE
-
-using namespace Phonon;
-using namespace Phonon::MMF;
-
-/*! \class MMF::VideoOutput
-  \internal
-*/
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio =
-    Phonon::VideoWidget::AspectRatioAuto;
-static const Phonon::VideoWidget::ScaleMode DefaultScaleMode =
-    Phonon::VideoWidget::FitInView;
-
-
-//-----------------------------------------------------------------------------
-// Constructor / destructor
-//-----------------------------------------------------------------------------
-
-MMF::VideoOutput::VideoOutput
-    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
-        :   QWidget(parent)
-        ,   m_ancestorMoveMonitor(ancestorMoveMonitor)
-        ,   m_aspectRatio(DefaultAspectRatio)
-        ,   m_scaleMode(DefaultScaleMode)
-{
-    TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal);
-    TRACE_ENTRY("parent 0x%08x", parent);
-
-    setPalette(QPalette(Qt::black));
-    setAttribute(Qt::WA_OpaquePaintEvent, true);
-    setAttribute(Qt::WA_NoSystemBackground, true);
-    setAutoFillBackground(false);
-
-    qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill;
-    qt_widget_private(this)->extraData()->receiveNativePaintEvents = true;
-
-    getVideoWindowRect();
-    registerForAncestorMoved();
-
-    dump();
-
-    TRACE_EXIT_0();
-}
-
-MMF::VideoOutput::~VideoOutput()
-{
-    TRACE_CONTEXT(VideoOutput::~VideoOutput, EVideoInternal);
-    TRACE_ENTRY_0();
-
-    m_ancestorMoveMonitor->unRegisterTarget(this);
-
-    TRACE_EXIT_0();
-}
-
-void MMF::VideoOutput::setVideoSize(const QSize& frameSize)
-{
-    TRACE_CONTEXT(VideoOutput::setVideoSize, EVideoInternal);
-    TRACE("oldSize %d %d newSize %d %d",
-          m_videoFrameSize.width(), m_videoFrameSize.height(),
-          frameSize.width(), frameSize.height());
-
-    if (frameSize != m_videoFrameSize) {
-        m_videoFrameSize = frameSize;
-        updateGeometry();
-    }
-}
-
-void MMF::VideoOutput::ancestorMoved()
-{
-    TRACE_CONTEXT(VideoOutput::ancestorMoved, EVideoInternal);
-    TRACE_ENTRY_0();
-
-    RWindowBase *const window = videoWindow();
-
-    if(window) {
-        const TPoint newWindowPosSymbian = window->AbsPosition();
-        const QPoint newWindowPos(newWindowPosSymbian.iX, newWindowPosSymbian.iY);
-
-        if(newWindowPos != m_videoWindowRect.topLeft()) {
-            m_videoWindowRect.moveTo(newWindowPos);
-            emit videoWindowChanged();
-        }
-    }
-
-    TRACE_EXIT_0();
-}
-
-//-----------------------------------------------------------------------------
-// QWidget
-//-----------------------------------------------------------------------------
-
-QSize MMF::VideoOutput::sizeHint() const
-{
-    // TODO: replace this with a more sensible default
-    QSize result(320, 240);
-
-    if (!m_videoFrameSize.isNull())
-        result = m_videoFrameSize;
-
-    return result;
-}
-
-void MMF::VideoOutput::paintEvent(QPaintEvent* event)
-{
-    TRACE_CONTEXT(VideoOutput::paintEvent, EVideoInternal);
-    TRACE("rect %d %d - %d %d",
-          event->rect().left(), event->rect().top(),
-          event->rect().right(), event->rect().bottom());
-    TRACE("regions %d", event->region().rectCount());
-    TRACE("type %d", event->type());
-
-    // Do nothing
-}
-
-void MMF::VideoOutput::resizeEvent(QResizeEvent* event)
-{
-    TRACE_CONTEXT(VideoOutput::resizeEvent, EVideoInternal);
-    TRACE("%d %d -> %d %d",
-          event->oldSize().width(), event->oldSize().height(),
-          event->size().width(), event->size().height());
-
-    if(event->size() != event->oldSize()) {
-        m_videoWindowRect.setSize(event->size());
-        emit videoWindowChanged();
-    }
-}
-
-void MMF::VideoOutput::moveEvent(QMoveEvent* event)
-{
-    TRACE_CONTEXT(VideoOutput::moveEvent, EVideoInternal);
-    TRACE("%d %d -> %d %d",
-          event->oldPos().x(), event->oldPos().y(),
-          event->pos().x(), event->pos().y());
-
-    if(event->pos() != event->oldPos()) {
-        m_videoWindowRect.moveTo(event->pos());
-        emit videoWindowChanged();
-    }
-}
-
-bool MMF::VideoOutput::event(QEvent* event)
-{
-    TRACE_CONTEXT(VideoOutput::event, EVideoInternal);
-
-    if (event->type() == QEvent::WinIdChange) {
-        TRACE_0("WinIdChange");
-        getVideoWindowRect();
-        emit videoWindowChanged();
-        return true;
-    } else if (event->type() == QEvent::ParentChange) {
-        // Tell ancestor move monitor to update ancestor list for this widget
-        registerForAncestorMoved();
-        return true;
-    } else
-        return QWidget::event(event);
-}
-
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-RWindowBase* MMF::VideoOutput::videoWindow()
-{
-    CCoeControl *control = internalWinId();
-    if(!control)
-        control = effectiveWinId();
-
-    RWindowBase *window = 0;
-    if(control)
-        window = control->DrawableWindow();
-
-    return window;
-}
-
-const QRect& MMF::VideoOutput::videoWindowRect() const
-{
-    return m_videoWindowRect;
-}
-
-Phonon::VideoWidget::AspectRatio MMF::VideoOutput::aspectRatio() const
-{
-    return m_aspectRatio;
-}
-
-void MMF::VideoOutput::setAspectRatio
-    (Phonon::VideoWidget::AspectRatio aspectRatio)
-{
-    if(m_aspectRatio != aspectRatio) {
-        m_aspectRatio = aspectRatio;
-        emit aspectRatioChanged();
-    }
-}
-
-Phonon::VideoWidget::ScaleMode MMF::VideoOutput::scaleMode() const
-{
-    return m_scaleMode;
-}
-
-void MMF::VideoOutput::setScaleMode
-    (Phonon::VideoWidget::ScaleMode scaleMode)
-{
-    if(m_scaleMode != scaleMode) {
-        m_scaleMode = scaleMode;
-        emit scaleModeChanged();
-    }
-}
-
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void MMF::VideoOutput::getVideoWindowRect()
-{
-    RWindowBase *const window = videoWindow();
-    if(window)
-        m_videoWindowRect =
-            qt_TRect2QRect(TRect(window->AbsPosition(), window->Size()));
-}
-
-void MMF::VideoOutput::registerForAncestorMoved()
-{
-    m_ancestorMoveMonitor->registerTarget(this);
-}
-
-void MMF::VideoOutput::dump() const
-{
-#ifndef QT_NO_DEBUG
-    TRACE_CONTEXT(VideoOutput::dump, EVideoInternal);
-
-    QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor);
-    visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs
-    ObjectDump::addDefaultAnnotators(*visitor);
-    TRACE("Dumping tree from leaf 0x%08x:", this);
-    ObjectDump::dumpTreeFromLeaf(*this, *visitor);
-
-    QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper);
-    dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs
-    ObjectDump::addDefaultAnnotators(*dumper);
-    TRACE_0("Dumping VideoOutput:");
-    dumper->dumpObject(*this);
-#endif
-}
-
-void MMF::VideoOutput::beginNativePaintEvent(const QRect& /*controlRect*/)
-{
-    emit beginVideoWindowNativePaint();
-}
-
-void MMF::VideoOutput::endNativePaintEvent(const QRect& /*controlRect*/)
-{
-    // Ensure that draw ops are executed into the WSERV output framebuffer
-    CCoeEnv::Static()->WsSession().Flush();
-
-    emit endVideoWindowNativePaint();
-}
-
-QT_END_NAMESPACE
-
Index: unk/src/3rdparty/phonon/mmf/videooutput.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput.h	(revision 768)
+++ 	(revision )
@@ -1,105 +1,0 @@
-/*  This file is part of the KDE project.
-
-Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-
-This library is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 2.1 or 3 of the License.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this library.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#ifndef PHONON_MMF_VIDEOOUTPUT_H
-#define PHONON_MMF_VIDEOOUTPUT_H
-
-#include <QtGui/QWidget>
-#include <QVector>
-#include <QRect>
-#include "defs.h"
-
-#include <phonon/videowidget.h>
-
-#include <e32std.h>
-class RWindowBase;
-
-QT_BEGIN_NAMESPACE
-
-namespace Phonon
-{
-namespace MMF
-{
-class AncestorMoveMonitor;
-
-class VideoOutput       :   public QWidget
-{
-    Q_OBJECT
-
-public:
-    VideoOutput(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
-    ~VideoOutput();
-
-    // Set size of video frame.  Called by VideoPlayer.
-    void setVideoSize(const QSize& size);
-
-    RWindowBase* videoWindow();
-    const QRect& videoWindowRect() const;
-
-    Phonon::VideoWidget::AspectRatio aspectRatio() const;
-    void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio);
-
-    Phonon::VideoWidget::ScaleMode scaleMode() const;
-    void setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode);
-
-    // Called by AncestorMoveMonitor
-    void ancestorMoved();
-
-    // Debugging output
-    void dump() const;
-
-public Q_SLOTS:
-    void beginNativePaintEvent(const QRect& /*controlRect*/);
-    void endNativePaintEvent(const QRect& /*controlRect*/);
-
-Q_SIGNALS:
-    void videoWindowChanged();
-    void aspectRatioChanged();
-    void scaleModeChanged();
-    void beginVideoWindowNativePaint();
-    void endVideoWindowNativePaint();
-
-protected:
-    // Override QWidget functions
-    QSize sizeHint() const;
-    void paintEvent(QPaintEvent* event);
-    void resizeEvent(QResizeEvent* event);
-    void moveEvent(QMoveEvent* event);
-    bool event(QEvent* event);
-
-private:
-    void getVideoWindowRect();
-    void registerForAncestorMoved();
-
-private:
-    // Not owned
-    AncestorMoveMonitor*    m_ancestorMoveMonitor;
-
-    QSize                   m_videoFrameSize;
-    QRect                   m_videoWindowRect;
-
-    Phonon::VideoWidget::AspectRatio        m_aspectRatio;
-    Phonon::VideoWidget::ScaleMode          m_scaleMode;
-
-};
-}
-}
-
-QT_END_NAMESPACE
-
-#endif
Index: /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.cpp	(revision 769)
@@ -0,0 +1,183 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect
+#include <QtGui/private/qwidget_p.h> // to access QWExtra
+#include <QResizeEvent>
+#include <QMoveEvent>
+
+#include <coemain.h> // for CCoeEnv
+
+#include "ancestormovemonitor.h"
+#include "utils.h"
+#include "videooutput_dsa.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+DsaVideoOutput::DsaVideoOutput(QWidget *parent)
+    :   AbstractVideoOutput(parent)
+    ,   m_ancestorMoveMonitor(0)
+{
+    TRACE_CONTEXT(DsaVideoOutput::DsaVideoOutput, EVideoInternal);
+    TRACE_ENTRY("parent 0x%08x", parent);
+
+    setPalette(QPalette(Qt::black));
+    setAttribute(Qt::WA_OpaquePaintEvent, true);
+    setAttribute(Qt::WA_NoSystemBackground, true);
+    setAutoFillBackground(false);
+
+    qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill;
+    qt_widget_private(this)->extraData()->receiveNativePaintEvents = true;
+
+    getVideoWindowScreenRect();
+
+    dump();
+
+    TRACE_EXIT_0();
+}
+
+DsaVideoOutput::~DsaVideoOutput()
+{
+    TRACE_CONTEXT(DsaVideoOutput::~DsaVideoOutput, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    m_ancestorMoveMonitor->unRegisterTarget(this);
+
+    TRACE_EXIT_0();
+}
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void MMF::DsaVideoOutput::setAncestorMoveMonitor(AncestorMoveMonitor *monitor)
+{
+    m_ancestorMoveMonitor = monitor;
+    registerForAncestorMoved();
+}
+
+const QRect& MMF::DsaVideoOutput::videoWindowScreenRect() const
+{
+    return m_videoWindowScreenRect;
+}
+
+void MMF::DsaVideoOutput::ancestorMoved()
+{
+    TRACE_CONTEXT(DsaVideoOutput::ancestorMoved, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    RWindowBase *const window = videoWindow();
+
+    if (window) {
+        const TPoint newWindowPosSymbian = window->AbsPosition();
+        const QPoint newWindowPos(newWindowPosSymbian.iX, newWindowPosSymbian.iY);
+
+        if (newWindowPos != m_videoWindowScreenRect.topLeft()) {
+            m_videoWindowScreenRect.moveTo(newWindowPos);
+            emit videoWindowScreenRectChanged();
+        }
+    }
+
+    TRACE_EXIT_0();
+}
+
+void MMF::DsaVideoOutput::beginNativePaintEvent(const QRect & /*controlRect*/)
+{
+    TRACE_CONTEXT(DsaVideoOutput::beginNativePaintEvent, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    emit beginVideoWindowNativePaint();
+}
+
+void MMF::DsaVideoOutput::endNativePaintEvent(const QRect & /*controlRect*/)
+{
+    TRACE_CONTEXT(DsaVideoOutput::endNativePaintEvent, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    // Ensure that draw ops are executed into the WSERV output framebuffer
+    CCoeEnv::Static()->WsSession().Flush();
+
+    emit endVideoWindowNativePaint();
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MMF::DsaVideoOutput::getVideoWindowScreenRect()
+{
+    RWindowBase *const window = videoWindow();
+    if (window)
+        m_videoWindowScreenRect =
+            qt_TRect2QRect(TRect(window->AbsPosition(), window->Size()));
+}
+
+void MMF::DsaVideoOutput::registerForAncestorMoved()
+{
+    m_ancestorMoveMonitor->registerTarget(this);
+}
+
+void MMF::DsaVideoOutput::resizeEvent(QResizeEvent *event)
+{
+    TRACE_CONTEXT(DsaVideoOutput::resizeEvent, EVideoInternal);
+    TRACE("%d %d -> %d %d",
+          event->oldSize().width(), event->oldSize().height(),
+          event->size().width(), event->size().height());
+
+    if (event->size() != event->oldSize()) {
+        m_videoWindowScreenRect.setSize(event->size());
+        emit videoWindowScreenRectChanged();
+    }
+}
+
+void MMF::DsaVideoOutput::moveEvent(QMoveEvent *event)
+{
+    TRACE_CONTEXT(DsaVideoOutput::moveEvent, EVideoInternal);
+    TRACE("%d %d -> %d %d",
+          event->oldPos().x(), event->oldPos().y(),
+          event->pos().x(), event->pos().y());
+
+    if (event->pos() != event->oldPos()) {
+        m_videoWindowScreenRect.moveTo(event->pos());
+        emit videoWindowScreenRectChanged();
+    }
+}
+
+bool MMF::DsaVideoOutput::event(QEvent *event)
+{
+    TRACE_CONTEXT(DsaVideoOutput::event, EVideoInternal);
+
+    if (event->type() == QEvent::WinIdChange) {
+        TRACE_0("WinIdChange");
+        getVideoWindowScreenRect();
+        emit videoWindowChanged();
+        return true;
+    } else if (event->type() == QEvent::ParentChange) {
+        // Tell ancestor move monitor to update ancestor list for this widget
+        registerForAncestorMoved();
+        return true;
+    } else {
+        return QWidget::event(event);
+    }
+}
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videooutput_dsa.h	(revision 769)
@@ -0,0 +1,109 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_VIDEOOUTPUT_DSA_H
+#define PHONON_MMF_VIDEOOUTPUT_DSA_H
+
+#include <QRect>
+
+#include "phonon/mmf/abstractvideooutput.h"
+
+QT_BEGIN_NAMESPACE
+
+class QResizeEvent;
+class QMoveEvent;
+
+namespace Phonon
+{
+namespace MMF
+{
+class AncestorMoveMonitor;
+
+/**
+ * @short Widget on which video is displayed by DSA rendering
+ *
+ * This implementation is used on devices with the legacy graphics
+ * subsystem, which does not support surfaces.  On such devices,
+ * video rendering is done via Direct Screen Access (DSA), whereby
+ * the video decoder writes directly to the framebuffer.  To ensure
+ * that the window server and video decoder do not try to draw to
+ * the same screen region at the same time, the video subsystem
+ * first requests permission to perform DSA.  If the window server
+ * needs to draw to this screen region (for example to display a
+ * message dialog), it first notifies the video subsystem that it
+ * must stop rendering to this region.
+ *
+ * @see SurfaceVideoOutput
+ */
+class DsaVideoOutput
+    :   public AbstractVideoOutput
+{
+    Q_OBJECT
+
+public:
+    DsaVideoOutput(QWidget *parent);
+    ~DsaVideoOutput();
+
+    void setAncestorMoveMonitor(AncestorMoveMonitor *monitor);
+
+    // Get absolute screen rectangle for video window
+    const QRect& videoWindowScreenRect() const;
+
+    // Called by AncestorMoveMonitor
+    void ancestorMoved();
+
+public Q_SLOTS:
+    // Callbacks received from Symbian QtGui implementation, when it
+    // begins / ends blitting the video widget's backing store to the
+    // window server.
+    void beginNativePaintEvent(const QRect & /*controlRect*/);
+    void endNativePaintEvent(const QRect & /*controlRect*/);
+
+Q_SIGNALS:
+    void videoWindowScreenRectChanged();
+
+    // Emitted when the Symbian QtGui implementation begins / ends
+    // blitting the video widget's backing store to the window server.
+    void beginVideoWindowNativePaint();
+    void endVideoWindowNativePaint();
+
+private:
+    void getVideoWindowScreenRect();
+    void registerForAncestorMoved();
+
+    // QWidget
+    void resizeEvent(QResizeEvent *event);
+    void moveEvent(QMoveEvent *event);
+    bool event(QEvent *event);
+
+private:
+    // Not owned
+    AncestorMoveMonitor*    m_ancestorMoveMonitor;
+
+    // Absolute screen rectangle on which video is displayed
+    QRect                   m_videoWindowScreenRect;
+
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+#endif // !PHONON_MMF_VIDEOOUTPUT_DSA_H
+
Index: /trunk/src/3rdparty/phonon/mmf/videooutput_surface.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput_surface.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videooutput_surface.cpp	(revision 769)
@@ -0,0 +1,87 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <QResizeEvent>
+
+#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect
+#include <QtGui/private/qwidget_p.h> // to access QWExtra
+
+#include "utils.h"
+#include "videooutput_surface.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+SurfaceVideoOutput::SurfaceVideoOutput(QWidget *parent)
+    :   AbstractVideoOutput(parent)
+{
+    TRACE_CONTEXT(SurfaceVideoOutput::SurfaceVideoOutput, EVideoInternal);
+    TRACE_ENTRY("parent 0x%08x", parent);
+
+    qt_widget_private(this)->createExtra();
+    qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::Disable;
+
+    TRACE_EXIT_0();
+}
+
+SurfaceVideoOutput::~SurfaceVideoOutput()
+{
+    TRACE_CONTEXT(SurfaceVideoOutput::~SurfaceVideoOutput, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    TRACE_EXIT_0();
+}
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MMF::SurfaceVideoOutput::resizeEvent(QResizeEvent *event)
+{
+    TRACE_CONTEXT(SurfaceVideoOutput::resizeEvent, EVideoInternal);
+    TRACE("%d %d -> %d %d",
+          event->oldSize().width(), event->oldSize().height(),
+          event->size().width(), event->size().height());
+
+    if (event->size() != event->oldSize())
+        emit videoWindowSizeChanged();
+}
+
+bool MMF::SurfaceVideoOutput::event(QEvent *event)
+{
+    TRACE_CONTEXT(SurfaceVideoOutput::event, EVideoInternal);
+
+    if (event->type() == QEvent::WinIdChange) {
+        TRACE_0("WinIdChange");
+        emit videoWindowChanged();
+        return true;
+    } else {
+        return QWidget::event(event);
+    }
+}
+
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/videooutput_surface.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videooutput_surface.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videooutput_surface.h	(revision 769)
@@ -0,0 +1,66 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_VIDEOOUTPUT_SURFACE_H
+#define PHONON_MMF_VIDEOOUTPUT_SURFACE_H
+
+#include "phonon/mmf/abstractvideooutput.h"
+
+QT_BEGIN_NAMESPACE
+
+class QResizeEvent;
+
+namespace Phonon
+{
+namespace MMF
+{
+
+/**
+ * @short Widget on which video is displayed by rendering to a surface
+ *
+ * This implementation is used on devices with a graphics subsystem which
+ * supports surfaces.
+ *
+ * @see DsaVideoOutput
+ */
+class SurfaceVideoOutput
+    :   public AbstractVideoOutput
+{
+    Q_OBJECT
+
+public:
+    SurfaceVideoOutput(QWidget *parent);
+    ~SurfaceVideoOutput();
+
+Q_SIGNALS:
+    void videoWindowSizeChanged();
+
+private:
+    // QWidget
+    void resizeEvent(QResizeEvent *event);
+    bool event(QEvent *event);
+
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+#endif // !PHONON_MMF_VIDEOOUTPUT_SURFACE_H
+
Index: /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.cpp	(revision 769)
@@ -0,0 +1,314 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <coecntrl.h> // for CCoeControl
+
+#include <QApplication>    // for QApplication::activeWindow
+#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect
+
+#include "utils.h"
+#include "videooutput_dsa.h"
+#include "videoplayer_dsa.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+// Two-phase constructor idiom is used because construct() calls virtual
+// functions and therefore cannot be called from the AbstractVideoPlayer
+// C++ constructor.
+DsaVideoPlayer* DsaVideoPlayer::create(MediaObject *parent,
+                                       const AbstractPlayer *player)
+{
+    QScopedPointer<DsaVideoPlayer> self(new DsaVideoPlayer(parent, player));
+    self->construct();
+    return self.take();
+}
+
+DsaVideoPlayer::DsaVideoPlayer(MediaObject *parent, const AbstractPlayer *player)
+    :   AbstractVideoPlayer(parent, player)
+    ,   m_dsaActive(false)
+    ,   m_dsaWasActive(false)
+{
+
+}
+
+DsaVideoPlayer::~DsaVideoPlayer()
+{
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void MMF::DsaVideoPlayer::videoWindowScreenRectChanged()
+{
+    QRect windowRect = static_cast<DsaVideoOutput *>(m_videoOutput)->videoWindowScreenRect();
+
+    // Clip to physical window size
+    // This is due to a defect in the layout when running on S60 3.2, which
+    // results in the rectangle of the video widget extending outside the
+    // screen in certain circumstances.  These include the initial startup
+    // of the mediaplayer demo in portrait mode.  When this rectangle is
+    // passed to the CVideoPlayerUtility, no video is rendered.
+    const TSize screenSize = m_screenDevice.SizeInPixels();
+    const QRect screenRect(0, 0, screenSize.iWidth, screenSize.iHeight);
+    windowRect = windowRect.intersected(screenRect);
+
+    // Recalculate scale factors.  Pass 'false' as second parameter in order to
+    // suppress application of the change to the player - this is done at the end
+    // of the function.
+    updateScaleFactors(windowRect.size(), false);
+
+    m_videoScreenRect = qt_QRect2TRect(windowRect);
+
+    parametersChanged(WindowScreenRect | ScaleFactors);
+}
+
+void MMF::DsaVideoPlayer::suspendDirectScreenAccess()
+{
+    m_dsaWasActive = stopDirectScreenAccess();
+}
+
+void MMF::DsaVideoPlayer::resumeDirectScreenAccess()
+{
+    if (m_dsaWasActive) {
+        startDirectScreenAccess();
+        m_dsaWasActive = false;
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MMF::DsaVideoPlayer::createPlayer()
+{
+    // A window handle must be provided in order to construct
+    // CVideoPlayerUtility.  If no VideoOutput has yet been connected to this
+    // player, we temporarily use the top-level application window handle.
+    // No video ever gets rendered into this window; SetDisplayWindowL is
+    // always called before rendering actually begins.
+    if (!m_window)
+        m_window = QApplication::activeWindow()->effectiveWinId()->DrawableWindow();
+
+    const TInt priority = 0;
+    const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone;
+
+    CVideoPlayerUtility *player = 0;
+    QT_TRAP_THROWING(player = CVideoPlayerUtility::NewL(*this,
+                                     priority, preference,
+                                     m_wsSession, m_screenDevice,
+                                     *m_window,
+                                     m_videoScreenRect, m_videoScreenRect));
+    m_player.reset(player);
+
+    // CVideoPlayerUtility::NewL starts DSA
+    m_dsaActive = true;
+
+    m_player->RegisterForVideoLoadingNotification(*this);
+}
+
+void MMF::DsaVideoPlayer::initVideoOutput()
+{
+    bool connected = connect(
+        m_videoOutput, SIGNAL(videoWindowScreenRectChanged()),
+        this, SLOT(videoWindowScreenRectChanged())
+    );
+    Q_ASSERT(connected);
+
+    connected = connect(
+        m_videoOutput, SIGNAL(beginVideoWindowNativePaint()),
+        this, SLOT(suspendDirectScreenAccess())
+    );
+    Q_ASSERT(connected);
+
+    connected = connect(
+        m_videoOutput, SIGNAL(endVideoWindowNativePaint()),
+        this, SLOT(resumeDirectScreenAccess())
+    );
+    Q_ASSERT(connected);
+
+    // Suppress warnings in release builds
+    Q_UNUSED(connected);
+
+    AbstractVideoPlayer::initVideoOutput();
+}
+
+void MMF::DsaVideoPlayer::prepareCompleted()
+{
+    videoWindowScreenRectChanged();
+}
+
+void MMF::DsaVideoPlayer::handleVideoWindowChanged()
+{
+    if (!m_window) {
+        if (QWidget *window = QApplication::activeWindow())
+            m_window = window->effectiveWinId()->DrawableWindow();
+        else
+            m_window = 0;
+        m_videoScreenRect = TRect();
+    }
+
+    parametersChanged(WindowHandle | WindowScreenRect);
+}
+
+#ifndef QT_NO_DEBUG
+
+// The following code is for debugging problems related to video visibility.  It allows
+// the VideoPlayer instance to query the window server in order to determine the
+// DSA drawing region for the video window.
+
+class CDummyAO : public CActive
+{
+public:
+    CDummyAO() : CActive(CActive::EPriorityStandard) { CActiveScheduler::Add(this); }
+    void RunL() { }
+    void DoCancel() { }
+    TRequestStatus& Status() { return iStatus; }
+    void SetActive() { CActive::SetActive(); }
+};
+
+void getDsaRegion(RWsSession &session, const RWindowBase &window)
+{
+    // Dump complete window tree
+    session.LogCommand(RWsSession::ELoggingStatusDump);
+
+    RDirectScreenAccess dsa(session);
+    TInt err = dsa.Construct();
+    CDummyAO ao;
+    RRegion* region;
+    err = dsa.Request(region, ao.Status(), window);
+    ao.SetActive();
+    dsa.Close();
+    ao.Cancel();
+    if (region) {
+        qDebug() << "Phonon::MMF::getDsaRegion count" << region->Count();
+        for (int i=0; i<region->Count(); ++i) {
+            const TRect& rect = region->RectangleList()[i];
+            qDebug() << "Phonon::MMF::getDsaRegion rect"
+                << rect.iTl.iX << rect.iTl.iY << rect.iBr.iX << rect.iBr.iY;
+        }
+        region->Close();
+    }
+}
+
+#endif // QT_NO_DEBUG
+
+void MMF::DsaVideoPlayer::handleParametersChanged(VideoParameters parameters)
+{
+    TRACE_CONTEXT(DsaVideoPlayer::handleParametersChanged, EVideoInternal);
+    TRACE_ENTRY("parameters 0x%x", parameters.operator int());
+
+    if (!m_window)
+        return;
+
+#ifndef QT_NO_DEBUG
+    getDsaRegion(m_wsSession, *m_window);
+#endif
+
+    if (m_player) {
+        static const TBool antialias = ETrue;
+        int err = KErrNone;
+
+        if (parameters & ScaleFactors) {
+            TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight,
+                                                antialias));
+            if(KErrNone != err) {
+                TRACE("SetScaleFactorL (1) err %d", err);
+                setError(tr("Video display error"), err);
+            }
+        }
+
+        if (KErrNone == err) {
+            if (parameters & WindowHandle || parameters & WindowScreenRect) {
+                TRAP(err,
+                    m_player->SetDisplayWindowL(m_wsSession, m_screenDevice,
+                                                *m_window,
+                                                m_videoScreenRect,
+                                                m_videoScreenRect));
+            }
+
+            if (KErrNone != err) {
+                TRACE("SetDisplayWindowL err %d", err);
+                setError(tr("Video display error"), err);
+            } else {
+                m_dsaActive = true;
+                if (parameters & ScaleFactors) {
+                    TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight,
+                                                        antialias));
+                    if (KErrNone != err) {
+                        TRACE("SetScaleFactorL (2) err %d", err);
+                        setError(tr("Video display error"), err);
+                    }
+                }
+            }
+        }
+    }
+
+    TRACE_EXIT_0();
+}
+
+void MMF::DsaVideoPlayer::startDirectScreenAccess()
+{
+    TRACE_CONTEXT(DsaVideoPlayer::startDirectScreenAccess, EVideoInternal);
+    TRACE_ENTRY("dsaActive %d", m_dsaActive);
+
+    int err = KErrNone;
+
+    if (!m_dsaActive) {
+        TRAP(err, m_player->StartDirectScreenAccessL());
+        if (KErrNone == err)
+            m_dsaActive = true;
+        else
+            setError(tr("Video display error"), err);
+    }
+
+    if (m_videoOutput)
+        m_videoOutput->dump();
+
+    TRACE_EXIT("error %d", err);
+}
+
+bool MMF::DsaVideoPlayer::stopDirectScreenAccess()
+{
+    TRACE_CONTEXT(DsaVideoPlayer::stopDirectScreenAccess, EVideoInternal);
+    TRACE_ENTRY("dsaActive %d", m_dsaActive);
+
+    int err = KErrNone;
+
+    const bool dsaWasActive = m_dsaActive;
+    if (m_dsaActive) {
+        TRAP(err, m_player->StopDirectScreenAccessL());
+        if (KErrNone == err)
+            m_dsaActive = false;
+        else
+            setError(tr("Video display error"), err);
+    }
+
+    TRACE_EXIT("error %d", err);
+
+    return dsaWasActive;
+}
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videoplayer_dsa.h	(revision 769)
@@ -0,0 +1,92 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_VIDEOPLAYER_DSA_H
+#define PHONON_MMF_VIDEOPLAYER_DSA_H
+
+#include "abstractvideoplayer.h"
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+
+/**
+ * @short Wrapper over the MMF video player utility (DSA version)
+ *
+ * This implementation is used on devices with the legacy graphics
+ * subsystem, which does not support surfaces.  On such devices,
+ * video rendering is done via Direct Screen Access (DSA), whereby
+ * the video decoder writes directly to the framebuffer.  To ensure
+ * that the window server and video decoder do not try to draw to
+ * the same screen region at the same time, the video subsystem
+ * first requests permission to perform DSA.  If the window server
+ * needs to draw to this screen region (for example to display a
+ * message dialog), it first notifies the video subsystem that it
+ * must stop rendering to this region.
+ *
+ * @see SurfaceVideoPlayer
+ */
+class DsaVideoPlayer
+    :   public AbstractVideoPlayer
+{
+    Q_OBJECT
+
+public:
+    // Factory function
+    static DsaVideoPlayer* create(MediaObject *parent = 0,
+                                  const AbstractPlayer *player = 0);
+    ~DsaVideoPlayer();
+
+public Q_SLOTS:
+    void videoWindowScreenRectChanged();
+    void suspendDirectScreenAccess();
+    void resumeDirectScreenAccess();
+
+private:
+    DsaVideoPlayer(MediaObject *parent, const AbstractPlayer *player);
+
+    // AbstractVideoPlayer
+    void createPlayer();
+    void initVideoOutput();
+    void prepareCompleted();
+    void handleVideoWindowChanged();
+    void handleParametersChanged(VideoParameters parameters);
+
+    void startDirectScreenAccess();
+    bool stopDirectScreenAccess();
+
+private:
+    bool                m_dsaActive;
+    bool                m_dsaWasActive;
+
+    // Absolute screen rectangle on which video is displayed
+    TRect               m_videoScreenRect;
+
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+#endif // !PHONON_MMF_VIDEOPLAYER_DSA_H
+
+
Index: /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.cpp	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.cpp	(revision 769)
@@ -0,0 +1,149 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <videoplayer2.h>
+
+#include <QtCore/private/qcore_symbian_p.h> // for qt_QRect2TRect
+
+#include "utils.h"
+#include "videooutput_surface.h"
+#include "videoplayer_surface.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+// Two-phase constructor idiom is used because construct() calls virtual
+// functions and therefore cannot be called from the AbstractVideoPlayer
+// C++ constructor.
+SurfaceVideoPlayer* SurfaceVideoPlayer::create(MediaObject *parent,
+                                       const AbstractPlayer *player)
+{
+    QScopedPointer<SurfaceVideoPlayer> self(new SurfaceVideoPlayer(parent, player));
+    self->construct();
+    return self.take();
+}
+
+SurfaceVideoPlayer::SurfaceVideoPlayer(MediaObject *parent, const AbstractPlayer *player)
+    :   AbstractVideoPlayer(parent, player)
+    ,   m_displayWindow(0)
+{
+
+}
+
+SurfaceVideoPlayer::~SurfaceVideoPlayer()
+{
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void MMF::SurfaceVideoPlayer::videoWindowSizeChanged()
+{
+    updateScaleFactors(m_videoOutput->videoWindowSize());
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void MMF::SurfaceVideoPlayer::createPlayer()
+{
+    const TInt priority = 0;
+    const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone;
+
+    CVideoPlayerUtility2 *player = 0;
+    QT_TRAP_THROWING(player = CVideoPlayerUtility2::NewL(*this,
+                                         priority, preference));
+    m_player.reset(player);
+}
+
+void MMF::SurfaceVideoPlayer::initVideoOutput()
+{
+    bool connected = connect(
+        m_videoOutput, SIGNAL(videoWindowSizeChanged()),
+        this, SLOT(videoWindowSizeChanged())
+    );
+    Q_ASSERT(connected);
+
+    // Suppress warnings in release builds
+    Q_UNUSED(connected);
+
+    AbstractVideoPlayer::initVideoOutput();
+}
+
+void MMF::SurfaceVideoPlayer::prepareCompleted()
+{
+    videoWindowSizeChanged();
+}
+
+void MMF::SurfaceVideoPlayer::handleVideoWindowChanged()
+{
+    parametersChanged(WindowHandle);
+}
+
+void MMF::SurfaceVideoPlayer::handleParametersChanged(VideoParameters parameters)
+{
+    TRect rect;
+    if (m_videoOutput) {
+        m_videoOutput->dump();
+        const QSize size = m_videoOutput->videoWindowSize();
+        rect.SetSize(TSize(size.width(), size.height()));
+    }
+
+    CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
+    if (player) {
+        int err = KErrNone;
+        if (parameters & WindowHandle) {
+            if (m_displayWindow)
+                player->RemoveDisplayWindow(*m_displayWindow);
+
+            RWindow *window = static_cast<RWindow *>(m_window);
+            if (window) {
+                window->SetBackgroundColor(TRgb(0, 0, 0, 255));
+                TRAP(err, player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect));
+                if (KErrNone != err) {
+                    setError(tr("Video display error"), err);
+                    window = 0;
+                }
+            }
+            m_displayWindow = window;
+        }
+
+        if (KErrNone == err) {
+            if (parameters & ScaleFactors) {
+                Q_ASSERT(m_displayWindow);
+                TRAP(err, player->SetVideoExtentL(*m_displayWindow, rect));
+                if (KErrNone == err)
+                    TRAP(err, player->SetWindowClipRectL(*m_displayWindow, rect));
+                if (KErrNone == err)
+                    TRAP(err, player->SetScaleFactorL(*m_displayWindow, m_scaleWidth, m_scaleHeight));
+                if (KErrNone != err)
+                    setError(tr("Video display error"), err);
+            }
+        }
+    }
+}
+
+QT_END_NAMESPACE
+
Index: /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.h	(revision 769)
+++ /trunk/src/3rdparty/phonon/mmf/videoplayer_surface.h	(revision 769)
@@ -0,0 +1,78 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_VIDEOPLAYER_SURFACE_H
+#define PHONON_MMF_VIDEOPLAYER_SURFACE_H
+
+#include "abstractvideoplayer.h"
+
+class RWindow;
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+
+/**
+ * @short Wrapper over the MMF video player utility (surface version)
+ *
+ * This implementation is used on devices with a graphics subsystem which
+ * supports surfaces.
+ *
+ * @see DsaVideoPlayer
+ */
+class SurfaceVideoPlayer
+    :   public AbstractVideoPlayer
+{
+    Q_OBJECT
+
+public:
+    // Factory function
+    static SurfaceVideoPlayer* create(MediaObject *parent = 0,
+                                  const AbstractPlayer *player = 0);
+    ~SurfaceVideoPlayer();
+
+public Q_SLOTS:
+    void videoWindowSizeChanged();
+
+private:
+    SurfaceVideoPlayer(MediaObject *parent, const AbstractPlayer *player);
+
+    // AbstractVideoPlayer
+    void createPlayer();
+    void initVideoOutput();
+    void prepareCompleted();
+    void handleVideoWindowChanged();
+    void handleParametersChanged(VideoParameters parameters);
+
+private:
+    // Window handle which has been passed to the MMF via
+    // CVideoPlayerUtility2::SetDisplayWindowL
+    RWindow*    m_displayWindow;
+
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+#endif // !PHONON_MMF_VIDEOPLAYER_SURFACE_H
+
Index: /trunk/src/3rdparty/phonon/mmf/videowidget.cpp
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videowidget.cpp	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/videowidget.cpp	(revision 769)
@@ -19,7 +19,12 @@
 #include "mediaobject.h"
 #include "utils.h"
-#include "videooutput.h"
 
 #include "videowidget.h"
+
+#ifdef PHONON_MMF_VIDEO_SURFACES
+#include "videooutput_surface.h"
+#else
+#include "videooutput_dsa.h"
+#endif
 
 QT_BEGIN_NAMESPACE
@@ -46,8 +51,11 @@
 //-----------------------------------------------------------------------------
 
-MMF::VideoWidget::VideoWidget
-    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
+MMF::VideoWidget::VideoWidget(QWidget *parent)
         :   MediaNode(parent)
-        ,   m_videoOutput(new VideoOutput(ancestorMoveMonitor, parent))
+#ifdef PHONON_MMF_VIDEO_SURFACES
+        ,   m_videoOutput(new SurfaceVideoOutput(parent))
+#else
+        ,   m_videoOutput(new DsaVideoOutput(parent))
+#endif
         ,   m_brightness(DefaultBrightness)
         ,   m_contrast(DefaultContrast)
@@ -68,4 +76,11 @@
     TRACE_EXIT_0();
 }
+
+#ifndef PHONON_MMF_VIDEO_SURFACES
+void MMF::VideoWidget::setAncestorMoveMonitor(AncestorMoveMonitor *monitor)
+{
+    static_cast<DsaVideoOutput *>(m_videoOutput.data())->setAncestorMoveMonitor(monitor);
+}
+#endif
 
 
@@ -109,5 +124,5 @@
 {
     TRACE_CONTEXT(VideoWidget::setScaleMode, EVideoApi);
-    TRACE("setScaleMode %d", setScaleMode);
+    TRACE("setScaleMode %d", scaleMode);
 
     m_videoOutput->setScaleMode(scaleMode);
Index: /trunk/src/3rdparty/phonon/mmf/videowidget.h
===================================================================
--- /trunk/src/3rdparty/phonon/mmf/videowidget.h	(revision 768)
+++ /trunk/src/3rdparty/phonon/mmf/videowidget.h	(revision 769)
@@ -20,6 +20,6 @@
 #define PHONON_MMF_VIDEOWIDGET_H
 
+#include "abstractvideooutput.h"
 #include "mmf_medianode.h"
-#include "videooutput.h"
 
 #include <QtGui/QWidget>
@@ -33,6 +33,7 @@
 namespace MMF
 {
+#ifndef PHONON_MMF_VIDEO_SURFACES
 class AncestorMoveMonitor;
-class VideoOutput;
+#endif
 
 class VideoWidget       :   public MediaNode
@@ -43,6 +44,10 @@
 
 public:
-    VideoWidget(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
+    VideoWidget(QWidget* parent);
     ~VideoWidget();
+
+#ifndef PHONON_MMF_VIDEO_SURFACES
+    void setAncestorMoveMonitor(AncestorMoveMonitor *ancestorMoveMonitor);
+#endif
 
     // VideoWidgetInterface
@@ -67,5 +72,5 @@
 
 private:
-    QScopedPointer<VideoOutput>             m_videoOutput;
+    QScopedPointer<AbstractVideoOutput>     m_videoOutput;
 
     qreal                                   m_brightness;
Index: /trunk/src/3rdparty/phonon/qt7/audiodevice.mm
===================================================================
--- /trunk/src/3rdparty/phonon/qt7/audiodevice.mm	(revision 768)
+++ /trunk/src/3rdparty/phonon/qt7/audiodevice.mm	(revision 769)
@@ -150,5 +150,4 @@
     err = AudioDeviceGetProperty(deviceID, 0, 0, kAudioDevicePropertyDataSourceNameForIDCFString, &size, &translation);
 	if (err != noErr){
-        CFRelease(cfName);
         return QString();
     }
Index: /trunk/src/3rdparty/webkit/ChangeLog
===================================================================
--- /trunk/src/3rdparty/webkit/ChangeLog	(revision 768)
+++ /trunk/src/3rdparty/webkit/ChangeLog	(revision 769)
@@ -1,2 +1,10 @@
+2010-02-18  Tor Arne VestbÃž  <tor.arne.vestbo@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        Add .gitattributes file for custom ChangeLog merge-driver
+
+        * .gitattributes: Added.
+
 2009-11-30  Jan-Arve SÃŠther  <jan-arve.saether@nokia.com>
 
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/ChangeLog
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/ChangeLog	(revision 768)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/ChangeLog	(revision 769)
@@ -1,2 +1,43 @@
+2010-03-22  Siddharth Mathur  <siddharth.mathur@nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Symbian] More efficient aligned memory allocation for JSC Collector
+        https://bugs.webkit.org/show_bug.cgi?id=34350
+
+        * JavaScriptCore.pri: Added 2 new Symbian source files and HAL linkage
+
+        * runtime/Collector.cpp: Reduced port-specific code and added private data member
+        (JSC::Heap::Heap):
+        (JSC::Heap::~Heap):
+        (JSC::Heap::destroy):
+        (JSC::Heap::allocateBlock):
+        (JSC::Heap::freeBlockPtr):
+
+        * runtime/Collector.h: Added private data member
+
+        * wtf/symbian: Added.
+        * wtf/symbian/BlockAllocatorSymbian.cpp: Added.
+        (WTF::AlignedBlockAllocator::AlignedBlockAllocator): Helper class to allocate 
+        aligned blocks more efficiently as required by Collector
+        (WTF::AlignedBlockAllocator::alloc):
+        (WTF::AlignedBlockAllocator::free):
+        (WTF::AlignedBlockAllocator::destroy):
+        (WTF::AlignedBlockAllocator::~AlignedBlockAllocator):
+        * wtf/symbian/BlockAllocatorSymbian.h: Added.
+
+2010-02-09  Janne Koskinen  <janne.p.koskinen@digia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Qt] use nanval() for Symbian as nonInlineNaN
+        https://bugs.webkit.org/show_bug.cgi?id=34170
+
+        numeric_limits<double>::quiet_NaN is broken in Symbian
+        causing NaN to be evaluated as a number.
+
+        * runtime/JSValue.cpp:
+        (JSC::nonInlineNaN):
+
 2010-01-07  Norbert Leser  <norbert.leser@nokia.com>
 
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri	(revision 768)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri	(revision 769)
@@ -8,4 +8,8 @@
     isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = generated$${QMAKE_DIR_SEP}release
     !CONFIG(QTDIR_build):OBJECTS_DIR = obj/release
+}
+
+symbian {
+    LIBS += -lhal
 }
 
@@ -24,4 +28,5 @@
     $$PWD/wrec \
     $$PWD/wtf \
+    $$PWD/wtf/symbian \
     $$PWD/wtf/unicode \
     $$PWD/yarr \
@@ -244,4 +249,5 @@
     wtf/DateMath.cpp \
     wtf/FastMalloc.cpp \
+    wtf/symbian/BlockAllocatorSymbian.cpp \
     wtf/Threading.cpp \
     wtf/qt/MainThreadQt.cpp
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp	(revision 769)
@@ -53,9 +53,4 @@
 #include <mach/vm_map.h>
 
-#elif PLATFORM(SYMBIAN)
-#include <e32std.h>
-#include <e32cmn.h>
-#include <unistd.h>
-
 #elif PLATFORM(WIN_OS)
 
@@ -125,9 +120,4 @@
 #define MIN_ARRAY_SIZE (static_cast<size_t>(14))
 
-#if PLATFORM(SYMBIAN)
-const size_t MAX_NUM_BLOCKS = 256; // Max size of collector heap set to 16 MB
-static RHeap* userChunk = 0;
-#endif
-
 #if ENABLE(JSC_MULTIPLE_THREADS)
 
@@ -166,27 +156,9 @@
 #endif
     , m_globalData(globalData)
+#if PLATFORM(SYMBIAN)
+    , m_blockallocator(JSCCOLLECTOR_VIRTUALMEM_RESERVATION, BLOCK_SIZE)
+#endif
 {
     ASSERT(globalData);
-
-#if PLATFORM(SYMBIAN)
-    // Symbian OpenC supports mmap but currently not the MAP_ANON flag.
-    // Using fastMalloc() does not properly align blocks on 64k boundaries
-    // and previous implementation was flawed/incomplete.
-    // UserHeap::ChunkHeap allows allocation of continuous memory and specification
-    // of alignment value for (symbian) cells within that heap.
-    //
-    // Clarification and mapping of terminology:
-    // RHeap (created by UserHeap::ChunkHeap below) is continuos memory chunk,
-    // which can dynamically grow up to 8 MB,
-    // that holds all CollectorBlocks of this session (static).
-    // Each symbian cell within RHeap maps to a 64kb aligned CollectorBlock.
-    // JSCell objects are maintained as usual within CollectorBlocks.
-    if (!userChunk) {
-        userChunk = UserHeap::ChunkHeap(0, 0, MAX_NUM_BLOCKS * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);
-        if (!userChunk)
-            CRASH();
-    }
-#endif // PLATFORM(SYMBIAN)
-
     memset(&primaryHeap, 0, sizeof(CollectorHeap));
     memset(&numberHeap, 0, sizeof(CollectorHeap));
@@ -234,5 +206,7 @@
     }
 #endif
-
+#if PLATFORM(SYMBIAN)
+    m_blockallocator.destroy();
+#endif
     m_globalData = 0;
 }
@@ -248,10 +222,7 @@
     vm_map(current_task(), &address, BLOCK_SIZE, BLOCK_OFFSET_MASK, VM_FLAGS_ANYWHERE | VM_TAG_FOR_COLLECTOR_MEMORY, MEMORY_OBJECT_NULL, 0, FALSE, VM_PROT_DEFAULT, VM_PROT_DEFAULT, VM_INHERIT_DEFAULT);
 #elif PLATFORM(SYMBIAN)
-    // Allocate a 64 kb aligned CollectorBlock
-    unsigned char* mask = reinterpret_cast<unsigned char*>(userChunk->Alloc(BLOCK_SIZE));
-    if (!mask)
+    void* address = m_blockallocator.alloc();  
+    if (!address)
         CRASH();
-    uintptr_t address = reinterpret_cast<uintptr_t>(mask);
-
     memset(reinterpret_cast<void*>(address), 0, BLOCK_SIZE);
 #elif (PLATFORM(OS2) && !HAVE(POSIX_MEMALIGN))
@@ -344,5 +315,5 @@
     vm_deallocate(current_task(), reinterpret_cast<vm_address_t>(block), BLOCK_SIZE);
 #elif PLATFORM(SYMBIAN)
-    userChunk->Free(reinterpret_cast<TAny*>(block));
+    m_blockallocator.free(reinterpret_cast<void*>(block));
 #elif (PLATFORM(OS2) && !HAVE(POSIX_MEMALIGN))
     DosFreeMem(block);
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h	(revision 769)
@@ -36,4 +36,8 @@
 #endif
 
+#if PLATFORM(SYMBIAN)
+#include <wtf/symbian/BlockAllocatorSymbian.h>
+#endif
+
 #define ASSERT_CLASS_FITS_IN_CELL(class) COMPILE_ASSERT(sizeof(class) <= CELL_SIZE, class_fits_in_cell)
 
@@ -158,4 +162,9 @@
 #endif
 
+#if PLATFORM(SYMBIAN)
+        // Allocates collector blocks with correct alignment
+        WTF::AlignedBlockAllocator m_blockallocator; 
+#endif
+        
         JSGlobalData* m_globalData;
     };
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.cpp	(revision 769)
@@ -175,5 +175,9 @@
 NEVER_INLINE double nonInlineNaN()
 {
+#if PLATFORM(SYMBIAN)
+    return nanval();
+#else
     return std::numeric_limits<double>::quiet_NaN();
+#endif
 }
 
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.cpp	(revision 769)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.cpp	(revision 769)
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer. 
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if PLATFORM(SYMBIAN)
+
+#include "BlockAllocatorSymbian.h"
+
+
+namespace WTF {
+
+/** Efficiently allocates blocks of size blockSize with blockSize alignment. 
+ * Primarly designed for JSC Collector's needs. 
+ * Not thread-safe.    
+ */
+AlignedBlockAllocator::AlignedBlockAllocator(TUint32 reservationSize, TUint32 blockSize )
+    : m_reservation(reservationSize), 
+      m_blockSize(blockSize)
+{
+
+     // Get system's page size value.
+     SYMBIAN_PAGESIZE(m_pageSize); 
+     
+     // We only accept multiples of system page size for both initial reservation and the alignment/block size
+     m_reservation = SYMBIAN_ROUNDUPTOMULTIPLE(m_reservation, m_pageSize);
+     __ASSERT_ALWAYS(SYMBIAN_ROUNDUPTOMULTIPLE(m_blockSize, m_pageSize), User::Panic(_L("AlignedBlockAllocator1"), KErrArgument));
+     
+     // Calculate max. bit flags we need to carve a reservationSize range into blockSize-sized blocks
+     m_map.numBits = m_reservation / m_blockSize;   
+     const TUint32 bitsPerWord = 8*sizeof(TUint32); 
+     const TUint32 numWords = (m_map.numBits + bitsPerWord -1) / bitsPerWord; 
+   
+     m_map.bits = new TUint32[numWords];
+     __ASSERT_ALWAYS(m_map.bits, User::Panic(_L("AlignedBlockAllocator2"), KErrNoMemory));
+     m_map.clearAll();
+     
+     // Open a Symbian RChunk, and reserve requested virtual address range   
+     // Any thread in this process can operate this rchunk due to EOwnerProcess access rights. 
+     TInt ret = m_chunk.CreateDisconnectedLocal(0 , 0, (TInt)m_reservation , EOwnerProcess);  
+     if (ret != KErrNone) 
+         User::Panic(_L("AlignedBlockAllocator3"), ret);
+       
+     // This is the offset to m_chunk.Base() required to make it m_blockSize-aligned
+     m_offset = SYMBIAN_ROUNDUPTOMULTIPLE(TUint32(m_chunk.Base()), m_blockSize) - TUint(m_chunk.Base()); 
+
+}
+
+void* AlignedBlockAllocator::alloc()
+{
+
+    TInt  freeRam = 0; 
+    void* address = 0;
+    
+    // Look up first free slot in bit map
+    const TInt freeIdx = m_map.findFree();
+        
+    // Pseudo OOM: We ate up the address space we reserved..
+    // ..even though the device may have free RAM left
+    if (freeIdx < 0)
+        return 0;
+        
+    TInt ret = m_chunk.Commit(m_offset + (m_blockSize * freeIdx), m_blockSize);
+    if (ret != KErrNone)  
+        return 0; // True OOM: Device didn't have physical RAM to spare
+        
+    // Updated bit to mark region as in use. 
+    m_map.set(freeIdx); 
+    
+    // Calculate address of committed region (block)
+    address = (void*)( (m_chunk.Base() + m_offset) + (TUint)(m_blockSize * freeIdx) );
+    
+    return address;
+}
+
+void AlignedBlockAllocator::free(void* block)
+{
+    // Calculate index of block to be freed
+    TInt idx = TUint(static_cast<TUint8*>(block) - m_chunk.Base() - m_offset) / m_blockSize;
+    
+    __ASSERT_DEBUG(idx >= 0 && idx < m_map.numBits, User::Panic(_L("AlignedBlockAllocator4"), KErrCorrupt)); // valid index check
+    __ASSERT_DEBUG(m_map.get(idx), User::Panic(_L("AlignedBlockAllocator5"), KErrCorrupt)); // in-use flag check    
+    
+    // Return committed region to system RAM pool (the physical RAM becomes usable by others)
+    TInt ret = m_chunk.Decommit(m_offset + m_blockSize * idx, m_blockSize);
+            
+    // mark this available again
+    m_map.clear(idx); 
+}
+
+void AlignedBlockAllocator::destroy() 
+{
+    // release everything!
+    m_chunk.Decommit(0, m_chunk.MaxSize());
+    m_map.clearAll();
+}
+
+AlignedBlockAllocator::~AlignedBlockAllocator()
+{
+    destroy();
+    m_chunk.Close();
+    delete [] m_map.bits;
+}
+
+} // end of namespace
+
+#endif // SYMBIAN
Index: /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.h
===================================================================
--- /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.h	(revision 769)
+++ /trunk/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/BlockAllocatorSymbian.h	(revision 769)
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer. 
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BlockAllocatorSymbian_h
+#define BlockAllocatorSymbian_h
+
+#include <e32cmn.h>
+#include <e32std.h>
+#include <hal.h>
+
+
+#define SYMBIAN_PAGESIZE(x) (HAL::Get(HALData::EMemoryPageSize, x));
+#define SYMBIAN_FREERAM(x)  (HAL::Get(HALData::EMemoryRAMFree, x));
+#define SYMBIAN_ROUNDUPTOMULTIPLE(x, multipleof)    ( (x + multipleof - 1) & ~(multipleof - 1) )
+
+// Set sane defaults if -D<flagname=value> wasn't provided via compiler args
+#ifndef JSCCOLLECTOR_VIRTUALMEM_RESERVATION
+#if defined(__WINS__) 
+    // Emulator has limited virtual address space
+    #define JSCCOLLECTOR_VIRTUALMEM_RESERVATION (4*1024*1024)
+#else
+    // HW has plenty of virtual addresses
+    #define JSCCOLLECTOR_VIRTUALMEM_RESERVATION (128*1024*1024)
+#endif
+#endif
+
+namespace WTF {
+
+/** 
+ *  Allocates contiguous region of size blockSize with blockSize-aligned address. 
+ *  blockSize must be a multiple of system page size (typically 4K on Symbian/ARM)
+ *
+ *  @param reservationSize Virtual address range to be reserved upon creation of chunk (bytes).
+ *  @param blockSize Size of a single allocation. Returned address will also be blockSize-aligned.
+ */
+class AlignedBlockAllocator {
+    public:
+        AlignedBlockAllocator(TUint32 reservationSize, TUint32 blockSize);
+        ~AlignedBlockAllocator();
+        void destroy();
+        void* alloc();
+        void free(void* data);
+    
+    private: 
+        RChunk   m_chunk; // Symbian chunk that lets us reserve/commit/decommit
+        TUint    m_offset; // offset of first committed region from base 
+        TInt     m_pageSize; // cached value of system page size, typically 4K on Symbian
+        TUint32  m_reservation;
+        TUint32  m_blockSize;  
+
+        // Tracks comitted/decommitted state of a blockSize region
+        struct {
+            
+            TUint32 *bits; // array of bit flags 
+            TUint32  numBits; // number of regions to keep track of
+            
+            bool get(TUint32 n) const
+            {
+                return !!(bits[n >> 5] & (1 << (n & 0x1F)));
+            }
+            
+            void set(TUint32 n)
+            {
+                bits[n >> 5] |= (1 << (n & 0x1F));
+            }
+            
+            void clear(TUint32 n)
+            {
+                bits[n >> 5] &= ~(1 << (n & 0x1F));
+            }
+            
+            void clearAll()
+            {
+               for (TUint32 i = 0; i < numBits; i++)
+                    clear(i);
+            }
+            
+            TInt findFree() const
+            {
+                for (TUint32 i = 0; i < numBits; i++) {
+                    if (!get(i)) 
+                        return i;
+                }
+                return -1;
+            }
+            
+        } m_map;  
+
+};
+ 
+}
+
+#endif // end of BlockAllocatorSymbian_h
+
+
Index: /trunk/src/3rdparty/webkit/VERSION
===================================================================
--- /trunk/src/3rdparty/webkit/VERSION	(revision 768)
+++ /trunk/src/3rdparty/webkit/VERSION	(revision 769)
@@ -9,3 +9,3 @@
 and has the sha1 checksum
 
-        69dd29fbeb12d076741dce70ac6bc155101ccd6f
+        b9dcd9c168d9b25deb020837a67f30c2d72c9afb
Index: /trunk/src/3rdparty/webkit/WebCore/ChangeLog
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/ChangeLog	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/ChangeLog	(revision 769)
@@ -1,3 +1,452 @@
+2010-05-04  Tucker Jay  <jay.tucker@nokia.com>
+
+        Reviewed by Holger Freyther.
+
+        Animated GIF images does not animate 10x as expected by default.
+        https://bugs.webkit.org/show_bug.cgi?id=36818
+
+        Added test case to existing manual test to test the
+        fixed functionality.
+
+        * manual-tests/qt/qt-10loop-anim.gif: Added.
+        * manual-tests/qt/qt-gif-test.html:
+        * platform/graphics/qt/ImageDecoderQt.cpp:
+        (WebCore::ImageDecoderQt::repetitionCount):
+
+2010-04-21  Zoltan Herczeg  <zherczeg@webkit.org>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] startAnimation() is not needed to preceede nativeImageForCurrentFrame()
+        https://bugs.webkit.org/show_bug.cgi?id=37844
+
+        nativeImageForCurrentFrame() resets the m_decoder parameter under Qt,
+        which is required by startAnimation() to detect frame and repetition counts.
+        Hence, Image::drawTiled cannot start animations under Qt:
+        <html><body background="animated.gif"></body></html> does not work
+
+        * platform/graphics/qt/ImageDecoderQt.cpp:
+        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
+
+2010-03-10  Holger Hans Peter Freyther  <zecke@selfish.org>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Non animated gifs are animated in QtWebKit
+        https://bugs.webkit.org/show_bug.cgi?id=35955
+
+        Properly map Qt animated and non-animated values to WebCore's
+        understanding of animated and non-animated images. Currently
+        we can not map anything to the cAnimationLoopNone value.
+
+        * manual-tests/qt/qt-anim.gif: Added.
+        * manual-tests/qt/qt-gif-test.html: Added.
+        * manual-tests/qt/qt-noanim.gif: Added.
+        * platform/graphics/qt/ImageDecoderQt.cpp:
+        (WebCore::ImageDecoderQt::repetitionCount):
+
+2010-04-26  Simon Hausmann  <simon.hausmann@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] Fix compilation with RVCT 4
+        https://bugs.webkit.org/show_bug.cgi?id=37727
+
+        Swap extern and declspec to fix visibility of symbol imported from QtGui.
+
+        * page/qt/EventHandlerQt.cpp:
+
+2010-04-26  Markus Goetz  <Markus.Goetz@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] HTTP pipelining efficiency increase
+        https://bugs.webkit.org/show_bug.cgi?id=38062
+
+        Increase number of network requests that are fed into
+        QNetworkAccessManager.
+
+        * platform/network/qt/ResourceRequestQt.cpp:
+        (WebCore::initializeMaximumHTTPConnectionCountPerHost):
+
+2009-11-03  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Dave Hyatt.
+
+        Allow a frame to go back to copy-on-scroll when it ceases being overlapped
+
+        The code was not testing slow-scrolling frames for overlappedness, thinking the answer
+        would not matter. That is not the case if the only reason for the slow-scrolling is
+        being overlapped.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped): Added. Returns whether there is any
+        reason besides being overlapped that the frame would need to fully repaint on scroll.
+        * page/FrameView.h:
+        * rendering/RenderWidget.cpp:
+        (WebCore::RenderWidget::paint): Use useSlowRepaintsIfNotOverlapped().
+
+2010-04-09  David Leong  <david.leong@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Symbian apps crash on exit due to a bad qObject_cast.
+
+        https://bugs.webkit.org/show_bug.cgi?id=37303
+
+        Added check for NULL to avoid the crash.
+
+        * plugins/symbian/PluginViewSymbian.cpp:
+        (WebCore::PluginView::platformDestroy):
+
+2009-11-15  Dave Tapuska  <dtapuska@rim.com>
+
+        Reviewed by George Staikos.
+        
+        Compare UChars single unit at a time as opposed to the uint32_t
+        approach as casting to unaligned addresses may cause a bus failure
+        on ARMv5 and below. This change replicates the same defines that
+        exists in AtomicString.cpp
+
+        https://bugs.webkit.org/show_bug.cgi?id=31475
+        
+        * platform/text/StringHash.h:
+        (WebCore::StringHash::equal):
+
+2010-03-25  yael aharon  <yael.aharon@nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Qt] Windowed netscape plugins don't work with QGraphicsWebView on Symbian
+        https://bugs.webkit.org/show_bug.cgi?id=35112
+
+        Add a proxy widget when loading a QWidget based plugin in a QGraphicsWebView.
+
+        * plugins/symbian/PluginContainerSymbian.cpp:
+        (PluginContainerSymbian::PluginContainerSymbian):
+        (PluginContainerSymbian::focusInEvent):
+        * plugins/symbian/PluginContainerSymbian.h:
+        (WebCore::PluginContainerSymbian::proxy):
+        * plugins/symbian/PluginViewSymbian.cpp:
+        (WebCore::PluginView::updatePluginWidget):
+        (WebCore::PluginView::platformStart):
+        (WebCore::PluginView::platformDestroy):
+
+2010-03-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
+
+        Reviewed for the Qt 4.6 branch by Simon Hausmann.
+
+        Accept XHTML-MP content type as XHTML content
+        https://bugs.webkit.org/show_bug.cgi?id=34262
+
+        Enable processing XHTML-MP mime type as an XHTML document
+        even if XHTML-MP support is not enabled.
+
+        * platform/MIMETypeRegistry.cpp:
+        (WebCore::initializeSupportedNonImageMimeTypes):
+
+2010-03-22  Jakub Wieczorek  <jwieczorek@webkit.org>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Don't construct a QLineEdit every time when painting a text field
+        https://bugs.webkit.org/show_bug.cgi?id=36373
+
+        Instead, keep one instance per RenderTheme around.
+
+        * platform/qt/RenderThemeQt.cpp:
+        (WebCore::findFrameLineWidth):
+
+2010-03-26  Janne Koskinen  <janne.p.koskinen@digia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        Don't undefine SKIP_STATIC_CONSTRUCTORS_ON_GCC for Symbian HW targets.
+        https://bugs.webkit.org/show_bug.cgi?id=34081
+
+        Defining StringImpl instances as globals will cause a crash on process exit as 
+        StringImpl::Remove expects TLS which was already deleted at time of exiting main and ends up
+        constructing one exiting thread.
+
+        * config.h:
+
+2010-02-02  Alexey Proskuryakov  <ap@apple.com>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=34076
+        <rdar://problem/7594601> Crash in mangleme in WebCore::Element::getAttribute
+
+        Test: fast/forms/misplaced-img-form-registration.html
+
+        * html/HTMLFormElement.cpp:
+        (WebCore::HTMLFormElement::registerImgElement): Assert that the same image isn't added
+        to vector again.
+        (WebCore::HTMLFormElement::removeImgElement): Similarly, assert that we're removing something
+        that's actually registered.
+
+        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::~HTMLImageElement): If parser fails
+        to insert the image element, then there will be no removed from tree notification either,
+        need to unregister right away.
+
+2010-01-25  Alexey Proskuryakov  <ap@apple.com>
+
+        Rubber-stamped by Geoffrey Garen.
+
+        https://bugs.webkit.org/show_bug.cgi?id=34076
+        An image remains accessible via form.property syntax after being removed from document.
+
+        Fix crashing regression tests (tables/mozilla/bugs/bug4527.html et al.)
+
+        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::insertedIntoTree): Remove incorrect
+        assertions added in the previous patch - it's mot true that m_for is always a parent; table
+        parsing can reparent the image element, but m_form still needs to be set.
+
+2010-01-25  Alexey Proskuryakov  <ap@apple.com>
+
+        Reviewed by Geoffrey Garen.
+
+        https://bugs.webkit.org/show_bug.cgi?id=34076
+        An image remains accessible via form.property syntax after being removed from document.
+
+        Tests: fast/forms/removed-image-as-property.html
+               fast/forms/reparented-image-as-property.html
+
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::~HTMLImageElement): This is called during GC - not a good time
+        to make observable changes to DOM.
+        (WebCore::HTMLImageElement::insertedIntoTree): This is the right place to do any work that
+        depends on connectedness to some ancestor. We still allow for m_form to be set via constructor,
+        which happens during parsing.
+        (WebCore::HTMLImageElement::removedFromTree): Ditto.
+
+        * html/HTMLImageElement.h: Added removedFromTree/insertedIntoTree, moved removedFromDocument
+        and insertedIntoDocument to private section, as they shouldn't be called directly.
+
+2009-12-08  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Navigating to a cached page can result in accessing a destroyed HTMLInputElement.
+        <rdar://problem/6856662> and https://webkit.org/b/32293
+
+        Test: fast/loader/input-element-page-cache-crash.html
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::parseMappedAttribute): Make sure to unregister for the activation
+          callback after the new m_autocomplete setting has been stored so the unregistration actually
+          takes place.
+
+2009-12-13  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Simon Fraser.
+
+        <rdar://problem/7341364> Crash at HTMLParser::popOneBlockCommon() after
+        handling misnested residual style tags
+
+        Test: fast/parser/residual-style-close-ref-clone.html
+
+        * html/HTMLParser.cpp:
+        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Gave the
+        block stack a strong reference to the cloned residual style element. 
+
+2009-12-23  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        <rdar://problem/7487164> First line of text cannot be selected
+        https://bugs.webkit.org/show_bug.cgi?id=32749
+
+        Test: fast/text/remove-zero-length-run.html
+
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::positionLineBox): Changed code that assumed that if a box was being
+            removed, it was the only box in the RenderText. Instead, correctly preserve the list of
+            text boxes.
+        (WebCore::RenderText::checkConsistency): Updated for earlier rename.
+
+2009-12-10  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Crash in XMLTokenizer::popCurrentNode if window.close() is called during parsing
+        https://bugs.webkit.org/show_bug.cgi?id=31576
+
+        Add a RefCounted wrapper object around xmlParserCtxtPtr so we can
+        maintain it's lifetime more effectively.
+
+        Test: fast/parser/xhtml-close-while-parsing.xhtml
+
+        * dom/XMLTokenizer.cpp:
+        (WebCore::XMLTokenizer::popCurrentNode):
+        * dom/XMLTokenizer.h:
+        (WebCore::XMLParserContext::context):
+        (WebCore::XMLParserContext::XMLParserContext):
+        (WebCore::XMLTokenizer::context):
+        * dom/XMLTokenizerLibxml2.cpp:
+        (WebCore::XMLParserContext::createStringParser):
+        (WebCore::XMLParserContext::createMemoryParser):
+        (WebCore::XMLParserContext::~XMLParserContext):
+        (WebCore::XMLTokenizer::~XMLTokenizer):
+        (WebCore::XMLTokenizer::doWrite):
+        (WebCore::XMLTokenizer::initializeParserContext):
+        (WebCore::XMLTokenizer::doEnd):
+        (WebCore::XMLTokenizer::lineNumber):
+        (WebCore::XMLTokenizer::columnNumber):
+        (WebCore::XMLTokenizer::stopParsing):
+        (WebCore::parseXMLDocumentFragment):
+        (WebCore::parseAttributes):
+
+2009-11-09  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin Adler and Dan Bernstein.
+
+        <rdar://problem/7328395>
+        https://bugs.webkit.org/show_bug.cgi?id=31277
+
+        When an object tag's style changes (for example when child nodes are added/removed),
+        reuse its Frame (if it has one) instead of creating multiple Frames.
+
+        Test: fast/dom/HTMLObjectElement/children-changed.html
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::requestObject):
+
+2009-12-05  Adam Langley  <agl@google.com>
+
+        Reviewed by Adam Barth.
+
+        Check that a CSS format() argument is of a valid type.
+
+        https://bugs.webkit.org/show_bug.cgi?id=31815
+        http://code.google.com/p/chromium/issues/detail?id=28582
+
+        Test: fast/css/url-format-non-string.html
+
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseFontFaceSrc):
+
+2010-03-19  Miikka Heikkinen  <miikka.heikkinen@digia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Support for QT_LIBINFIX in Symbian builds
+
+        Configuring Qt with -qtlibinfix parameter will enable installing
+        an alternate version of Qt on devices that already have it on ROM.
+        This patch provides support for infixed builds of Webkit.
+
+        * WebCore.pro:
+
+2010-01-31  Benjamin Poulain  <benjamin.poulain@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms
+        https://bugs.webkit.org/show_bug.cgi?id=34168
+
+        Enable FAST_MOBILE_SCROLLING for Qt on Maemo 5, Linux embedded
+        and Symbian
+
+        * WebCore.pro:
+
+2010-01-19  Daniel Bates  <dbates@rim.com>
+
+        Reviewed by Adam Treat.
+
+        https://bugs.webkit.org/show_bug.cgi?id=33408
+
+        Implements an optimization to ignore fixed background images
+        (i.e. background-attachment: fixed) when a page does not contain
+        any fixed position elements so as to allow fast repaints (via bit
+        blit) when scrolling a page.
+
+        Currently, if a page has elements that specify either a fixed
+        background or a fixed position then we perform a slow repaint
+        (i.e disable blitting) so as to avoid rendering artifacts.
+        However, on low-powered/mobile devices slow repaints can cause
+        noticeable delays when scrolling a page with a fixed background
+        image. By sacrificing support for fixed background images when
+        there are no fixed elements on the page and with come care, we
+        don't need to force slow repaints and can avoid rendering artifacts.
+        Hence, on such devices we can improve the responsiveness of
+        scrolling a page with a fixed background image.
+
+        Note, this optimization is only enabled if the WebKit is built
+        with FAST_MOBILE_SCROLLING enabled.
+
+        Tests: fast/fast-mobile-scrolling/fixed-position-element.html
+               fast/fast-mobile-scrolling/no-fixed-position-elements.html
+
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
+        Disable fixed background attachment if we can blit on scroll.
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::styleWillChange):
+
+2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>
+
+        Reviewed by Tor Arne VestbÃž.
+
+        [Qt] Avoid double-buffering with Qt image decoders
+
+        Pass QIODevice::Unbuffered when opening the QBuffer that
+        wraps the image data, to hint to Qt that no extra buffering
+        is needed.
+
+        * platform/graphics/qt/ImageDecoderQt.cpp:
+        (WebCore::ImageDecoderQt::setData):
+
+2010-01-14  Diego Gonzalez  <diego.gonzalez@openbossa.org>
+
+        Reviewed by Kenneth Christiansen.
+
+        [Qt] Missing fileSystemPath() method in Qt KURL implementation
+        https://bugs.webkit.org/show_bug.cgi?id=33614
+
+        No new tests.
+
+        * platform/qt/KURLQt.cpp:
+        (WebCore::KURL::fileSystemPath):
+
 2010-02-01  Andreas Kling  <andreas.kling@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] In the StyledPainter determine the style from the Render and Scrollbar theme instead of from the paint device
+        https://bugs.webkit.org/show_bug.cgi?id=34054
+
+        Getting the style from the painter's paint device is a hack that breaks when
+        the paint device's style is different than the style that is used when
+        calculating the metries earlier when there is no painter available.
+
+        This change moves us closer to always using the same style.
+
+        * platform/qt/RenderThemeQt.cpp:
+        (WebCore::StylePainter::StylePainter):
+        (WebCore::StylePainter::init):
+        (WebCore::RenderThemeQt::paintButton):
+        (WebCore::RenderThemeQt::paintTextField):
+        (WebCore::RenderThemeQt::paintMenuList):
+        (WebCore::RenderThemeQt::paintMenuListButton):
+        (WebCore::RenderThemeQt::paintSliderTrack):
+        (WebCore::RenderThemeQt::paintMediaMuteButton):
+        (WebCore::RenderThemeQt::paintMediaPlayButton):
+        (WebCore::RenderThemeQt::paintMediaSliderTrack):
+        (WebCore::RenderThemeQt::paintMediaSliderThumb):
+        * platform/qt/RenderThemeQt.h:
+        * platform/qt/ScrollbarThemeQt.cpp:
+        (WebCore::ScrollbarThemeQt::paint):
+        (WebCore::ScrollbarThemeQt::hitTest):
+        (WebCore::ScrollbarThemeQt::shouldCenterOnThumb):
+        (WebCore::ScrollbarThemeQt::scrollbarThickness):
+        (WebCore::ScrollbarThemeQt::thumbLength):
+        (WebCore::ScrollbarThemeQt::trackPosition):
+        (WebCore::ScrollbarThemeQt::trackLength):
+        (WebCore::ScrollbarThemeQt::paintScrollCorner):
+        (WebCore::ScrollbarThemeQt::style):
+        * platform/qt/ScrollbarThemeQt.h:
+
+2010-01-25  Simon Hausmann  <hausmann@webkit.org>
 
         Reviewed by Kenneth Rohde Christiansen.
Index: /trunk/src/3rdparty/webkit/WebCore/WebCore.pro
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/WebCore.pro	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/WebCore.pro	(revision 769)
@@ -7,7 +7,10 @@
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 // Min 128kB, Max 32MB
     TARGET.CAPABILITY = All -Tcb
-    TARGET.UID3 = 0x200267C2
-
-    webkitlibs.sources = QtWebKit.dll
+    isEmpty(QT_LIBINFIX) {
+        TARGET.UID3 = 0x200267C2
+    } else {
+        TARGET.UID3 = 0xE00267C2
+    }
+    webkitlibs.sources = QtWebKit$${QT_LIBINFIX}.dll
     webkitlibs.path = /sys/bin
     vendorinfo = \
@@ -27,5 +30,5 @@
     # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target.
     # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
-    QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000
+    MMP_RULES += "LINKEROPTION  armcc --rw-base 0xE00000"
 }
 
@@ -162,4 +165,8 @@
 } else {
     DEFINES += ENABLE_SVG_FONTS=0 ENABLE_SVG_FOREIGN_OBJECT=0 ENABLE_SVG_ANIMATION=0 ENABLE_SVG_AS_IMAGE=0 ENABLE_SVG_USE=0
+}
+
+mameo5|symbian|embedded {
+    DEFINES += ENABLE_FAST_MOBILE_SCROLLING=1
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/config.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/config.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/config.h	(revision 769)
@@ -145,5 +145,7 @@
 #undef WIN32
 #undef _WIN32
+#if COMPILER(WINSCW)
 #undef SKIP_STATIC_CONSTRUCTORS_ON_GCC
+#endif
 #define USE_SYSTEM_MALLOC 1
 #define U_HAVE_INT8_T 0
Index: /trunk/src/3rdparty/webkit/WebCore/css/CSSParser.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/css/CSSParser.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/css/CSSParser.cpp	(revision 769)
@@ -3329,4 +3329,10 @@
 }
 
+static bool isValidFormatFunction(CSSParserValue* val)
+{
+    CSSParserValueList* args = val->function->args;
+    return equalIgnoringCase(val->function->name, "format(") && (args->current()->unit == CSSPrimitiveValue::CSS_STRING || args->current()->unit == CSSPrimitiveValue::CSS_IDENT);
+}
+
 bool CSSParser::parseFontFaceSrc()
 {
@@ -3356,5 +3362,5 @@
                     uriValue.clear();
                     parsedValue = CSSFontFaceSrcValue::createLocal(a->string);
-                } else if (equalIgnoringCase(val->function->name, "format(") && allowFormat && uriValue) {
+                } else if (allowFormat && uriValue && isValidFormatFunction(val)) {
                     expectComma = true;
                     allowFormat = false;
Index: /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp	(revision 769)
@@ -92,5 +92,6 @@
 void XMLTokenizer::popCurrentNode()
 {
-    ASSERT(m_currentNode);
+    if (!m_currentNode)
+        return;
     ASSERT(m_currentNodeStack.size());
 
Index: /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h	(revision 769)
@@ -52,4 +52,21 @@
     class PendingCallbacks;
     class ScriptElement;
+
+#if !USE(QXMLSTREAM)
+    class XMLParserContext : public RefCounted<XMLParserContext> {
+    public:
+        static PassRefPtr<XMLParserContext> createMemoryParser(xmlSAXHandlerPtr, void*, const char*);
+        static PassRefPtr<XMLParserContext> createStringParser(xmlSAXHandlerPtr, void*);
+        ~XMLParserContext();
+        xmlParserCtxtPtr context() const { return m_context; }
+
+    private:
+        XMLParserContext(xmlParserCtxtPtr context)
+            : m_context(context)
+        {
+        }
+        xmlParserCtxtPtr m_context;
+    };
+#endif
 
     class XMLTokenizer : public Tokenizer, public CachedResourceClient {
@@ -147,5 +164,6 @@
         bool m_wroteText;
 #else
-        xmlParserCtxtPtr m_context;
+        xmlParserCtxtPtr context() const { return m_context ? m_context->context() : 0; };
+        RefPtr<XMLParserContext> m_context;
         OwnPtr<PendingCallbacks> m_pendingCallbacks;
         Vector<xmlChar> m_bufferedText;
Index: /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp	(revision 769)
@@ -466,5 +466,5 @@
 static bool didInit = false;
 
-static xmlParserCtxtPtr createStringParser(xmlSAXHandlerPtr handlers, void* userData)
+PassRefPtr<XMLParserContext> XMLParserContext::createStringParser(xmlSAXHandlerPtr handlers, void* userData)
 {
     if (!didInit) {
@@ -483,10 +483,10 @@
     xmlSwitchEncoding(parser, BOMHighByte == 0xFF ? XML_CHAR_ENCODING_UTF16LE : XML_CHAR_ENCODING_UTF16BE);
 
-    return parser;
+    return adoptRef(new XMLParserContext(parser));
 }
 
 
 // Chunk should be encoded in UTF-8
-static xmlParserCtxtPtr createMemoryParser(xmlSAXHandlerPtr handlers, void* userData, const char* chunk)
+PassRefPtr<XMLParserContext> XMLParserContext::createMemoryParser(xmlSAXHandlerPtr handlers, void* userData, const char* chunk)
 {
     if (!didInit) {
@@ -519,6 +519,6 @@
     parser->str_xml_ns = xmlDictLookup(parser->dict, XML_XML_NAMESPACE, 36);
     parser->_private = userData;
-
-    return parser;
+    
+    return adoptRef(new XMLParserContext(parser));
 }
 
@@ -610,4 +610,11 @@
 }
 
+XMLParserContext::~XMLParserContext()
+{
+    if (m_context->myDoc)
+        xmlFreeDoc(m_context->myDoc);
+    xmlFreeParserCtxt(m_context);
+}
+
 XMLTokenizer::~XMLTokenizer()
 {
@@ -617,6 +624,4 @@
     if (m_pendingScript)
         m_pendingScript->removeClient(this);
-    if (m_context)
-        xmlFreeParserCtxt(m_context);
 }
 
@@ -625,5 +630,8 @@
     if (!m_context)
         initializeParserContext();
-    
+
+    // Protect the libxml context from deletion during a callback
+    RefPtr<XMLParserContext> context = m_context;
+
     // libXML throws an error if you try to switch the encoding for an empty string.
     if (parseString.length()) {
@@ -634,13 +642,13 @@
         const UChar BOM = 0xFEFF;
         const unsigned char BOMHighByte = *reinterpret_cast<const unsigned char*>(&BOM);
-        xmlSwitchEncoding(m_context, BOMHighByte == 0xFF ? XML_CHAR_ENCODING_UTF16LE : XML_CHAR_ENCODING_UTF16BE);
+        xmlSwitchEncoding(context->context(), BOMHighByte == 0xFF ? XML_CHAR_ENCODING_UTF16LE : XML_CHAR_ENCODING_UTF16BE);
 
         XMLTokenizerScope scope(m_doc->docLoader());
-        xmlParseChunk(m_context, reinterpret_cast<const char*>(parseString.characters()), sizeof(UChar) * parseString.length(), 0);
+        xmlParseChunk(context->context(), reinterpret_cast<const char*>(parseString.characters()), sizeof(UChar) * parseString.length(), 0);
     }
     
     if (m_doc->decoder() && m_doc->decoder()->sawError()) {
         // If the decoder saw an error, report it as fatal (stops parsing)
-        handleError(fatal, "Encoding error", lineNumber(), columnNumber());
+        handleError(fatal, "Encoding error", context->context()->input->line, context->context()->input->col);
     }
 
@@ -1278,7 +1286,7 @@
     XMLTokenizerScope scope(m_doc->docLoader());
     if (m_parsingFragment)
-        m_context = createMemoryParser(&sax, this, chunk);
+        m_context = XMLParserContext::createMemoryParser(&sax, this, chunk);
     else
-        m_context = createStringParser(&sax, this);
+        m_context = XMLParserContext::createStringParser(&sax, this);
 }
 
@@ -1301,10 +1309,7 @@
         {
             XMLTokenizerScope scope(m_doc->docLoader());
-            xmlParseChunk(m_context, 0, 0, 1);
-        }
-
-        if (m_context->myDoc)
-            xmlFreeDoc(m_context->myDoc);
-        xmlFreeParserCtxt(m_context);
+            xmlParseChunk(context(), 0, 0, 1);
+        }
+
         m_context = 0;
     }
@@ -1335,10 +1340,10 @@
 int XMLTokenizer::lineNumber() const
 {
-    return m_context ? m_context->input->line : 1;
+    return context() ? context()->input->line : 1;
 }
 
 int XMLTokenizer::columnNumber() const
 {
-    return m_context ? m_context->input->col : 1;
+    return context() ? context()->input->col : 1;
 }
 
@@ -1346,5 +1351,6 @@
 {
     Tokenizer::stopParsing();
-    xmlStopParser(m_context);
+    if (context())
+        xmlStopParser(context());
 }
 
@@ -1385,15 +1391,15 @@
     tokenizer.initializeParserContext(chunkAsUtf8.data());
 
-    xmlParseContent(tokenizer.m_context);
+    xmlParseContent(tokenizer.context());
 
     tokenizer.endDocument();
 
     // Check if all the chunk has been processed.
-    long bytesProcessed = xmlByteConsumed(tokenizer.m_context);
+    long bytesProcessed = xmlByteConsumed(tokenizer.context());
     if (bytesProcessed == -1 || ((unsigned long)bytesProcessed) != chunkAsUtf8.length())
         return false;
 
     // No error if the chunk is well formed or it is not but we have no error.
-    return tokenizer.m_context->wellFormed || xmlCtxtGetLastError(tokenizer.m_context) == 0;
+    return tokenizer.context()->wellFormed || xmlCtxtGetLastError(tokenizer.context()) == 0;
 }
 
@@ -1438,10 +1444,7 @@
     sax.startElementNs = attributesStartElementNsHandler;
     sax.initialized = XML_SAX2_MAGIC;
-    xmlParserCtxtPtr parser = createStringParser(&sax, &state);
+    RefPtr<XMLParserContext> parser = XMLParserContext::createStringParser(&sax, &state);
     String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />";
-    xmlParseChunk(parser, reinterpret_cast<const char*>(parseString.characters()), parseString.length() * sizeof(UChar), 1);
-    if (parser->myDoc)
-        xmlFreeDoc(parser->myDoc);
-    xmlFreeParserCtxt(parser);
+    xmlParseChunk(parser->context(), reinterpret_cast<const char*>(parseString.characters()), parseString.length() * sizeof(UChar), 1);
     attrsOK = state.gotAttributes;
     return state.attributes;
Index: /trunk/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp	(revision 769)
@@ -516,4 +516,5 @@
 void HTMLFormElement::registerImgElement(HTMLImageElement* e)
 {
+    ASSERT(imgElements.find(e) == notFound);
     imgElements.append(e);
 }
@@ -521,4 +522,5 @@
 void HTMLFormElement::removeImgElement(HTMLImageElement* e)
 {
+    ASSERT(imgElements.find(e) != notFound);
     removeFromVector(imgElements, e);
 }
Index: /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp	(revision 769)
@@ -210,4 +210,28 @@
 }
 
+void HTMLImageElement::insertedIntoTree(bool deep)
+{
+    if (!m_form) {
+        // m_form can be non-null if it was set in constructor.
+        for (Node* ancestor = parentNode(); ancestor; ancestor = ancestor->parentNode()) {
+            if (ancestor->hasTagName(formTag)) {
+                m_form = static_cast<HTMLFormElement*>(ancestor);
+                m_form->registerImgElement(this);
+                break;
+            }
+        }
+    }
+
+    HTMLElement::insertedIntoTree(deep);
+}
+
+void HTMLImageElement::removedFromTree(bool deep)
+{
+    if (m_form)
+        m_form->removeImgElement(this);
+    m_form = 0;
+    HTMLElement::removedFromTree(deep);
+}
+
 int HTMLImageElement::width(bool ignorePendingStylesheets) const
 {
Index: /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/html/HTMLImageElement.h	(revision 769)
@@ -46,6 +46,4 @@
     virtual void attach();
     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual void insertedIntoDocument();
-    virtual void removedFromDocument();
 
     virtual bool canStartSelection() const { return false; }
@@ -106,4 +104,9 @@
 
 private:
+    virtual void insertedIntoDocument();
+    virtual void removedFromDocument();
+    virtual void insertedIntoTree(bool deep);
+    virtual void removedFromTree(bool deep);
+
     HTMLImageLoader m_imageLoader;
     String usemap;
Index: /trunk/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp	(revision 769)
@@ -702,10 +702,13 @@
             registerForActivationCallbackIfNeeded();
         } else {
-            if (m_autocomplete == Off)
-                unregisterForActivationCallbackIfNeeded();
+            bool needsToUnregister = m_autocomplete == Off;
+
             if (attr->isEmpty())
                 m_autocomplete = Uninitialized;
             else
                 m_autocomplete = On;
+
+            if (needsToUnregister)
+                unregisterForActivationCallbackIfNeeded();
         }
     } else if (attr->name() == typeAttr) {
Index: /trunk/src/3rdparty/webkit/WebCore/html/HTMLParser.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/html/HTMLParser.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/html/HTMLParser.cpp	(revision 769)
@@ -1276,5 +1276,6 @@
             ASSERT(newNodePtr);
             prevMaxElem->node = newNodePtr;
-            prevMaxElem->didRefNode = false;
+            newNodePtr->ref();
+            prevMaxElem->didRefNode = true;
         } else
             delete elem;
Index: /trunk/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp	(revision 769)
@@ -1261,7 +1261,9 @@
     ASSERT(renderer->node()->hasTagName(objectTag) || renderer->node()->hasTagName(embedTag));
     HTMLPlugInElement* element = static_cast<HTMLPlugInElement*>(renderer->node());
-    
-    // FIXME: OK to always make a new frame? When does the old frame get removed?
-    return loadSubframe(element, completedURL, frameName, m_outgoingReferrer);
+
+    // If the plug-in element already contains a subframe, requestFrame will re-use it. Otherwise,
+    // it will create a new frame and set it as the RenderPart's widget, causing what was previously 
+    // in the widget to be torn down.
+    return requestFrame(element, completedURL, frameName);
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/page/FrameView.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/page/FrameView.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/page/FrameView.cpp	(revision 769)
@@ -107,4 +107,5 @@
     : m_frame(frame)
     , m_slowRepaintObjectCount(0)
+    , m_fixedObjectCount(0)
     , m_layoutTimer(this, &FrameView::layoutTimerFired)
     , m_layoutRoot(0)
@@ -736,5 +737,10 @@
 bool FrameView::useSlowRepaints() const
 {
-    return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || m_isOverlapped || !m_contentIsOpaque;
+    return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || (platformWidget() && m_fixedObjectCount > 0) || m_isOverlapped || !m_contentIsOpaque;
+}
+
+bool FrameView::useSlowRepaintsIfNotOverlapped() const
+{
+    return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || !m_contentIsOpaque;
 }
 
@@ -758,4 +764,76 @@
     if (!m_slowRepaintObjectCount)
         setCanBlitOnScroll(!useSlowRepaints());
+}
+
+void FrameView::addFixedObject()
+{
+    if (!m_fixedObjectCount && platformWidget())
+        setCanBlitOnScroll(false);
+    ++m_fixedObjectCount;
+}
+
+void FrameView::removeFixedObject()
+{
+    ASSERT(m_fixedObjectCount > 0);
+    m_fixedObjectCount--;
+    if (!m_fixedObjectCount)
+        setCanBlitOnScroll(!useSlowRepaints());
+}
+
+void FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
+{
+    const size_t fixedObjectThreshold = 5;
+
+    ListHashSet<RenderBox*>* positionedObjects = 0;
+    if (RenderView* root = m_frame->contentRenderer())
+        positionedObjects = root->positionedObjects();
+
+    if (!positionedObjects || positionedObjects->isEmpty()) {
+        hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+        return;
+    }
+
+    // Get the rects of the fixed objects visible in the rectToScroll
+    Vector<IntRect, fixedObjectThreshold> subRectToUpdate;
+    bool updateInvalidatedSubRect = true;
+    ListHashSet<RenderBox*>::const_iterator end = positionedObjects->end();
+    for (ListHashSet<RenderBox*>::const_iterator it = positionedObjects->begin(); it != end; ++it) {
+        RenderBox* renderBox = *it;
+        if (renderBox->style()->position() != FixedPosition)
+            continue;
+        IntRect topLevelRect;
+        IntRect updateRect = renderBox->paintingRootRect(topLevelRect);
+        updateRect.move(-scrollX(), -scrollY());
+        updateRect.intersect(rectToScroll);
+        if (!updateRect.isEmpty()) {
+            if (subRectToUpdate.size() >= fixedObjectThreshold) {
+                updateInvalidatedSubRect = false;
+                break;
+            }
+            subRectToUpdate.append(updateRect);
+        }
+    }
+
+    // Scroll the view
+    if (updateInvalidatedSubRect) {
+        // 1) scroll
+        hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+
+        // 2) update the area of fixed objets that has been invalidated
+        size_t fixObjectsCount = subRectToUpdate.size();
+        for (size_t i = 0; i < fixObjectsCount; ++i) {
+            IntRect updateRect = subRectToUpdate[i];
+            IntRect scrolledRect = updateRect;
+            scrolledRect.move(scrollDelta);
+            updateRect.unite(scrolledRect);
+            updateRect.intersect(rectToScroll);
+            hostWindow()->repaint(updateRect, true, false, true);
+        }
+    } else {
+        // the number of fixed objects exceed the threshold, so we repaint everything.
+        IntRect updateRect = clipRect;
+        updateRect.intersect(rectToScroll);
+        hostWindow()->repaint(updateRect, true, false, true);
+    }
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/page/FrameView.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/page/FrameView.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/page/FrameView.h	(revision 769)
@@ -144,4 +144,7 @@
     void removeSlowRepaintObject();
 
+    void addFixedObject();
+    void removeFixedObject();
+
     void beginDeferredRepaints();
     void endDeferredRepaints();
@@ -197,4 +200,7 @@
     void invalidateScrollCorner();
 
+protected:
+    virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
+
 private:
     FrameView(Frame*);
@@ -207,4 +213,5 @@
     friend class RenderWidget;
     bool useSlowRepaints() const;
+    bool useSlowRepaintsIfNotOverlapped() const;
 
     void applyOverflowToViewport(RenderObject*, ScrollbarMode& hMode, ScrollbarMode& vMode);
@@ -262,4 +269,5 @@
     bool m_contentIsOpaque;
     unsigned m_slowRepaintObjectCount;
+    unsigned m_fixedObjectCount;
 
     int m_borderX, m_borderY;
Index: /trunk/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp	(revision 769)
@@ -52,5 +52,5 @@
 
 QT_BEGIN_NAMESPACE
-extern Q_GUI_EXPORT bool qt_tab_all_widgets; // from qapplication.cpp
+Q_GUI_EXPORT extern bool qt_tab_all_widgets; // from qapplication.cpp
 QT_END_NAMESPACE
 
Index: /trunk/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp	(revision 769)
@@ -201,7 +201,5 @@
         "application/xml",
         "application/xhtml+xml",
-#if ENABLE(XHTMLMP)
         "application/vnd.wap.xhtml+xml",
-#endif
         "application/rss+xml",
         "application/atom+xml",
Index: /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp	(revision 769)
@@ -510,5 +510,5 @@
     if (canBlitOnScroll()) { // The main frame can just blit the WebView window
        // FIXME: Find a way to blit subframes without blitting overlapping content
-       hostWindow()->scroll(-scrollDelta, scrollViewRect, clipRect);
+       scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect);
     } else { 
        // We need to go ahead and repaint the entire backing store.  Do it now before moving the
@@ -523,4 +523,9 @@
     // be very fast).
     hostWindow()->paint();
+}
+
+void ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
+{
+    hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/ScrollView.h	(revision 769)
@@ -245,4 +245,7 @@
     virtual void updateScrollCorner();
     virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect);
+
+    // Scroll the content by blitting the pixels
+    virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
     
 private:
Index: /trunk/src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp	(revision 769)
@@ -80,5 +80,5 @@
     m_buffer = new QBuffer;
     m_buffer->setData(imageData);
-    m_buffer->open(QBuffer::ReadOnly);
+    m_buffer->open(QBuffer::ReadOnly | QIODevice::Unbuffered);
     m_reader = new QImageReader(m_buffer, m_format);
 }
@@ -115,6 +115,21 @@
 int ImageDecoderQt::repetitionCount() const
 {
-    if (m_reader && m_reader->supportsAnimation())
-        m_repetitionCount = qMax(0, m_reader->loopCount());
+    if (m_reader && m_reader->supportsAnimation()) {
+        m_repetitionCount = m_reader->loopCount();
+
+        // Qt and WebCore have a incompatible understanding of
+        // the loop count and we can not completely map everything.
+        //  Qt   |   WebCore          | description
+        //  -1   |     0              | infinite animation
+        //   0   | cAnimationLoopOnce | show every frame once
+        //   n   |     n+1            | Qt returns the # of iterations - 1
+        //  n/a  | cAnimationNone     | show only the first frame
+        if (m_repetitionCount == -1)
+            m_repetitionCount = 0;
+        else if (m_repetitionCount == 0)
+            m_repetitionCount = cAnimationLoopOnce;
+        else
+            ++m_repetitionCount;
+    }
 
     return m_repetitionCount;
@@ -189,6 +204,9 @@
     // Now get the QImage from Qt and place it in the RGBA32Buffer
     QImage img;
-    if (!m_reader->read(&img))
+    if (!m_reader->read(&img)) {
+        frameCount();
+        repetitionCount();
         return failRead();
+    }
 
     // now into the RGBA32Buffer - even if the image is not
Index: /trunk/src/3rdparty/webkit/WebCore/platform/network/ResourceRequestBase.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/network/ResourceRequestBase.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/network/ResourceRequestBase.cpp	(revision 769)
@@ -382,9 +382,17 @@
 unsigned initializeMaximumHTTPConnectionCountPerHost()
 {
+#if PLATFORM(QT)
+#ifdef Q_OS_SYMBIAN
+    return 3 * (1 + 3 + 2);
+#else
+    return 6 * (1 + 3 + 2);
+#endif
+#else
     // This is used by the loader to control the number of issued parallel load requests. 
     // Four seems to be a common default in HTTP frameworks.
     return 4;
-}
 #endif
-
-}
+}
+#endif
+
+}
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/KURLQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/KURLQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/KURLQt.cpp	(revision 769)
@@ -96,6 +96,8 @@
 String KURL::fileSystemPath() const
 {
-    notImplemented();
-    return String();
+    if (!isValid() || !protocolIs("file"))
+        return String();
+
+    return String(path());
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp	(revision 769)
@@ -40,5 +40,5 @@
 #include <QGraphicsScene>
 #include <QGraphicsView>
-#include <QGraphicsWebView>
+#include <qgraphicswebview.h>
 #include <QListWidget>
 #include <QListWidgetItem>
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp	(revision 769)
@@ -45,4 +45,5 @@
 #include "RenderBox.h"
 #include "RenderTheme.h"
+#include "ScrollbarThemeQt.h"
 #include "UserAgentStyleSheets.h"
 #include "QWebPageClient.h"
@@ -67,15 +68,15 @@
 
 
-StylePainter::StylePainter(const RenderObject::PaintInfo& paintInfo)
-{
-    init(paintInfo.context ? paintInfo.context : 0);
-}
-
-StylePainter::StylePainter(GraphicsContext* context)
-{
-    init(context);
-}
-
-void StylePainter::init(GraphicsContext* context)
+StylePainter::StylePainter(RenderThemeQt* theme, const RenderObject::PaintInfo& paintInfo)
+{
+    init(paintInfo.context ? paintInfo.context : 0, theme->qStyle());
+}
+
+StylePainter::StylePainter(ScrollbarThemeQt* theme, GraphicsContext* context)
+{
+    init(context, theme->style());
+}
+
+void StylePainter::init(GraphicsContext* context, QStyle* themeStyle)
 {
     painter = static_cast<QPainter*>(context->platformContext());
@@ -86,5 +87,5 @@
     if (dev && dev->devType() == QInternal::Widget)
         widget = static_cast<QWidget*>(dev);
-    style = (widget ? widget->style() : QApplication::style());
+    style = themeStyle;
 
     if (painter) {
@@ -126,4 +127,5 @@
     : RenderTheme()
     , m_page(page)
+    , m_lineEdit(0)
 {
     QPushButton button;
@@ -142,4 +144,5 @@
 {
     delete m_fallbackStyle;
+    delete m_lineEdit;
 }
 
@@ -207,9 +210,11 @@
 }
 
-static int findFrameLineWidth(QStyle* style)
-{
-    QLineEdit lineEdit;
+int RenderThemeQt::findFrameLineWidth(QStyle* style) const
+{
+    if (!m_lineEdit)
+        m_lineEdit = new QLineEdit();
+
     QStyleOptionFrameV2 opt;
-    return style->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, &lineEdit);
+    return style->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, m_lineEdit);
 }
 
@@ -465,5 +470,5 @@
 bool RenderThemeQt::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
 {
-    StylePainter p(i);
+    StylePainter p(this, i);
     if (!p.isValid())
        return true;
@@ -498,5 +503,5 @@
 bool RenderThemeQt::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
 {
-    StylePainter p(i);
+    StylePainter p(this, i);
     if (!p.isValid())
         return true;
@@ -567,5 +572,5 @@
 bool RenderThemeQt::paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
 {
-    StylePainter p(i);
+    StylePainter p(this, i);
     if (!p.isValid())
         return true;
@@ -607,5 +612,5 @@
                                         const IntRect& r)
 {
-    StylePainter p(i);
+    StylePainter p(this, i);
     if (!p.isValid())
         return true;
@@ -838,5 +843,5 @@
         return false;
 
-    StylePainter p(paintInfo);
+    StylePainter p(this, paintInfo);
     if (!p.isValid())
         return true;
@@ -867,5 +872,5 @@
         return false;
 
-    StylePainter p(paintInfo);
+    StylePainter p(this, paintInfo);
     if (!p.isValid())
         return true;
@@ -906,5 +911,5 @@
         return false;
 
-    StylePainter p(paintInfo);
+    StylePainter p(this, paintInfo);
     if (!p.isValid())
         return true;
@@ -933,5 +938,5 @@
         return false;
 
-    StylePainter p(paintInfo);
+    StylePainter p(this, paintInfo);
     if (!p.isValid())
         return true;
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h	(revision 769)
@@ -28,4 +28,5 @@
 
 QT_BEGIN_NAMESPACE
+class QLineEdit;
 class QPainter;
 class QWidget;
@@ -36,4 +37,5 @@
 class RenderStyle;
 class HTMLMediaElement;
+class ScrollbarThemeQt;
 
 class RenderThemeQt : public RenderTheme {
@@ -75,4 +77,6 @@
     virtual String extraMediaControlsStyleSheet();
 #endif
+
+    QStyle* qStyle() const;
 
 protected:
@@ -138,5 +142,6 @@
     void setPopupPadding(RenderStyle*) const;
 
-    QStyle* qStyle() const;
+    int findFrameLineWidth(QStyle* style) const;
+
     QStyle* fallbackStyle() const;
 
@@ -149,10 +154,11 @@
 
     QStyle* m_fallbackStyle;
+    mutable QLineEdit* m_lineEdit;
 };
 
 class StylePainter {
 public:
-    explicit StylePainter(const RenderObject::PaintInfo& paintInfo);
-    explicit StylePainter(GraphicsContext* context);
+    explicit StylePainter(RenderThemeQt*, const RenderObject::PaintInfo&);
+    explicit StylePainter(ScrollbarThemeQt*, GraphicsContext*);
     ~StylePainter();
 
@@ -171,5 +177,5 @@
 
 private:
-    void init(GraphicsContext* context);
+    void init(GraphicsContext* context, QStyle*);
 
     QBrush oldBrush;
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp	(revision 769)
@@ -141,5 +141,5 @@
     }
 
-    StylePainter p(graphicsContext);
+    StylePainter p(this, graphicsContext);
     if (!p.isValid())
       return true;
@@ -173,5 +173,5 @@
     const QPoint pos = scrollbar->convertFromContainingWindow(evt.pos());
     opt->rect.moveTo(QPoint(0, 0));
-    QStyle::SubControl sc = QApplication::style()->hitTestComplexControl(QStyle::CC_ScrollBar, opt, pos, 0);
+    QStyle::SubControl sc = style()->hitTestComplexControl(QStyle::CC_ScrollBar, opt, pos, 0);
     return scrollbarPart(sc);
 }
@@ -180,5 +180,5 @@
 {
     // Middle click centers slider thumb (if supported)
-    return QApplication::style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition) && evt.button() == MiddleButton;
+    return style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition) && evt.button() == MiddleButton;
 }
 
@@ -191,5 +191,4 @@
 int ScrollbarThemeQt::scrollbarThickness(ScrollbarControlSize controlSize)
 {
-    QStyle* s = QApplication::style();
     QStyleOptionSlider o;
     o.orientation = Qt::Vertical;
@@ -197,5 +196,5 @@
     if (controlSize != RegularScrollbar)
         o.state |= QStyle::State_Mini;
-    return s->pixelMetric(QStyle::PM_ScrollBarExtent, &o, 0);
+    return style()->pixelMetric(QStyle::PM_ScrollBarExtent, &o, 0);
 }
 
@@ -210,5 +209,5 @@
 {
     QStyleOptionSlider* opt = styleOptionSlider(scrollbar);
-    IntRect thumb = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarSlider, 0);
+    IntRect thumb = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarSlider, 0);
     return scrollbar->orientation() == HorizontalScrollbar ? thumb.width() : thumb.height();
 }
@@ -217,5 +216,5 @@
 {
     QStyleOptionSlider* opt = styleOptionSlider(scrollbar);
-    IntRect track = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0);
+    IntRect track = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0);
     return scrollbar->orientation() == HorizontalScrollbar ? track.x() - scrollbar->x() : track.y() - scrollbar->y();
 }
@@ -224,5 +223,5 @@
 {
     QStyleOptionSlider* opt = styleOptionSlider(scrollbar);
-    IntRect track = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0);
+    IntRect track = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0);
     return scrollbar->orientation() == HorizontalScrollbar ? track.width() : track.height();
 }
@@ -238,5 +237,5 @@
     context->fillRect(rect, QApplication::palette().color(QPalette::Normal, QPalette::Window));
 #else
-    StylePainter p(context);
+    StylePainter p(this, context);
     if (!p.isValid())
         return;
@@ -248,4 +247,9 @@
 }
 
-}
-
+QStyle* ScrollbarThemeQt::style() const
+{
+    return QApplication::style();
+}
+
+}
+
Index: /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h	(revision 769)
@@ -29,4 +29,10 @@
 #include "ScrollbarTheme.h"
 
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+class QStyle;
+QT_END_NAMESPACE
+
 namespace WebCore {
 
@@ -50,4 +56,6 @@
 
     virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar);
+
+    QStyle* style() const;
 };
 
Index: /trunk/src/3rdparty/webkit/WebCore/platform/text/StringHash.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/platform/text/StringHash.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/platform/text/StringHash.h	(revision 769)
@@ -1,4 +1,5 @@
 /*
  * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved
+ * Copyright (C) Research In Motion Limited 2009. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
@@ -48,4 +49,14 @@
                 return false;
 
+#if PLATFORM(ARM) || PLATFORM(SH4)
+            const UChar* aChars = a->characters();
+            const UChar* bChars = b->characters();
+            for (unsigned i = 0; i != aLength; ++i) {
+                if (*aChars++ != *bChars++)
+                    return false;
+            }
+            return true;
+#else
+            /* Do it 4-bytes-at-a-time on architectures where it's safe */
             const uint32_t* aChars = reinterpret_cast<const uint32_t*>(a->characters());
             const uint32_t* bChars = reinterpret_cast<const uint32_t*>(b->characters());
@@ -60,4 +71,5 @@
 
             return true;
+#endif
         }
 
Index: /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp	(revision 769)
@@ -33,10 +33,10 @@
 using namespace WebCore;
 
-PluginContainerSymbian::PluginContainerSymbian(PluginView* view, QWidget* parent)
-    : m_parent(parent)
+PluginContainerSymbian::PluginContainerSymbian(PluginView* view, QWidget* parent, QGraphicsProxyWidget* proxy)
+    : QWidget(parent)
     , m_pluginView(view)
+    , m_proxy(proxy)
     , m_hasPendingGeometryChange(false)
 {
-    setParent(m_parent);
 }
 
@@ -63,5 +63,5 @@
 }
 
-void PluginContainerSymbian::focusInEvent(QFocusEvent* event)
+void PluginContainerSymbian::focusInEvent(QFocusEvent*)
 {
     if (Page* page = m_pluginView->parentFrame()->page())
Index: /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h	(revision 769)
@@ -23,4 +23,6 @@
 #include <QWidget>
 
+class QGraphicsProxyWidget;
+
 namespace WebCore {
 
@@ -30,9 +32,10 @@
         Q_OBJECT
     public:
-        PluginContainerSymbian(PluginView*, QWidget* parent);
+        PluginContainerSymbian(PluginView*, QWidget* parent, QGraphicsProxyWidget* proxy = 0);
         ~PluginContainerSymbian();
 
         void requestGeometry(const QRect&, const QRegion& clip = QRegion());
         void adjustGeometry();
+        QGraphicsProxyWidget* proxy() { return m_proxy; }
 
     protected:
@@ -41,5 +44,5 @@
     private:
         PluginView* m_pluginView;
-        QWidget* m_parent;
+        QGraphicsProxyWidget* m_proxy;
         QRect m_windowRect;
         QRegion m_clipRegion;
Index: /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp	(revision 769)
@@ -53,4 +53,6 @@
 #include "runtime_root.h"
 #include "QWebPageClient.h"
+#include "qgraphicswebview.h"
+#include <QGraphicsProxyWidget>
 #include <QKeyEvent>
 #include <QPixmap.h>
@@ -85,4 +87,5 @@
     
     m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
+    
     m_clipRect = windowClipRect();
     m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
@@ -426,10 +429,13 @@
     if (m_isWindowed) {
         QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
-        // FIXME this will not work for QGraphicsView.
-        // But we cannot use winId because it will create a window and on S60,
-        // QWidgets should not create a window. 
-        Q_ASSERT(qobject_cast<QWidget*>(client->pluginParent()));
-        setPlatformWidget(new PluginContainerSymbian(this, 
-            qobject_cast<QWidget*>(client->pluginParent())));
+        QGraphicsProxyWidget* proxy = 0;
+        if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(client->pluginParent()))
+            proxy = new QGraphicsProxyWidget(webView);
+
+        PluginContainerSymbian* container = new PluginContainerSymbian(this, proxy ? 0 : client->ownerWidget(), proxy);
+        setPlatformWidget(container);
+        if (proxy)
+            proxy->setWidget(container);
+        
         m_npWindow.type = NPWindowTypeWindow;
         m_npWindow.window = (void*)platformPluginWidget();
@@ -447,5 +453,9 @@
 void PluginView::platformDestroy()
 {
-    delete platformPluginWidget();
+    QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
+    if (client && qobject_cast<QGraphicsWebView*>(client->pluginParent()))
+        delete static_cast<PluginContainerSymbian*>(platformPluginWidget())->proxy();
+    else
+        delete platformPluginWidget();
 }
 
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h	(revision 769)
@@ -76,4 +76,5 @@
     void removePositionedObject(RenderBox*);
     void removePositionedObjects(RenderBlock*);
+    ListHashSet<RenderBox*>* positionedObjects() const { return m_positionedObjects; }
 
     void addPercentHeightDescendant(RenderBox*);
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp	(revision 769)
@@ -144,4 +144,14 @@
             if (isFloating() && !isPositioned() && (newStyle->position() == AbsolutePosition || newStyle->position() == FixedPosition))
                 removeFloatingOrPositionedChildFromBlockLists();
+        }
+    }
+    if (FrameView *frameView = view()->frameView()) {
+        bool newStyleIsFixed = newStyle && newStyle->position() == FixedPosition;
+        bool oldStyleIsFixed = style() && style()->position() == FixedPosition;
+        if (newStyleIsFixed != oldStyleIsFixed) {
+            if (newStyleIsFixed)
+                frameView->addFixedObject();
+            else
+                frameView->removeFixedObject();
         }
     }
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp	(revision 769)
@@ -558,4 +558,15 @@
     // destRect will be adjusted later if the background is non-repeating.
     bool fixedAttachment = fillLayer->attachment() == FixedBackgroundAttachment;
+
+#if ENABLE(FAST_MOBILE_SCROLLING)
+    if (view()->frameView() && view()->frameView()->canBlitOnScroll()) {
+        // As a side effect of an optimization to blit on scroll, we do not honor the CSS
+        // property "background-attachment: fixed" because it may result in rendering
+        // artifacts. Note, these artifacts only appear if we are blitting on scroll of
+        // a page that has fixed background images.
+        fixedAttachment = false;
+    }
+#endif
+
     if (!fixedAttachment) {
         destRect = IntRect(tx, ty, w, h);
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp	(revision 769)
@@ -1592,8 +1592,15 @@
 
     if (view()->frameView()) {
-        // FIXME: A better solution would be to only invalidate the fixed regions when scrolling.  It's overkill to
-        // prevent the entire view from blitting on a scroll.
-        bool newStyleSlowScroll = newStyle && (newStyle->position() == FixedPosition || newStyle->hasFixedBackgroundImage());
-        bool oldStyleSlowScroll = m_style && (m_style->position() == FixedPosition || m_style->hasFixedBackgroundImage());
+        bool shouldBlitOnFixedBackgroundImage = false;
+#if ENABLE(FAST_MOBILE_SCROLLING)
+        // On low-powered/mobile devices, preventing blitting on a scroll can cause noticeable delays
+        // when scrolling a page with a fixed background image. As an optimization, assuming there are
+        // no fixed positoned elements on the page, we can acclerate scrolling (via blitting) if we
+        // ignore the CSS property "background-attachment: fixed".
+        shouldBlitOnFixedBackgroundImage = true;
+#endif
+
+        bool newStyleSlowScroll = newStyle && !shouldBlitOnFixedBackgroundImage && newStyle->hasFixedBackgroundImage();
+        bool oldStyleSlowScroll = m_style && !shouldBlitOnFixedBackgroundImage && m_style->hasFixedBackgroundImage();
         if (oldStyleSlowScroll != newStyleSlowScroll) {
             if (oldStyleSlowScroll)
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp	(revision 769)
@@ -1048,6 +1048,13 @@
         // We want the box to be destroyed.
         s->remove();
+        if (m_firstTextBox == s)
+            m_firstTextBox = s->nextTextBox();
+        else
+            s->prevTextBox()->setNextLineBox(s->nextTextBox());
+        if (m_lastTextBox == s)
+            m_lastTextBox = s->prevTextBox();
+        else
+            s->nextTextBox()->setPreviousLineBox(s->prevTextBox());
         s->destroy(renderArena());
-        m_firstTextBox = m_lastTextBox = 0;
         return;
     }
@@ -1350,5 +1357,5 @@
     const InlineTextBox* prev = 0;
     for (const InlineTextBox* child = m_firstTextBox; child != 0; child = child->nextTextBox()) {
-        ASSERT(child->object() == this);
+        ASSERT(child->renderer() == this);
         ASSERT(child->prevTextBox() == prev);
         prev = child;
Index: /trunk/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp	(revision 769)
@@ -234,5 +234,5 @@
             m_widget->paint(paintInfo.context, paintInfo.rect);
 
-        if (m_widget->isFrameView() && paintInfo.overlapTestRequests && !static_cast<FrameView*>(m_widget.get())->useSlowRepaints()) {
+        if (m_widget->isFrameView() && paintInfo.overlapTestRequests && !static_cast<FrameView*>(m_widget.get())->useSlowRepaintsIfNotOverlapped()) {
             ASSERT(!paintInfo.overlapTestRequests->contains(this));
             paintInfo.overlapTestRequests->set(this, m_widget->frameRect());
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp	(revision 769)
@@ -31,4 +31,5 @@
 #include <QtGui/qgraphicssceneevent.h>
 #include <QtGui/qstyleoption.h>
+#include <QtGui/qinputcontext.h>
 #if defined(Q_WS_X11)
 #include <QX11Info>
@@ -64,4 +65,7 @@
     void _q_doLoadFinished(bool success);
 
+    void _q_updateMicroFocus();
+    void _q_pageDestroyed();
+
     QGraphicsWebView* q;
     QWebPage* page;
@@ -79,4 +83,24 @@
 
     emit q->loadFinished(success);
+}
+
+void QGraphicsWebViewPrivate::_q_updateMicroFocus()
+{
+#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN))
+    // Ideally, this should be handled by a common call to an updateMicroFocus function
+    // in QGraphicsItem. See http://bugreports.qt.nokia.com/browse/QTBUG-7578.
+    QList<QGraphicsView*> views = q->scene()->views();
+    for (int c = 0; c < views.size(); ++c) {
+        QInputContext* ic = views.at(c)->inputContext();
+        if (ic)
+            ic->update();
+    }
+#endif
+}
+
+void QGraphicsWebViewPrivate::_q_pageDestroyed()
+{
+    page = 0;
+    q->setPage(0);
 }
 
@@ -436,4 +460,8 @@
     connect(d->page, SIGNAL(linkClicked(QUrl)),
             this, SIGNAL(linkClicked(QUrl)));
+    connect(d->page, SIGNAL(microFocusChanged()),
+            this, SLOT(_q_updateMicroFocus()));
+    connect(d->page, SIGNAL(destroyed()),
+            this, SLOT(_q_pageDestroyed()));
 }
 
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h	(revision 769)
@@ -135,4 +135,6 @@
 private:
     Q_PRIVATE_SLOT(d, void _q_doLoadFinished(bool success))
+    Q_PRIVATE_SLOT(d, void _q_updateMicroFocus())
+    Q_PRIVATE_SLOT(d, void _q_pageDestroyed())
 
     QGraphicsWebViewPrivate* const d;
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h	(revision 769)
@@ -21,9 +21,9 @@
 #define QWEBELEMENT_H
 
-#include <QString>
-#include <QStringList>
-#include <QRect>
-#include <QVariant>
-#include <QExplicitlySharedDataPointer>
+#include <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qshareddata.h>
 
 #include "qwebkitglobal.h"
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	(revision 769)
@@ -325,13 +325,12 @@
 }
 
-static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy)
-{
-    if (!frame || !frame->document() || !frame->eventHandler())
+bool QWEBKIT_EXPORT qtwebkit_webframe_scrollOverflow(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
+{
+    WebCore::Frame* frame = QWebFramePrivate::core(qFrame);
+    if (!frame || !frame->document() || !frame->view() || !frame->eventHandler())
         return false;
 
-    Node* node = frame->document()->focusedNode();
-    if (!node)
-        node = frame->document()->elementFromPoint(frame->eventHandler()->currentMousePosition().x(),
-                                                   frame->eventHandler()->currentMousePosition().y());
+    QPoint contentsPos = frame->view()->windowToContents(pos);
+    Node* node = frame->document()->elementFromPoint(contentsPos.x(), contentsPos.y());
     if (!node)
         return false;
@@ -351,16 +350,27 @@
     bool scrolledVertical = false;
 
-    if (dx > 0)
-        scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx);
-    else if (dx < 0)
-        scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx));
-
-    if (dy > 0)
-        scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy);
-    else if (dy < 0)
-        scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy));
-
-    return (scrolledHorizontal || scrolledVertical);
-}
+    do {
+        if (dx > 0)
+            scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx);
+        else if (dx < 0)
+            scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx));
+
+        if (dy > 0)
+            scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy);
+        else if (dy < 0)
+            scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy));
+
+        if (scrolledHorizontal || scrolledVertical)
+            return true;
+
+        renderLayer = renderLayer->parent();
+    } while (renderLayer);
+
+    return false;
+}
+
+
+
+
 
 /*!
@@ -1048,46 +1058,39 @@
 
 /*!
-  \since 4.7
   \internal
   Scrolls nested frames starting at this frame, \a dx pixels to the right 
   and \a dy pixels downward. Both \a dx and \a dy may be negative. First attempts
-  to scroll elements with CSS overflow followed by this frame. If this 
+  to scroll elements with CSS overflow at position pos, followed by this frame. If this 
   frame doesn't scroll, attempts to scroll the parent
-
-  \sa QWebFrame::scroll
-*/
-bool QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy)
-{
-    Frame* frame = QWebFramePrivate::core(qFrame);
-    bool scrolledHorizontal = false;
-    bool scrolledVertical = false;
-    bool scrolledOverflow = webframe_scrollOverflow(frame, dx, dy);
-
-    if (!scrolledOverflow) {
-        if (!frame || !frame->view())
-            return false;
-
-        do {
-            IntSize scrollOffset = frame->view()->scrollOffset();
-            IntPoint maxScrollOffset = frame->view()->maximumScrollPosition();
-
-            if (dx > 0) // scroll right
-                scrolledHorizontal = scrollOffset.width() < maxScrollOffset.x();
-            else if (dx < 0) // scroll left
-                scrolledHorizontal = scrollOffset.width() > 0;
-
-            if (dy > 0) // scroll down
-                scrolledVertical = scrollOffset.height() < maxScrollOffset.y();
-            else if (dy < 0) //scroll up
-                scrolledVertical = scrollOffset.height() > 0;
-
-            if (scrolledHorizontal || scrolledVertical) {
-                frame->view()->scrollBy(IntSize(dx, dy));
-                return true;
-            }
-            frame = frame->tree()->parent(); 
-        } while (frame && frame->view());
-    }
-    return (scrolledHorizontal || scrolledVertical || scrolledOverflow);
+*/
+void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
+{
+    if (!qFrame)
+        return;
+
+    if (qtwebkit_webframe_scrollOverflow(qFrame, dx, dy, pos))
+        return;
+
+    bool scrollHorizontal = false;
+    bool scrollVertical = false;
+
+    do {
+        if (dx > 0)  // scroll right
+            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) < qFrame->scrollBarMaximum(Qt::Horizontal);
+        else if (dx < 0)  // scroll left
+            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) > qFrame->scrollBarMinimum(Qt::Horizontal);
+
+        if (dy > 0)  // scroll down
+            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) < qFrame->scrollBarMaximum(Qt::Vertical);
+        else if (dy < 0) //scroll up
+            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) > qFrame->scrollBarMinimum(Qt::Vertical);
+
+        if (scrollHorizontal || scrollVertical) {
+            qFrame->scroll(dx, dy);
+            return;
+        }
+
+        qFrame = qFrame->parentFrame();
+    } while (qFrame);
 }
 
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h	(revision 769)
@@ -18,5 +18,5 @@
 */
 
-#include <qstring.h>
+#include <QtCore/qstring.h>
 
 #ifndef qwebkitversion_h
Index: /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp	(revision 769)
@@ -1249,6 +1249,6 @@
         case QInputMethodEvent::Selection: {
             if (renderTextControl) {
-                renderTextControl->setSelectionStart(a.start);
-                renderTextControl->setSelectionEnd(a.start + a.length);
+                renderTextControl->setSelectionStart(qMin(a.start, (a.start + a.length)));
+                renderTextControl->setSelectionEnd(qMax(a.start, (a.start + a.length)));
             }
             break;
@@ -3072,4 +3072,6 @@
 
     "Mozilla/5.0 (%Platform%; %Security%; %Subplatform%; %Locale%) AppleWebKit/%WebKitVersion% (KHTML, like Gecko) %AppVersion Safari/%WebKitVersion%"
+    
+    On mobile platforms such as Symbian S60 and Maemo, "Mobile Safari" is used instead of "Safari".
 
     In this string the following values are replaced at run-time:
@@ -3098,5 +3100,5 @@
     "X11"
 #elif defined Q_OS_SYMBIAN
-    "SymbianOS"
+    "Symbian"
 #else
     "Unknown"
@@ -3165,5 +3167,5 @@
     "DEC Ultrix"
 #elif defined Q_WS_S60
-    "Series60"
+    ""
 #elif defined Q_OS_UNIX
     "UNIX BSD/SYSV system"
@@ -3182,14 +3184,23 @@
     switch (symbianVersion) {
     case QSysInfo::SV_9_2:
-        osVer = "/9.2";
+        osVer = "OS/9.2";
         break;
     case QSysInfo::SV_9_3:
-        osVer = "/9.3";
+        osVer = "OS/9.3";
         break;
     case QSysInfo::SV_9_4:
-        osVer = "/9.4";
+        osVer = "OS/9.4";
+        break;
+    case QSysInfo::SV_SF_2:
+        osVer = "/2";
+        break;
+    case QSysInfo::SV_SF_3:
+        osVer = "/3";
+        break;
+    case QSysInfo::SV_SF_4:
+        osVer = "/4";
         break;
     default: 
-        osVer = "Unknown";
+        osVer = "";
     }
 #endif
@@ -3260,18 +3271,18 @@
     // SubPlatform Version
     QString subPlatformVer;
-#ifdef Q_OS_SYMBIAN
+#ifdef Q_WS_S60
     QSysInfo::S60Version s60Version = QSysInfo::s60Version();
     switch (s60Version) {
     case QSysInfo::SV_S60_3_1:
-        subPlatformVer = "/3.1";
+        subPlatformVer = "Series60/3.1";
         break;
     case QSysInfo::SV_S60_3_2:
-        subPlatformVer = "/3.2";
+        subPlatformVer = "Series60/3.2";
         break;
     case QSysInfo::SV_S60_5_0:
-        subPlatformVer = "/5.0";
+        subPlatformVer = "Series60/5.0";
         break;
     default: 
-        subPlatformVer = " Unknown";
+        subPlatformVer = "";
     }
 #endif
@@ -3283,5 +3294,5 @@
         locale = view()->locale();
     QString name = locale.name();
-    name[2] = QLatin1Char('-');
+    name.replace(QLatin1Char('_'), QLatin1Char('-'));
     ua.append(name);
     ua.append(QLatin1String(") "));
@@ -3306,6 +3317,11 @@
     }
 
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
+    ua.append(QString(QLatin1String(" Mobile Safari/%1"))
+                      .arg(qWebKitVersion()));
+#else
     ua.append(QString(QLatin1String(" Safari/%1"))
                       .arg(qWebKitVersion()));
+#endif
 
     return ua;
Index: /trunk/src/3rdparty/webkit/WebKit/qt/ChangeLog
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/ChangeLog	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/ChangeLog	(revision 769)
@@ -1,2 +1,174 @@
+2010-05-19  Denis Dzyubenko <denis.dzyubenko@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        When creating the UA, do not sassmue the language code is a
+        two-letter iso639-1 code.
+
+        * Api/qwebpage.cpp:
+        (QWebPage::userAgentForUrl):
+
+2010-05-12  Joe Ligman  <joseph.ligman@nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Qt] Nested overflow div does not scroll
+        https://bugs.webkit.org/show_bug.cgi?id=38641
+
+        Modify qtwebkit_webframe_scrollOverflow, if the current node's render layer
+        does not scroll it will try and scroll the parent's render layer. Also export
+        qtwebkit_webframe_scrollOverflow so we can use it independently of
+        qtwebkit_webframe_scrollRecursively
+
+        * Api/qwebframe.cpp:
+        (qtwebkit_webframe_scrollOverflow):
+        (qtwebkit_webframe_scrollRecursively):
+
+2010-04-26  Thiago Macieira  <thiago.macieira@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Fix the include header <qstring.h> -> <QtCore/qstring.h>
+
+        The module/header.h style inclusion removes the need to have -I$QTDIR/include/depending-module
+        in the include search path for the application.
+
+        * Api/qwebkitversion.h:
+
+2010-04-08  Joe Ligman  <joseph.ligman@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] qtwebkit_webframe_scrollRecursively scrolls when body.style.overflow="hidden"
+        https://bugs.webkit.org/show_bug.cgi?id=36674
+
+        The scrolling check was based on the frameview's scrolloffset, and
+        maximumScrollPosition, which does not acknowledge the overflow properties.
+
+        I am now basing the scrolling off the scrollbar position. The scrollbars are
+        affected by the overflow properties indicating when not to scroll. The scrollbar
+        positions also continue to work for CSS ::-webkit-scrollbar styles.
+
+        * Api/qwebframe.cpp:
+        (qtwebkit_webframe_scrollRecursively):
+
+2010-03-24  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        Auto-uppercase and predictive text need to be disabled for S60 (as for maemo)
+        https://bugs.webkit.org/show_bug.cgi?id=33176
+
+        * WebCoreSupport/EditorClientQt.cpp:
+
+2010-03-22  Jakub Wieczorek  <jwieczorek@webkit.org>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Don't construct a QLineEdit every time when painting a text field
+        https://bugs.webkit.org/show_bug.cgi?id=36373
+
+        Add a simple benchmark covering this area.
+
+        * tests/benchmarks/painting/tst_painting.cpp:
+        (tst_Painting::textAreas):
+
+2010-03-22  Yi Shen  <shenyi2006@gmail.com>
+
+        Reviewed by Simon Hausmann.
+
+        https://bugs.webkit.org/show_bug.cgi?id=35933  
+        [Qt] [Symbian] Can not backward select (highlight) text using virtual keyboard
+        Make sure the selection start index is smaller than the selection end index.
+
+        * Api/qwebpage.cpp:
+        (QWebPagePrivate::inputMethodEvent):
+        * tests/qwebpage/tst_qwebpage.cpp:
+        (tst_QWebPage::inputMethods):
+
+2010-03-25  Yael Aharon  <yael.aharon@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] QtLauncher crashes on Mac OS and Linux when exiting with QGraphicsView mode enabled
+        https://bugs.webkit.org/show_bug.cgi?id=35251
+
+        Followed the way QWebView registers for the signal QWebPage::destroyed(), to prevent
+        QGraphicsWebView from referencing QWebPage after it was deleted.        
+
+        * Api/qgraphicswebview.cpp:
+        (QGraphicsWebViewPrivate::_q_pageDestroyed):
+        (QGraphicsWebView::setPage):
+        * Api/qgraphicswebview.h:
+
+2010-03-23  David Leong  <david.leong@nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        Build fix for Symbian Def file.
+
+        * symbian/eabi/QtWebKitu.def:
+
+2010-03-18  Joe Ligman  <joseph.ligman@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] New API scrollRecursively has several problems.
+        https://bugs.webkit.org/show_bug.cgi?id=35873
+
+        Remove scrollRecursively from the Qt 4.7 API
+        Update the internal API to accept a hit test position 
+        for nested scrolling
+
+        * Api/qwebframe.cpp:
+        (webframe_scrollOverflow):
+        (qtwebkit_webframe_scrollRecursively):
+        * Api/qwebframe.h:
+        * Api/qwebframe_p.h:
+        * tests/qwebframe/tst_qwebframe.cpp:
+
+2009-12-18  Joe Ligman  <joseph.ligman@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] Add new API to QWebFrame to scrollRecursively starting with any css overflow 
+        then checking current frame and then ancestors
+        https://bugs.webkit.org/show_bug.cgi?id=32668
+
+        * Api/qwebframe.cpp:
+        (QWebFramePrivate::scrollOverflow):
+        (QWebFrame::scrollRecursively):
+        * Api/qwebframe.h:
+        * Api/qwebframe_p.h:
+        * tests/qwebframe/qwebframe.qrc:
+        * tests/qwebframe/testiframe.html: Added.
+        * tests/qwebframe/testiframe2.html: Added.
+        * tests/qwebframe/tst_qwebframe.cpp:
+
+2010-03-21  Kristian Amlie  <kristian.amlie@nokia.com>
+
+        Reviewed by Simon Hausmann.
+
+        Fixed updating the VKB display when inputting into QGraphicsWebView.
+        https://bugs.webkit.org/show_bug.cgi?id=36292
+
+        * Api/qgraphicswebview.cpp:
+        (QGraphicsWebViewPrivate::_q_updateMicroFocus):
+        (QGraphicsWebView::setPage):
+        * Api/qgraphicswebview.h:
+
+2010-03-04  Simon Hausmann  <simon.hausmann@nokia.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [Qt] qwebelement.h does not include QtCore headers correctly
+        https://bugs.webkit.org/show_bug.cgi?id=35748
+
+        The header files of QtCore must be included as QtCore/foo.h.
+
+        See also http://bugreports.qt.nokia.com/browse/QTBUG-8661
+
+        * Api/qwebelement.h:
+
 2010-01-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>
 
Index: /trunk/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp	(revision 769)
@@ -616,9 +616,9 @@
         }
         webPageClient->setInputMethodHint(Qt::ImhHiddenText, isPasswordField);
-#ifdef Q_WS_MAEMO_5
-        // Maemo 5 MicroB Browser disables auto-uppercase and predictive text, thus, so do we.
+#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
+        // disables auto-uppercase and predictive text for mobile devices
         webPageClient->setInputMethodHint(Qt::ImhNoAutoUppercase, true);
         webPageClient->setInputMethodHint(Qt::ImhNoPredictiveText, true);
-#endif // Q_WS_MAEMO_5
+#endif // Q_WS_MAEMO_5 || Q_OS_SYMBIAN
 #endif // QT_VERSION check
         webPageClient->setInputMethodEnabled(active);
Index: /trunk/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def	(revision 769)
@@ -624,4 +624,30 @@
 	?qt_resumeActiveDOMObjects@@YAXPAVQWebFrame@@@Z @ 623 NONAME ; void qt_resumeActiveDOMObjects(class QWebFrame *)
 	?qt_suspendActiveDOMObjects@@YAXPAVQWebFrame@@@Z @ 624 NONAME ; void qt_suspendActiveDOMObjects(class QWebFrame *)
-	?qtwebkit_webframe_scrollRecursively@@YA_NPAVQWebFrame@@HH@Z @ 625 NONAME ; bool qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int)
+	?qtwebkit_webframe_scrollRecursively@@YA_NPAVQWebFrame@@HH@Z @ 625 NONAME ABSENT ; bool qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int)
+	?closeEvent@QWebInspector@@MAEXPAVQCloseEvent@@@Z @ 626 NONAME ABSENT ; void QWebInspector::closeEvent(class QCloseEvent *)
+	?inspectorUrl@QWebSettings@@QBE?AVQUrl@@XZ @ 627 NONAME ABSENT ; class QUrl QWebSettings::inspectorUrl(void) const
+	?isTiledBackingStoreFrozen@QGraphicsWebView@@QBE_NXZ @ 628 NONAME ABSENT ; bool QGraphicsWebView::isTiledBackingStoreFrozen(void) const
+	?pageChanged@QWebFrame@@IAEXXZ @ 629 NONAME ABSENT ; void QWebFrame::pageChanged(void)
+	?qt_drt_enableCaretBrowsing@@YAXPAVQWebPage@@_N@Z @ 630 NONAME ABSENT ; void qt_drt_enableCaretBrowsing(class QWebPage *, bool)
+	?qt_drt_evaluateScriptInIsolatedWorld@@YAXPAVQWebFrame@@HABVQString@@@Z @ 631 NONAME ABSENT ; void qt_drt_evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &)
+	?qt_drt_hasDocumentElement@@YA_NPAVQWebFrame@@@Z @ 632 NONAME ABSENT ; bool qt_drt_hasDocumentElement(class QWebFrame *)
+	?qt_drt_numberOfPages@@YAHPAVQWebFrame@@MM@Z @ 633 NONAME ABSENT ; int qt_drt_numberOfPages(class QWebFrame *, float, float)
+	?qt_drt_pageNumberForElementById@@YAHPAVQWebFrame@@ABVQString@@MM@Z @ 634 NONAME ABSENT ; int qt_drt_pageNumberForElementById(class QWebFrame *, class QString const &, float, float)
+	?qt_drt_pauseSVGAnimation@@YA_NPAVQWebFrame@@ABVQString@@N1@Z @ 635 NONAME ABSENT ; bool qt_drt_pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &)
+	?qt_drt_setDomainRelaxationForbiddenForURLScheme@@YAX_NABVQString@@@Z @ 636 NONAME ABSENT ; void qt_drt_setDomainRelaxationForbiddenForURLScheme(bool, class QString const &)
+	?qt_drt_setFrameFlatteningEnabled@@YAXPAVQWebPage@@_N@Z @ 637 NONAME ABSENT ; void qt_drt_setFrameFlatteningEnabled(class QWebPage *, bool)
+	?qt_drt_setMediaType@@YAXPAVQWebFrame@@ABVQString@@@Z @ 638 NONAME ABSENT ; void qt_drt_setMediaType(class QWebFrame *, class QString const &)
+	?qt_drt_setTimelineProfilingEnabled@@YAXPAVQWebPage@@_N@Z @ 639 NONAME ABSENT ; void qt_drt_setTimelineProfilingEnabled(class QWebPage *, bool)
+	?qt_drt_webinspector_close@@YAXPAVQWebPage@@@Z @ 640 NONAME ABSENT ; void qt_drt_webinspector_close(class QWebPage *)
+	?qt_drt_webinspector_executeScript@@YAXPAVQWebPage@@JABVQString@@@Z @ 641 NONAME ABSENT ; void qt_drt_webinspector_executeScript(class QWebPage *, long, class QString const &)
+	?qt_drt_webinspector_show@@YAXPAVQWebPage@@@Z @ 642 NONAME ABSENT ; void qt_drt_webinspector_show(class QWebPage *)
+	?qt_drt_workerThreadCount@@YAHXZ @ 643 NONAME ABSENT ; int qt_drt_workerThreadCount(void)
+	?qt_wrt_setViewMode@@YAXPAVQWebPage@@ABVQString@@@Z @ 644 NONAME ABSENT ; void qt_wrt_setViewMode(class QWebPage *, class QString const &)
+	?qtwebkit_webframe_scrollRecursively@@YAXPAVQWebFrame@@HHABVQPoint@@@Z @ 645 NONAME ; void qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int, class QPoint const &)
+	?resizesToContents@QGraphicsWebView@@QBE_NXZ @ 646 NONAME ABSENT ; bool QGraphicsWebView::resizesToContents(void) const
+	?scrollToAnchor@QWebFrame@@QAEXABVQString@@@Z @ 647 NONAME ABSENT ; void QWebFrame::scrollToAnchor(class QString const &)
+	?setInspectorUrl@QWebSettings@@QAEXABVQUrl@@@Z @ 648 NONAME ABSENT ; void QWebSettings::setInspectorUrl(class QUrl const &)
+	?setResizesToContents@QGraphicsWebView@@QAEX_N@Z @ 649 NONAME ABSENT ; void QGraphicsWebView::setResizesToContents(bool)
+	?setTiledBackingStoreFrozen@QGraphicsWebView@@QAEX_N@Z @ 650 NONAME ABSENT ; void QGraphicsWebView::setTiledBackingStoreFrozen(bool)
+	?qtwebkit_webframe_scrollOverflow@@YA_NPAVQWebFrame@@HHABVQPoint@@@Z @ 651 NONAME ABSENT ; bool qtwebkit_webframe_scrollOverflow(QWebFrame *, int, int, const QPoint&)
 
Index: /trunk/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def	(revision 769)
@@ -694,4 +694,79 @@
 	_Z25qt_resumeActiveDOMObjectsP9QWebFrame @ 693 NONAME
 	_Z26qt_suspendActiveDOMObjectsP9QWebFrame @ 694 NONAME
-	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME
-
+	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME ABSENT
+	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameiiRK6QPoint @ 696 NONAME
+	_ZN9QWebFrame17scrollRecursivelyEii @ 697 NONAME ABSENT
+	_ZN16QGraphicsWebView20setResizesToContentsEb @ 698 NONAME ABSENT
+	_ZNK16QGraphicsWebView17resizesToContentsEv @ 699 NONAME ABSENT
+	_Z20qt_drt_numberOfPagesP9QWebFrameff @ 700 NONAME ABSENT
+	_Z24qt_drt_pauseSVGAnimationP9QWebFrameRK7QStringdS3_ @ 701 NONAME ABSENT
+	_Z24qt_drt_webinspector_showP8QWebPage @ 702 NONAME ABSENT
+	_Z24qt_drt_workerThreadCountv @ 703 NONAME ABSENT
+	_Z25qt_drt_hasDocumentElementP9QWebFrame @ 704 NONAME ABSENT
+	_Z25qt_drt_webinspector_closeP8QWebPage @ 705 NONAME ABSENT
+	_Z31qt_drt_pageNumberForElementByIdP9QWebFrameRK7QStringff @ 706 NONAME ABSENT
+	_Z33qt_drt_webinspector_executeScriptP8QWebPagelRK7QString @ 707 NONAME ABSENT
+	_Z34qt_drt_setTimelineProfilingEnabledP8QWebPageb @ 708 NONAME ABSENT
+	_Z32qt_drt_setFrameFlatteningEnabledP8QWebPageb @ 709 NONAME ABSENT
+	_Z36qt_drt_evaluateScriptInIsolatedWorldP9QWebFrameiRK7QString @ 710 NONAME ABSENT
+	_Z47qt_drt_setDomainRelaxationForbiddenForURLSchemebRK7QString @ 711 NONAME ABSENT
+	_ZN9QWebFrame11pageChangedEv @ 712 NONAME ABSENT
+	_ZN9QWebFrame14scrollToAnchorERK7QString @ 713 NONAME ABSENT
+	_ZN12QWebSettings15setInspectorUrlERK4QUrl @ 714 NONAME ABSENT
+	_ZN13QWebInspector10closeEventEP11QCloseEvent @ 715 NONAME ABSENT
+	_ZN16QGraphicsWebView26setTiledBackingStoreFrozenEb @ 716 NONAME ABSENT
+	_ZNK16QGraphicsWebView25isTiledBackingStoreFrozenEv @ 717 NONAME ABSENT
+	_Z18qt_wrt_setViewModeP8QWebPageRK7QString @ 718 NONAME ABSENT
+	_Z19qt_drt_setMediaTypeP9QWebFrameRK7QString @ 719 NONAME ABSENT
+	_Z26qt_drt_enableCaretBrowsingP8QWebPageb @ 720 NONAME ABSENT
+	_ZNK12QWebSettings12inspectorUrlEv @ 721 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt19webPageSetGroupNameEP8QWebPageRK7QString @ 722 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt16webPageGroupNameEP8QWebPage @ 723 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt23garbageCollectorCollectEv @ 724 NONAME ABSENT
+	_Z32qtwebkit_webframe_scrollOverflowP9QWebFrameiiRK6QPoint @ 725 NONAME
+	_ZN23DumpRenderTreeSupportQt12setMediaTypeEP9QWebFrameRK7QString @ 726 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt13numberOfPagesEP9QWebFrameff @ 727 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt13selectedRangeEP8QWebPage @ 728 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt14clearFrameNameEP9QWebFrame @ 729 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt14pauseAnimationEP9QWebFrameRK7QStringdS4_ @ 730 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt15dumpFrameLoaderEb @ 731 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt16dumpNotificationEb @ 732 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt16isCommandEnabledEP8QWebPageRK7QString @ 733 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt16webInspectorShowEP8QWebPage @ 734 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt17pauseSVGAnimationEP9QWebFrameRK7QStringdS4_ @ 735 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt17webInspectorCloseEP8QWebPage @ 736 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt17workerThreadCountEv @ 737 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt18hasDocumentElementEP9QWebFrame @ 738 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt20dumpEditingCallbacksEb @ 739 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt21markerTextForListItemERK11QWebElement @ 740 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt22javaScriptObjectsCountEv @ 741 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt23setCaretBrowsingEnabledEP8QWebPageb @ 742 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt24executeCoreCommandByNameEP8QWebPageRK7QStringS4_ @ 743 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt21dumpSetAcceptsEditingEb @744 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt22resumeActiveDOMObjectsEP9QWebFrame @745 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt23suspendActiveDOMObjectsEP9QWebFrame @746 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt24numberOfActiveAnimationsEP9QWebFrame @747 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt24pageNumberForElementByIdEP9QWebFrameRK7QStringff @748 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt25dumpResourceLoadCallbacksEb @749 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt25pauseTransitionOfPropertyEP9QWebFrameRK7QStringdS4_ @750 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt25setFrameFlatteningEnabledEP8QWebPageb @751 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt25webInspectorExecuteScriptEP8QWebPagelRK7QString @752 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt25whiteListAccessFromOriginERK7QStringS2_S2_b @753 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt26counterValueForElementByIdEP9QWebFrameRK7QString @754 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt26firstRectForCharacterRangeEP8QWebPageii @755 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt26overwritePluginDirectoriesEv @756 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt27resetOriginAccessWhiteListsEv @757 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt27setSmartInsertDeleteEnabledEP8QWebPageb @758 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt27setTimelineProfilingEnabledEP8QWebPageb @759 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt28setDumpRenderTreeModeEnabledEb @760 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt29dumpResourceLoadCallbacksPathERK7QString @761 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt29evaluateScriptInIsolatedWorldEP9QWebFrameiRK7QString @762 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt29setJavaScriptProfilingEnabledEP9QWebFrameb @763 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt29setWillSendRequestReturnsNullEb @764 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt30setWillSendRequestClearHeadersERK11QStringList @765 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt33computedStyleIncludingVisitedInfoERK11QWebElement @766 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt34setSelectTrailingWhitespaceEnabledEP8QWebPageb @767 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt39elementDoesAutoCompleteForElementWithIdEP9QWebFrameRK7QString @768 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt39setWillSendRequestReturnsNullOnRedirectEb @769 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt40garbageCollectorCollectOnAlternateThreadEb @770 NONAME ABSENT
+	_ZN23DumpRenderTreeSupportQt40setDomainRelaxationForbiddenForURLSchemeEbRK7QString @771 NONAME ABSENT
Index: /trunk/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp	(revision 769)
@@ -20,4 +20,5 @@
 #include <QtTest/QtTest>
 
+#include <qwebelement.h>
 #include <qwebframe.h>
 #include <qwebview.h>
@@ -60,4 +61,5 @@
     void paint_data();
     void paint();
+    void textAreas();
 
 private:
@@ -106,4 +108,29 @@
 }
 
+void tst_Painting::textAreas()
+{
+    m_view->load(QUrl("data:text/html;<html><body></body></html>"));
+    ::waitForSignal(m_view, SIGNAL(loadFinished(bool)));
+
+    QWebElement bodyElement = m_page->mainFrame()->findFirstElement("body");
+
+    int count = 100;
+    while (count--) {
+        QString markup("<textarea cols='1' rows='1'></textarea>");
+        bodyElement.appendInside(markup);
+    }
+
+    /* force a layout */
+    QWebFrame* mainFrame = m_page->mainFrame();
+    mainFrame->toPlainText();
+
+    QPixmap pixmap(mainFrame->contentsSize());
+    QBENCHMARK {
+        QPainter painter(&pixmap);
+        mainFrame->render(&painter, QRect(QPoint(0, 0), mainFrame->contentsSize()));
+        painter.end();
+    }
+}
+
 QTEST_MAIN(tst_Painting)
 #include "tst_painting.moc"
Index: /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp	(revision 769)
@@ -607,5 +607,4 @@
     void evaluateWillCauseRepaint();
     void qObjectWrapperWithSameIdentity();
-    void scrollRecursively();
 
 private:
@@ -2826,70 +2825,4 @@
 }
 
-bool QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy);
-
-void tst_QWebFrame::scrollRecursively()
-{
-    // The test content is 
-    // a nested frame set
-    // The main frame scrolls
-    // and has two children
-    // an iframe and a div overflow
-    // both scroll
-    QWebView webView;
-    QWebPage* webPage = webView.page();
-    QSignalSpy loadSpy(webPage, SIGNAL(loadFinished(bool)));
-    QUrl url = QUrl("qrc:///testiframe.html");
-    webPage->mainFrame()->load(url);
-    QTRY_COMPARE(loadSpy.count(), 1);
-
-    QList<QWebFrame*> children =  webPage->mainFrame()->childFrames();
-    QVERIFY(children.count() == 1);
-
-    // 1st test
-    // call scrollRecursively over mainframe
-    // verify scrolled
-    // verify scroll postion changed
-    QPoint scrollPosition(webPage->mainFrame()->scrollPosition());
-    QVERIFY(qtwebkit_webframe_scrollRecursively(webPage->mainFrame(), 10, 10));
-    QVERIFY(scrollPosition != webPage->mainFrame()->scrollPosition());
-
-    // 2nd test
-    // call scrollRecursively over child iframe
-    // verify scrolled
-    // verify child scroll position changed
-    // verify parent's scroll position did not change
-    scrollPosition = webPage->mainFrame()->scrollPosition();
-    QPoint childScrollPosition = children.at(0)->scrollPosition();
-    QVERIFY(qtwebkit_webframe_scrollRecursively(children.at(0), 10, 10));
-    QVERIFY(scrollPosition == webPage->mainFrame()->scrollPosition());
-    QVERIFY(childScrollPosition != children.at(0)->scrollPosition());
-
-    // 3rd test
-    // call scrollRecursively over div overflow
-    // verify scrolled == true
-    // verify parent and child frame's scroll postion did not change
-    QWebElement div = webPage->mainFrame()->documentElement().findFirst("#content1");
-    QMouseEvent evpres(QEvent::MouseMove, div.geometry().center(), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
-    webPage->event(&evpres);
-    scrollPosition = webPage->mainFrame()->scrollPosition();
-    childScrollPosition = children.at(0)->scrollPosition();
-    QVERIFY(qtwebkit_webframe_scrollRecursively(webPage->mainFrame(), 5, 5));
-    QVERIFY(childScrollPosition == children.at(0)->scrollPosition());
-    QVERIFY(scrollPosition == webPage->mainFrame()->scrollPosition());
-
-    // 4th test
-    // call scrollRecursively twice over childs iframe
-    // verify scrolled == true first time
-    // verify parent's scroll == true second time
-    // verify parent and childs scroll position changed
-    childScrollPosition = children.at(0)->scrollPosition();
-    QVERIFY(qtwebkit_webframe_scrollRecursively(children.at(0), -10, -10));
-    QVERIFY(childScrollPosition != children.at(0)->scrollPosition());
-    scrollPosition = webPage->mainFrame()->scrollPosition();
-    QVERIFY(qtwebkit_webframe_scrollRecursively(children.at(0), -10, -10));
-    QVERIFY(scrollPosition != webPage->mainFrame()->scrollPosition());
-
-}
-
 QTEST_MAIN(tst_QWebFrame)
 #include "tst_qwebframe.moc"
Index: /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
===================================================================
--- /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp	(revision 768)
+++ /trunk/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp	(revision 769)
@@ -1452,4 +1452,24 @@
     QString selectionValue = variant.value<QString>();
     QCOMPARE(selectionValue, QString("eb"));
+
+    //Set selection with negative length
+    inputAttributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 6, -5, QVariant());
+    QInputMethodEvent eventSelection2("",inputAttributes);
+    page->event(&eventSelection2);
+
+    //ImAnchorPosition
+    variant = page->inputMethodQuery(Qt::ImAnchorPosition);
+    anchorPosition =  variant.toInt();
+    QCOMPARE(anchorPosition, 1);
+
+    //ImCursorPosition
+    variant = page->inputMethodQuery(Qt::ImCursorPosition);
+    cursorPosition =  variant.toInt();
+    QCOMPARE(cursorPosition, 6);
+
+    //ImCurrentSelection
+    variant = page->inputMethodQuery(Qt::ImCurrentSelection);
+    selectionValue = variant.value<QString>();
+    QCOMPARE(selectionValue, QString("tWebK"));
 #endif
 
Index: /trunk/src/activeqt/container/qaxwidget.cpp
===================================================================
--- /trunk/src/activeqt/container/qaxwidget.cpp	(revision 768)
+++ /trunk/src/activeqt/container/qaxwidget.cpp	(revision 769)
@@ -1439,7 +1439,4 @@
 HRESULT WINAPI QAxClientSite::EnableModeless(BOOL fEnable)
 {
-#if !defined(Q_OS_WINCE)
-    LockWindowUpdate(host->window()->winId());
-#endif
     EnableWindow(host->window()->winId(), fEnable);
 
@@ -1452,7 +1449,4 @@
     }
     qt_win_ignoreNextMouseReleaseEvent = false;
-#if !defined(Q_OS_WINCE)
-    LockWindowUpdate(0);
-#endif
     return S_OK;
 }
Index: /trunk/src/corelib/animation/qanimationgroup.cpp
===================================================================
--- /trunk/src/corelib/animation/qanimationgroup.cpp	(revision 768)
+++ /trunk/src/corelib/animation/qanimationgroup.cpp	(revision 769)
@@ -245,5 +245,5 @@
     d->animations.removeAt(index);
     animation->setParent(0);
-    d->animationRemovedAt(index);
+    d->animationRemoved(index, animation);
     return animation;
 }
@@ -286,5 +286,5 @@
 
 
-void QAnimationGroupPrivate::animationRemovedAt(int index)
+void QAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *)
 {
     Q_Q(QAnimationGroup);
Index: /trunk/src/corelib/animation/qanimationgroup_p.h
===================================================================
--- /trunk/src/corelib/animation/qanimationgroup_p.h	(revision 768)
+++ /trunk/src/corelib/animation/qanimationgroup_p.h	(revision 769)
@@ -73,6 +73,17 @@
     }
 
-    virtual void animationInsertedAt(int index) { Q_UNUSED(index) };
-    virtual void animationRemovedAt(int index);
+    virtual void animationInsertedAt(int) { }
+    virtual void animationRemoved(int, QAbstractAnimation *);
+
+    void disconnectUncontrolledAnimation(QAbstractAnimation *anim)
+    {
+        //0 for the signal here because we might be called from the animation destructor
+        QObject::disconnect(anim, 0, q_func(), SLOT(_q_uncontrolledAnimationFinished()));
+    }
+
+    void connectUncontrolledAnimation(QAbstractAnimation *anim)
+    {
+        QObject::connect(anim, SIGNAL(finished()), q_func(), SLOT(_q_uncontrolledAnimationFinished()));
+    }
 
     QList<QAbstractAnimation *> animations;
Index: /trunk/src/corelib/animation/qparallelanimationgroup.cpp
===================================================================
--- /trunk/src/corelib/animation/qparallelanimationgroup.cpp	(revision 768)
+++ /trunk/src/corelib/animation/qparallelanimationgroup.cpp	(revision 769)
@@ -247,9 +247,7 @@
 void QParallelAnimationGroupPrivate::disconnectUncontrolledAnimations()
 {
-    Q_Q(QParallelAnimationGroup);
-
     QHash<QAbstractAnimation *, int>::iterator it = uncontrolledFinishTime.begin();
     while (it != uncontrolledFinishTime.end()) {
-        QObject::disconnect(it.key(), SIGNAL(finished()), q, SLOT(_q_uncontrolledAnimationFinished()));
+        disconnectUncontrolledAnimation(it.key());
         ++it;
     }
@@ -260,11 +258,9 @@
 void QParallelAnimationGroupPrivate::connectUncontrolledAnimations()
 {
-    Q_Q(QParallelAnimationGroup);
-
     for (int i = 0; i < animations.size(); ++i) {
         QAbstractAnimation *animation = animations.at(i);
         if (animation->duration() == -1 || animation->loopCount() < 0) {
             uncontrolledFinishTime[animation] = -1;
-            QObject::connect(animation, SIGNAL(finished()), q, SLOT(_q_uncontrolledAnimationFinished()));
+            connectUncontrolledAnimation(animation);
         }
     }
@@ -306,4 +302,11 @@
 }
 
+void QParallelAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *anim)
+{
+    QAnimationGroupPrivate::animationRemoved(index, anim);
+    disconnectUncontrolledAnimation(anim);
+    uncontrolledFinishTime.remove(anim);
+}
+
 /*!
     \reimp
Index: /trunk/src/corelib/animation/qparallelanimationgroup_p.h
===================================================================
--- /trunk/src/corelib/animation/qparallelanimationgroup_p.h	(revision 768)
+++ /trunk/src/corelib/animation/qparallelanimationgroup_p.h	(revision 769)
@@ -81,4 +81,6 @@
     void disconnectUncontrolledAnimations();
 
+    void animationRemoved(int index, QAbstractAnimation *);
+
     // private slot
     void _q_uncontrolledAnimationFinished();
Index: /trunk/src/corelib/animation/qsequentialanimationgroup.cpp
===================================================================
--- /trunk/src/corelib/animation/qsequentialanimationgroup.cpp	(revision 768)
+++ /trunk/src/corelib/animation/qsequentialanimationgroup.cpp	(revision 769)
@@ -480,5 +480,5 @@
     // connects to the finish signal of uncontrolled animations
     if (currentAnimation->totalDuration() == -1)
-        QObject::connect(currentAnimation, SIGNAL(finished()), q, SLOT(_q_uncontrolledAnimationFinished()));
+        connectUncontrolledAnimation(currentAnimation);
 
     currentAnimation->start();
@@ -497,5 +497,5 @@
     actualDuration[currentAnimationIndex] = currentAnimation->currentTime();
 
-    QObject::disconnect(currentAnimation, SIGNAL(finished()), q, SLOT(_q_uncontrolledAnimationFinished()));
+    disconnectUncontrolledAnimation(currentAnimation);
 
     if ((direction == QAbstractAnimation::Forward && currentAnimation == animations.last())
@@ -544,8 +544,8 @@
     method is called.
 */
-void QSequentialAnimationGroupPrivate::animationRemovedAt(int index)
+void QSequentialAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *anim)
 {
     Q_Q(QSequentialAnimationGroup);
-    QAnimationGroupPrivate::animationRemovedAt(index);
+    QAnimationGroupPrivate::animationRemoved(index, anim);
 
     Q_ASSERT(currentAnimation); // currentAnimation should always be set
@@ -556,5 +556,8 @@
     const int currentIndex = animations.indexOf(currentAnimation);
     if (currentIndex == -1) {
-        //we're removing the current animation, let's update it to another one
+        //we're removing the current animation
+
+        disconnectUncontrolledAnimation(currentAnimation);
+
         if (index < animations.count())
             setCurrentAnimation(index); //let's try to take the next one
Index: /trunk/src/corelib/animation/qsequentialanimationgroup_p.h
===================================================================
--- /trunk/src/corelib/animation/qsequentialanimationgroup_p.h	(revision 768)
+++ /trunk/src/corelib/animation/qsequentialanimationgroup_p.h	(revision 769)
@@ -86,5 +86,5 @@
 
     void animationInsertedAt(int index);
-    void animationRemovedAt(int index);
+    void animationRemoved(int index, QAbstractAnimation *anim);
 
     bool atEnd() const;
Index: /trunk/src/corelib/arch/armv6/qatomic_generic_armv6.cpp
===================================================================
--- /trunk/src/corelib/arch/armv6/qatomic_generic_armv6.cpp	(revision 768)
+++ /trunk/src/corelib/arch/armv6/qatomic_generic_armv6.cpp	(revision 769)
@@ -47,4 +47,5 @@
 
 #ifdef QT_HAVE_ARMV6
+#ifndef SYMBIAN_E32_ATOMIC_API
 
 QT_BEGIN_NAMESPACE
@@ -55,4 +56,22 @@
 #pragma push
 #pragma arm
+Q_CORE_EXPORT asm
+bool QBasicAtomicInt_testAndSetRelaxed(volatile int *_q_value, int expectedValue, int newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+bool QBasicAtomicInt_testAndSetAcquire(volatile int *_q_value, int expectedValue, int newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+bool QBasicAtomicInt_testAndSetRelease(volatile int *_q_value, int expectedValue, int newValue)
+{
+    CODE32
+    //fall through
+}
 Q_CORE_EXPORT asm
 bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue)
@@ -74,4 +93,22 @@
 
 Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndStoreRelaxed(volatile int *_q_value, int newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndStoreAcquire(volatile int *_q_value, int newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndStoreRelease(volatile int *_q_value, int newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
 int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue)
 {
@@ -88,4 +125,22 @@
 }
 
+Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndAddRelaxed(volatile int *_q_value, int valueToAdd)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndAddAcquire(volatile int *_q_value, int valueToAdd)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+int QBasicAtomicInt_fetchAndAddRelease(volatile int *_q_value, int valueToAdd)
+{
+    CODE32
+    //fall through
+}
 Q_CORE_EXPORT asm
 int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd)
@@ -105,4 +160,28 @@
 }
 
+Q_CORE_EXPORT asm
+bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+bool QBasicAtomicPointer_testAndSetRelease(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    CODE32
+    //fall through
+}
 Q_CORE_EXPORT asm
 bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value,
@@ -126,4 +205,22 @@
 
 Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *_q_value, void *newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *_q_value, void *newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *_q_value, void *newValue)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
 void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue)
 {
@@ -140,4 +237,22 @@
 }
 
+Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndAddRelease(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    CODE32
+    //fall through
+}
+Q_CORE_EXPORT asm
+void *QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    CODE32
+    //fall through
+}
 Q_CORE_EXPORT asm
 void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd)
@@ -159,4 +274,19 @@
 #pragma pop
 #elif defined (Q_CC_GCCE)
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicInt_testAndSetRelaxed(volatile int *_q_value, int expectedValue, int newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicInt_testAndSetAcquire(volatile int *_q_value, int expectedValue, int newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicInt_testAndSetRelease(volatile int *_q_value, int expectedValue, int newValue)
+{
+    //fall through
+}
 Q_CORE_EXPORT __declspec( naked )
 bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue)
@@ -177,4 +307,19 @@
 
 Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndStoreRelaxed(volatile int *_q_value, int newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndStoreAcquire(volatile int *_q_value, int newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndStoreRelease(volatile int *_q_value, int newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
 int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue)
 {
@@ -190,4 +335,19 @@
 }
 
+Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndAddRelaxed(volatile int *_q_value, int valueToAdd)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndAddAcquire(volatile int *_q_value, int valueToAdd)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+int QBasicAtomicInt_fetchAndAddRelease(volatile int *_q_value, int valueToAdd)
+{
+    //fall through
+}
 Q_CORE_EXPORT __declspec( naked )
 int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd)
@@ -206,4 +366,25 @@
 }
 
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicPointer_testAndSetRelease(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    //fall through
+}
 Q_CORE_EXPORT __declspec( naked )
 bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value,
@@ -226,4 +407,19 @@
 
 Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *_q_value, void *newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *_q_value, void *newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *_q_value, void *newValue)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
 void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue)
 {
@@ -239,4 +435,19 @@
 }
 
+Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndAddRelease(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    //fall through
+}
+Q_CORE_EXPORT __declspec( naked )
+void *QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    //fall through
+}
 Q_CORE_EXPORT __declspec( naked )
 void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd)
@@ -259,2 +470,3 @@
 QT_END_NAMESPACE
 #endif
+#endif
Index: /trunk/src/corelib/arch/qatomic_alpha.h
===================================================================
--- /trunk/src/corelib/arch/qatomic_alpha.h	(revision 768)
+++ /trunk/src/corelib/arch/qatomic_alpha.h	(revision 769)
@@ -368,5 +368,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("1:\n"
                  "ldq_l %0,%2\n"   /* old=*ptr;                               */
@@ -386,5 +386,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("1:\n"
                  "ldq_l %0,%2\n"   /* old=*ptr;                               */
@@ -405,5 +405,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("mb\n"
                  "1:\n"
@@ -424,5 +424,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("1:\n"
                  "ldq_l %0,%2\n"   /* old=*ptr;                               */
@@ -442,5 +442,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("1:\n"
                  "ldq_l %0,%2\n"   /* old=*ptr;                               */
@@ -461,5 +461,5 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
 {
-    register void *old, *tmp;
+    register T *old, *tmp;
     asm volatile("mb\n"
                  "1:\n"
Index: /trunk/src/corelib/arch/qatomic_s390.h
===================================================================
--- /trunk/src/corelib/arch/qatomic_s390.h	(revision 768)
+++ /trunk/src/corelib/arch/qatomic_s390.h	(revision 769)
@@ -367,9 +367,7 @@
 {
 #ifndef __s390x__
-    return (T*)__CS_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (int)newValue, "lr",
-                             "", "bcr 15,0\n");
-#else
-    return (T*)__CSG_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (long)newValue, "lgr",
-                              "", "bcr 15,0\n");
+    return (T*)__CS_OLD_LOOP(&_q_value, (int)newValue, "lr", "", "");
+#else
+    return (T*)__CSG_OLD_LOOP(&_q_value, (long)newValue, "lgr", "", "");
 #endif
 }
@@ -379,7 +377,7 @@
 {
 #ifndef __s390x__
-    return (T*)__CS_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (int)newValue, "lr", "", "");
-#else
-    return (T*)__CSG_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (long)newValue, "lgr", "", "");
+    return (T*)__CS_OLD_LOOP(&_q_value, (int)newValue, "lr", "", "bcr 15,0 \n");
+#else
+    return (T*)__CSG_OLD_LOOP(&_q_value, (long)newValue, "lgr", "", "bcr 15,0 \n");
 #endif
 }
@@ -389,9 +387,7 @@
 {
 #ifndef __s390x__
-    return (T*)__CS_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (int)newValue, "lr",
-                             "bcr 15,0 \n", "");
-#else
-    return (T*)__CSG_OLD_LOOP(reinterpret_cast<volatile long*>(_q_value), (long)newValue, "lgr",
-                              "bcr 15,0\n", "");
+    return (T*)__CS_OLD_LOOP(&_q_value, (int)newValue, "lr", "bcr 15,0 \n", "");
+#else
+    return (T*)__CSG_OLD_LOOP(&_q_value, (long)newValue, "lgr", "bcr 15,0\n", "");
 #endif
 }
Index: /trunk/src/corelib/arch/qatomic_symbian.h
===================================================================
--- /trunk/src/corelib/arch/qatomic_symbian.h	(revision 768)
+++ /trunk/src/corelib/arch/qatomic_symbian.h	(revision 769)
@@ -43,5 +43,5 @@
 #define QATOMIC_SYMBIAN_H
 
-#include <qglobal.h>
+#include <QtCore/qglobal.h>
 #include <e32std.h>
 
@@ -105,8 +105,26 @@
 Q_CORE_EXPORT int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *, int);
 Q_CORE_EXPORT int QBasicAtomicInt_fetchAndAddOrdered(volatile int *, int);
+Q_CORE_EXPORT bool QBasicAtomicInt_testAndSetRelaxed(volatile int *, int, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndStoreRelaxed(volatile int *, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndAddRelaxed(volatile int *, int);
+Q_CORE_EXPORT bool QBasicAtomicInt_testAndSetAcquire(volatile int *, int, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndStoreAcquire(volatile int *, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndAddAcquire(volatile int *, int);
+Q_CORE_EXPORT bool QBasicAtomicInt_testAndSetRelease(volatile int *, int, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndStoreRelease(volatile int *, int);
+Q_CORE_EXPORT int QBasicAtomicInt_fetchAndAddRelease(volatile int *, int);
 
 Q_CORE_EXPORT bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *, void *, void *);
 Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *, void *);
 Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *, qptrdiff);
+Q_CORE_EXPORT bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *, void *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *, qptrdiff);
+Q_CORE_EXPORT bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *, void *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *, qptrdiff);
+Q_CORE_EXPORT bool QBasicAtomicPointer_testAndSetRelease(void * volatile *, void *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *, void *);
+Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddRelease(void * volatile *, qptrdiff);
 
 // Reference counting
@@ -134,15 +152,15 @@
 inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicInt_testAndSetRelaxed(&_q_value, expectedValue, newValue);
 }
 
 inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicInt_testAndSetAcquire(&_q_value, expectedValue, newValue);
 }
 
 inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicInt_testAndSetRelease(&_q_value, expectedValue, newValue);
 }
 
@@ -156,15 +174,15 @@
 inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return QBasicAtomicInt_fetchAndStoreRelaxed(&_q_value, newValue);
 }
 
 inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return QBasicAtomicInt_fetchAndStoreAcquire(&_q_value, newValue);
 }
 
 inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return QBasicAtomicInt_fetchAndStoreRelease(&_q_value, newValue);
 }
 
@@ -178,15 +196,15 @@
 inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return QBasicAtomicInt_fetchAndAddRelaxed(&_q_value, valueToAdd);
 }
 
 inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return QBasicAtomicInt_fetchAndAddAcquire(&_q_value, valueToAdd);
 }
 
 inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return QBasicAtomicInt_fetchAndAddRelease(&_q_value, valueToAdd);
 }
 
@@ -196,7 +214,6 @@
 Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
 {
-    union { T * volatile * typed; void * volatile * voidp; } pointer;
-    pointer.typed = &_q_value;
-    return QBasicAtomicPointer_testAndSetOrdered(pointer.voidp, expectedValue, newValue);
+    return QBasicAtomicPointer_testAndSetOrdered(reinterpret_cast<void * volatile *>(&_q_value),
+        expectedValue, newValue);
 }
 
@@ -204,5 +221,6 @@
 Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicPointer_testAndSetRelaxed(reinterpret_cast<void * volatile *>(&_q_value),
+        expectedValue, newValue);
 }
 
@@ -210,5 +228,6 @@
 Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicPointer_testAndSetAcquire(reinterpret_cast<void * volatile *>(&_q_value),
+        expectedValue, newValue);
 }
 
@@ -216,5 +235,6 @@
 Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
 {
-    return testAndSetOrdered(expectedValue, newValue);
+    return QBasicAtomicPointer_testAndSetRelease(reinterpret_cast<void * volatile *>(&_q_value),
+        expectedValue, newValue);
 }
 
@@ -224,9 +244,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
 {
-    union { T * volatile * typed; void * volatile * voidp; } pointer;
-    union { T *typed; void *voidp; } returnValue;
-    pointer.typed = &_q_value;
-    returnValue.voidp = QBasicAtomicPointer_fetchAndStoreOrdered(pointer.voidp, newValue);
-    return returnValue.typed;
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndStoreOrdered(
+        reinterpret_cast<void * volatile *>(&_q_value)
+        , newValue));
 }
 
@@ -234,5 +252,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndStoreRelaxed(
+        reinterpret_cast<void * volatile *>(&_q_value)
+        , newValue));
 }
 
@@ -240,5 +260,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndStoreAcquire(
+        reinterpret_cast<void * volatile *>(&_q_value)
+        , newValue));
 }
 
@@ -246,5 +268,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
 {
-    return fetchAndStoreOrdered(newValue);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndStoreRelease(
+        reinterpret_cast<void * volatile *>(&_q_value)
+        , newValue));
 }
 
@@ -254,9 +278,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
 {
-    union { T * volatile *typed; void * volatile *voidp; } pointer;
-    union { T *typed; void *voidp; } returnValue;
-    pointer.typed = &_q_value;
-    returnValue.voidp = QBasicAtomicPointer_fetchAndAddOrdered(pointer.voidp, valueToAdd * sizeof(T));
-    return returnValue.typed;
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndAddOrdered(
+        reinterpret_cast<void * volatile *>(&_q_value),
+        valueToAdd * sizeof(T)));
 }
 
@@ -264,5 +286,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndAddRelaxed(
+        reinterpret_cast<void * volatile *>(&_q_value),
+        valueToAdd * sizeof(T)));
 }
 
@@ -270,5 +294,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndAddAcquire(
+        reinterpret_cast<void * volatile *>(&_q_value),
+        valueToAdd * sizeof(T)));
 }
 
@@ -276,5 +302,7 @@
 Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
 {
-    return fetchAndAddOrdered(valueToAdd);
+    return static_cast<T*>(QBasicAtomicPointer_fetchAndAddRelease(
+        reinterpret_cast<void * volatile *>(&_q_value),
+        valueToAdd * sizeof(T)));
 }
 
Index: /trunk/src/corelib/arch/sparc/arch.pri
===================================================================
--- /trunk/src/corelib/arch/sparc/arch.pri	(revision 768)
+++ /trunk/src/corelib/arch/sparc/arch.pri	(revision 769)
@@ -2,5 +2,5 @@
 # SPARC architecture
 #
-*-64 {
+*-64* {
     SOURCES += $$QT_ARCH_CPP/qatomic64.s
 } 
Index: /trunk/src/corelib/arch/symbian/qatomic_symbian.cpp
===================================================================
--- /trunk/src/corelib/arch/symbian/qatomic_symbian.cpp	(revision 768)
+++ /trunk/src/corelib/arch/symbian/qatomic_symbian.cpp	(revision 769)
@@ -42,4 +42,8 @@
 #include <QtCore/qglobal.h>
 #include <QtCore/qatomic.h>
+
+#ifdef SYMBIAN_E32_ATOMIC_API
+#include <e32atomics.h>
+#endif
 
 #include <e32debug.h>
@@ -80,5 +84,5 @@
 Q_CORE_EXPORT bool QBasicAtomicInt::isReferenceCountingNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -89,5 +93,5 @@
 Q_CORE_EXPORT bool QBasicAtomicInt::isTestAndSetNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -98,5 +102,5 @@
 Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndStoreNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -107,5 +111,5 @@
 Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndAddNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -116,5 +120,5 @@
 Q_CORE_EXPORT bool QBasicAtomicPointer_isTestAndSetNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -125,5 +129,5 @@
 Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndStoreNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
@@ -134,10 +138,184 @@
 Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndAddNative()
 {
-#ifdef QT_HAVE_ARMV6
-    return true;
-#else
-    return false;
-#endif
-}
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
+    return true;
+#else
+    return false;
+#endif
+}
+
+#ifdef SYMBIAN_E32_ATOMIC_API
+//Symbian's API is SMP-safe when using SMP kernel, and cheap when using uniprocessor kernel
+
+//generate compiler error if casting assumptions are wrong (symbian64?)
+__ASSERT_COMPILE(sizeof(int) == sizeof(TUint32));
+__ASSERT_COMPILE(sizeof(void *) == sizeof(TUint32));
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_ord32(_q_value,
+        reinterpret_cast<TUint32*>(&expectedValue), newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetRelaxed(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_rlx32(_q_value,
+        reinterpret_cast<TUint32*>(&expectedValue), newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetAcquire(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_acq32(_q_value,
+        reinterpret_cast<TUint32*>(&expectedValue), newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetRelease(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_rel32(_q_value,
+        reinterpret_cast<TUint32*>(&expectedValue), newValue));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue)
+{
+    return static_cast<int>(__e32_atomic_swp_ord32(_q_value, newValue));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreRelaxed(volatile int *_q_value, int newValue)
+{
+    return static_cast<int>(__e32_atomic_swp_rlx32(_q_value, newValue));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreAcquire(volatile int *_q_value, int newValue)
+{
+    return static_cast<int>(__e32_atomic_swp_acq32(_q_value, newValue));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreRelease(volatile int *_q_value, int newValue)
+{
+    return static_cast<int>(__e32_atomic_swp_rel32(_q_value, newValue));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd)
+{
+    return static_cast<int>(__e32_atomic_add_ord32(_q_value, valueToAdd));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddRelaxed(volatile int *_q_value, int valueToAdd)
+{
+    return static_cast<int>(__e32_atomic_add_rlx32(_q_value, valueToAdd));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddAcquire(volatile int *_q_value, int valueToAdd)
+{
+    return static_cast<int>(__e32_atomic_add_acq32(_q_value, valueToAdd));
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddRelease(volatile int *_q_value, int valueToAdd)
+{
+    return static_cast<int>(__e32_atomic_add_rel32(_q_value, valueToAdd));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_ord_ptr(_q_value,
+        &expectedValue,
+        newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_rlx_ptr(_q_value,
+        &expectedValue,
+        newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_acq_ptr(_q_value,
+        &expectedValue,
+        newValue));
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetRelease(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return static_cast<bool>(__e32_atomic_cas_rel_ptr(_q_value,
+        &expectedValue,
+        newValue));
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue)
+{
+    return __e32_atomic_swp_ord_ptr(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *_q_value, void *newValue)
+{
+    return __e32_atomic_swp_rlx_ptr(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *_q_value, void *newValue)
+{
+    return __e32_atomic_swp_acq_ptr(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *_q_value, void *newValue)
+{
+    return __e32_atomic_swp_rel_ptr(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return __e32_atomic_add_ord_ptr(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return __e32_atomic_add_rlx_ptr(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return __e32_atomic_add_acq_ptr(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddRelease(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return __e32_atomic_add_rel_ptr(_q_value, valueToAdd);
+}
+
+#else
+//Symbian kernels 9.4 and earlier don't expose a suitable API
 
 //For ARMv6, the generic atomics are machine coded
@@ -230,5 +408,120 @@
 }
 
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetRelaxed(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return QBasicAtomicInt_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetAcquire(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return QBasicAtomicInt_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicInt_testAndSetRelease(volatile int *_q_value, int expectedValue, int newValue)
+{
+    return QBasicAtomicInt_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreRelaxed(volatile int *_q_value, int newValue)
+{
+    return QBasicAtomicInt_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreAcquire(volatile int *_q_value, int newValue)
+{
+    return QBasicAtomicInt_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndStoreRelease(volatile int *_q_value, int newValue)
+{
+    return QBasicAtomicInt_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddRelaxed(volatile int *_q_value, int valueToAdd)
+{
+    return QBasicAtomicInt_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddAcquire(volatile int *_q_value, int valueToAdd)
+{
+    return QBasicAtomicInt_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+int QBasicAtomicInt_fetchAndAddRelease(volatile int *_q_value, int valueToAdd)
+{
+    return QBasicAtomicInt_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return QBasicAtomicPointer_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return QBasicAtomicPointer_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+bool QBasicAtomicPointer_testAndSetRelease(void * volatile *_q_value,
+                                           void *expectedValue,
+                                           void *newValue)
+{
+    return QBasicAtomicPointer_testAndSetOrdered(_q_value, expectedValue, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *_q_value, void *newValue)
+{
+    return QBasicAtomicPointer_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *_q_value, void *newValue)
+{
+    return QBasicAtomicPointer_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *_q_value, void *newValue)
+{
+    return QBasicAtomicPointer_fetchAndStoreOrdered(_q_value, newValue);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return QBasicAtomicPointer_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return QBasicAtomicPointer_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
+Q_CORE_EXPORT
+void *QBasicAtomicPointer_fetchAndAddRelease(void * volatile *_q_value, qptrdiff valueToAdd)
+{
+    return QBasicAtomicPointer_fetchAndAddOrdered(_q_value, valueToAdd);
+}
+
 #endif // QT_HAVE_ARMV6
+#endif // SYMBIAN_E32_ATOMIC_API
 
 QT_END_NAMESPACE
Index: /trunk/src/corelib/codecs/qiconvcodec.cpp
===================================================================
--- /trunk/src/corelib/codecs/qiconvcodec.cpp	(revision 768)
+++ /trunk/src/corelib/codecs/qiconvcodec.cpp	(revision 769)
@@ -169,5 +169,5 @@
 {
     if (utf16Codec == reinterpret_cast<QTextCodec *>(~0))
-        return QString::fromAscii(chars, len);
+        return QString::fromLatin1(chars, len);
 
     int invalidCount = 0;
@@ -208,7 +208,7 @@
             if (!reported++) {
                 fprintf(stderr,
-                        "QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failed\n");
-            }
-            return QString::fromAscii(chars, len);
+                        "QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed\n");
+            }
+            return QString::fromLatin1(chars, len);
         }
 
@@ -274,5 +274,5 @@
             // some other error
             // note, cannot use qWarning() since we are implementing the codecForLocale :)
-            perror("QIconvCodec::convertToUnicode: using ASCII for conversion, iconv failed");
+            perror("QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv failed");
 
             if (!convState) {
@@ -281,5 +281,5 @@
             }
 
-            return QString::fromAscii(chars, len);
+            return QString::fromLatin1(chars, len);
         }
     } while (inBytesLeft != 0);
@@ -299,4 +299,30 @@
 
 Q_GLOBAL_STATIC(QThreadStorage<QIconvCodec::IconvState *>, fromUnicodeState)
+
+static bool setByteOrder(iconv_t cd)
+{
+#if !defined(NO_BOM)
+    // give iconv() a BOM
+    char buf[4];
+    ushort bom[] = { QChar::ByteOrderMark };
+
+    char *outBytes = buf;
+    char *inBytes = reinterpret_cast<char *>(bom);
+    size_t outBytesLeft = sizeof buf;
+    size_t inBytesLeft = sizeof bom;
+
+#if defined(GNU_LIBICONV)
+    const char **inBytesPtr = const_cast<const char **>(&inBytes);
+#else
+    char **inBytesPtr = &inBytes;
+#endif
+
+    if (iconv(cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {
+        return false;
+    }
+#endif // NO_BOM
+
+    return true;
+}
 
 QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *convState) const
@@ -326,23 +352,13 @@
     if (!state) {
         state = new IconvState(QIconvCodec::createIconv_t(0, UTF16));
-        if (state->cd != reinterpret_cast<iconv_t>(-1)) {
-            size_t outBytesLeft = len + 3; // +3 for the BOM
-            QByteArray ba(outBytesLeft, Qt::Uninitialized);
-            outBytes = ba.data();
-
-#if !defined(NO_BOM)
-            // give iconv() a BOM
-            QChar bom[] = { QChar(QChar::ByteOrderMark) };
-            inBytes = reinterpret_cast<char *>(bom);
-            inBytesLeft = sizeof(bom);
-            if (iconv(state->cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {
-                perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM");
+        if (state->cd == reinterpret_cast<iconv_t>(-1)) {
+            if (!setByteOrder(state->cd)) {
+                perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM");
 
                 iconv_close(state->cd);
                 state->cd = reinterpret_cast<iconv_t>(-1);
 
-                return QString(uc, len).toAscii();
-            }
-#endif // NO_BOM
+                return QString(uc, len).toLatin1();
+            }
         }
     }
@@ -351,7 +367,7 @@
         if (!reported++) {
             fprintf(stderr,
-                    "QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed\n");
-        }
-        return QString(uc, len).toAscii();
+                    "QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed\n");
+        }
+        return QString(uc, len).toLatin1();
     }
  
@@ -410,10 +426,10 @@
                 {
                     // note, cannot use qWarning() since we are implementing the codecForLocale :)
-                    perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed");
+                    perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed");
 
                     // reset to initial state
                     iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
 
-                    return QString(uc, len).toAscii();
+                    return QString(uc, len).toLatin1();
                 }
             }
@@ -423,4 +439,5 @@
     // reset to initial state
     iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
+    setByteOrder(state->cd);
 
     ba.resize(ba.size() - outBytesLeft);
Index: /trunk/src/corelib/codecs/qsimplecodec.cpp
===================================================================
--- /trunk/src/corelib/codecs/qsimplecodec.cpp	(revision 768)
+++ /trunk/src/corelib/codecs/qsimplecodec.cpp	(revision 769)
@@ -682,5 +682,5 @@
     const QChar* ucp = in;
     unsigned char* rp = (unsigned char *)r.data();
-    const unsigned char* rmp = (const unsigned char *)reverseMap->data();
+    const unsigned char* rmp = (const unsigned char *)reverseMap->constData();
     int rmsize = (int) reverseMap->size();
     while(i--)
Index: /trunk/src/corelib/codecs/qtextcodec.cpp
===================================================================
--- /trunk/src/corelib/codecs/qtextcodec.cpp	(revision 768)
+++ /trunk/src/corelib/codecs/qtextcodec.cpp	(revision 769)
@@ -86,5 +86,6 @@
 #endif // QT_NO_CODECS
 #include "qlocale.h"
-#include "private/qmutexpool_p.h"
+#include "qmutex.h"
+#include "qhash.h"
 
 #include <stdlib.h>
@@ -108,4 +109,5 @@
     (QTextCodecFactoryInterface_iid, QLatin1String("/codecs")))
 #endif
+
 
 static char qtolower(register char c)
@@ -179,4 +181,5 @@
 
 static QList<QTextCodec*> *all = 0;
+static int clearCaches = 0;  // flags specifying if caches should be invalided: 0x1 codecForName, 0x2 codecForMib
 #ifdef Q_DEBUG_TEXTCODEC
 static bool destroying_is_ok = false;
@@ -221,4 +224,17 @@
 
 Q_GLOBAL_STATIC(QTextCodecCleanup, createQTextCodecCleanup)
+
+bool QTextCodec::validCodecs()
+{
+#ifdef Q_OS_SYMBIAN
+    // If we don't have a trap handler, we're outside of the main() function,
+    // ie. in global constructors or destructors. Don't use codecs in this
+    // case as it would lead to crashes because we don't have a cleanup stack on Symbian
+    return (User::TrapHandler() != NULL);
+#else
+    return true;
+#endif
+}
+
 
 #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
@@ -906,13 +922,21 @@
 }
 
-
+#ifndef QT_NO_THREAD
+Q_GLOBAL_STATIC_WITH_ARGS(QMutex, textCodecsMutex, (QMutex::Recursive));
+#endif
+
+// textCodecsMutex need to be locked to enter this function
 static void setup()
 {
-#ifndef QT_NO_THREAD
-    QMutexLocker locker(QMutexPool::globalInstanceGet(&all));
-#endif
-
     if (all)
         return;
+
+#ifdef Q_OS_SYMBIAN
+    // If we don't have a trap handler, we're outside of the main() function,
+    // ie. in global constructors or destructors. Don't create codecs in this
+    // case as it would lead to crashes because of a missing cleanup stack on Symbian
+    if (User::TrapHandler() == NULL)
+        return;
+#endif
 
 #ifdef Q_DEBUG_TEXTCODEC
@@ -1164,6 +1188,4 @@
 
 /*!
-    \nonreentrant
-
     Constructs a QTextCodec, and gives it the highest precedence. The
     QTextCodec should always be constructed on the heap (i.e. with \c
@@ -1173,4 +1195,7 @@
 QTextCodec::QTextCodec()
 {
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
     all->prepend(this);
@@ -1190,6 +1215,11 @@
         qWarning("QTextCodec::~QTextCodec: Called by application");
 #endif
-    if (all)
+    if (all) {
+#ifndef QT_NO_THREAD
+        QMutexLocker locker(textCodecsMutex());
+#endif
         all->removeAll(this);
+        clearCaches = 0x1 | 0x2;
+    }
 }
 
@@ -1212,17 +1242,39 @@
         return 0;
 
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
+
+    if (!validCodecs())
+        return 0;
+
+    static QHash <QByteArray, QTextCodec *> cache;
+    if (clearCaches & 0x1) {
+        cache.clear();
+        clearCaches &= ~0x1;
+    }
+    QTextCodec *codec = cache.value(name);
+    if (codec)
+        return codec;
 
     for (int i = 0; i < all->size(); ++i) {
         QTextCodec *cursor = all->at(i);
-        if (nameMatch(cursor->name(), name))
+        if (nameMatch(cursor->name(), name)) {
+            cache.insert(name, cursor);
             return cursor;
+        }
         QList<QByteArray> aliases = cursor->aliases();
-        for (int i = 0; i < aliases.size(); ++i)
-            if (nameMatch(aliases.at(i), name))
+        for (int y = 0; y < aliases.size(); ++y)
+            if (nameMatch(aliases.at(y), name)) {
+                cache.insert(name, cursor);
                 return cursor;
-    }
-
-    return createForName(name);
+            }
+    }
+
+    codec = createForName(name);
+    if (codec)
+        cache.insert(name, codec);
+    return codec;
 }
 
@@ -1234,19 +1286,40 @@
 QTextCodec* QTextCodec::codecForMib(int mib)
 {
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
 
-    // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
-    // this correctly for compatibility.
-    if (mib == 1000)
-        mib = 1015;
+    if (!validCodecs())
+        return 0;
+
+    static QHash <int, QTextCodec *> cache;
+    if (clearCaches & 0x2) {
+        cache.clear();
+        clearCaches &= ~0x2;
+    }
+    QTextCodec *codec = cache.value(mib);
+    if (codec)
+        return codec;
 
     QList<QTextCodec*>::ConstIterator i;
     for (int i = 0; i < all->size(); ++i) {
         QTextCodec *cursor = all->at(i);
-        if (cursor->mibEnum() == mib)
+        if (cursor->mibEnum() == mib) {
+            cache.insert(mib, cursor);
             return cursor;
-    }
-
-    return createForMib(mib);
+        }
+    }
+
+    codec = createForMib(mib);
+
+    // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
+    // this correctly for compatibility.
+    if (!codec && mib == 1000)
+        return codecForMib(1015);
+
+    if (codec)
+        cache.insert(mib, codec);
+    return codec;
 }
 
@@ -1262,11 +1335,23 @@
 QList<QByteArray> QTextCodec::availableCodecs()
 {
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
 
     QList<QByteArray> codecs;
+
+    if (!validCodecs())
+        return codecs;
+
     for (int i = 0; i < all->size(); ++i) {
         codecs += all->at(i)->name();
         codecs += all->at(i)->aliases();
     }
+
+#ifndef QT_NO_THREAD
+    locker.unlock();
+#endif
+
 #ifndef QT_NO_TEXTCODECPLUGIN
     QFactoryLoader *l = loader();
@@ -1292,9 +1377,21 @@
 QList<int> QTextCodec::availableMibs()
 {
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
 
     QList<int> codecs;
+
+    if (!validCodecs())
+        return codecs;
+
     for (int i = 0; i < all->size(); ++i)
         codecs += all->at(i)->mibEnum();
+
+#ifndef QT_NO_THREAD
+    locker.unlock();
+#endif
+
 #ifndef QT_NO_TEXTCODECPLUGIN
     QFactoryLoader *l = loader();
@@ -1341,7 +1438,13 @@
 QTextCodec* QTextCodec::codecForLocale()
 {
+    if (!validCodecs())
+        return 0;
+
     if (localeMapper)
         return localeMapper;
 
+#ifndef QT_NO_THREAD
+    QMutexLocker locker(textCodecsMutex());
+#endif
     setup();
 
Index: /trunk/src/corelib/codecs/qtextcodec.h
===================================================================
--- /trunk/src/corelib/codecs/qtextcodec.h	(revision 768)
+++ /trunk/src/corelib/codecs/qtextcodec.h	(revision 769)
@@ -146,10 +146,11 @@
     friend class QTextCodecCleanup;
     static QTextCodec *cftr;
+    static bool validCodecs();
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(QTextCodec::ConversionFlags)
 
-inline QTextCodec* QTextCodec::codecForTr() { return cftr; }
+        inline QTextCodec* QTextCodec::codecForTr() { return validCodecs() ? cftr : 0; }
 inline void QTextCodec::setCodecForTr(QTextCodec *c) { cftr = c; }
-inline QTextCodec* QTextCodec::codecForCStrings() { return QString::codecForCStrings; }
+inline QTextCodec* QTextCodec::codecForCStrings() { return validCodecs() ? QString::codecForCStrings : 0; }
 inline void QTextCodec::setCodecForCStrings(QTextCodec *c) { QString::codecForCStrings = c; }
 
@@ -171,6 +172,8 @@
     friend class QXmlStreamWriter;
     friend class QXmlStreamWriterPrivate;
+#if defined(Q_OS_MAC32) || defined(Q_OS_AIX)
     friend class QCoreXmlStreamWriter;
     friend class QCoreXmlStreamWriterPrivate;
+#endif
 };
 
Index: /trunk/src/corelib/codecs/qutfcodec.cpp
===================================================================
--- /trunk/src/corelib/codecs/qutfcodec.cpp	(revision 768)
+++ /trunk/src/corelib/codecs/qutfcodec.cpp	(revision 769)
@@ -327,9 +327,9 @@
             }
             if (!headerdone) {
+                headerdone = true;
                 if (endian == DetectEndianness) {
-                    if (ch == QChar::ByteOrderSwapped && endian != BigEndianness) {
+                    if (ch == QChar::ByteOrderSwapped) {
                         endian = LittleEndianness;
-                    } else if (ch == QChar::ByteOrderMark && endian != LittleEndianness) {
-                        // ignore BOM
+                    } else if (ch == QChar::ByteOrderMark) {
                         endian = BigEndianness;
                     } else {
@@ -345,5 +345,4 @@
                     *qch++ = ch;
                 }
-                headerdone = true;
             } else {
                 *qch++ = ch;
Index: /trunk/src/corelib/concurrent/qfuture.h
===================================================================
--- /trunk/src/corelib/concurrent/qfuture.h	(revision 768)
+++ /trunk/src/corelib/concurrent/qfuture.h	(revision 769)
@@ -112,5 +112,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
Index: /trunk/src/corelib/concurrent/qfuturewatcher.cpp
===================================================================
--- /trunk/src/corelib/concurrent/qfuturewatcher.cpp	(revision 768)
+++ /trunk/src/corelib/concurrent/qfuturewatcher.cpp	(revision 769)
@@ -500,4 +500,11 @@
 
     Starts watching the given \a future.
+
+    One of the signals might be emitted for the current state of the
+    \a future. For example, if the future is already stopped, the
+    finished signal will be emitted.
+
+    To avoid a race condition, it is important to call this function
+    \i after doing the connections.
 */
 
Index: /trunk/src/corelib/corelib.pro
===================================================================
--- /trunk/src/corelib/corelib.pro	(revision 768)
+++ /trunk/src/corelib/corelib.pro	(revision 769)
@@ -36,3 +36,18 @@
     MMP_RULES -= PAGED
     MMP_RULES *= UNPAGED
+
+    # Partial upgrade SIS file
+    vendorinfo = \
+        "; Localised Vendor name" \
+        "%{\"Nokia, Qt\"}" \
+        " " \
+        "; Unique Vendor name" \
+        ":\"Nokia, Qt\"" \
+        " "
+    pu_header = "; Partial upgrade package for testing QtCore changes without reinstalling everything" \
+                "$${LITERAL_HASH}{\"Qt corelib\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
+    partial_upgrade.pkg_prerules = pu_header vendorinfo
+    partial_upgrade.sources = qtcore.dll
+    partial_upgrade.path = c:/sys/bin
+    DEPLOYMENT = partial_upgrade $$DEPLOYMENT
 }
Index: /trunk/src/corelib/global/qglobal.cpp
===================================================================
--- /trunk/src/corelib/global/qglobal.cpp	(revision 768)
+++ /trunk/src/corelib/global/qglobal.cpp	(revision 769)
@@ -1995,5 +1995,4 @@
 }
 
-#ifndef QT_NO_EXCEPTIONS
 /* \internal
    Allows you to throw an exception without including <new>
@@ -2004,5 +2003,4 @@
     QT_THROW(std::bad_alloc());
 }
-#endif
 
 /*
@@ -2077,5 +2075,26 @@
 #endif // Q_CC_MWERKS && Q_OS_MACX
 
-
+#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \
+    defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L
+namespace {
+    // There are two incompatible versions of strerror_r:
+    // a) the XSI/POSIX.1 version, which returns an int,
+    //    indicating success or not
+    // b) the GNU version, which returns a char*, which may or may not
+    //    be the beginning of the buffer we used
+    // The GNU libc manpage for strerror_r says you should use the the XSI
+    // version in portable code. However, it's impossible to do that if
+    // _GNU_SOURCE is defined so we use C++ overloading to decide what to do
+    // depending on the return type
+    static inline QString fromstrerror_helper(int, const QByteArray &buf)
+    {
+        return QString::fromLocal8Bit(buf);
+    }
+    static inline QString fromstrerror_helper(const char *str, const QByteArray &)
+    {
+        return QString::fromLocal8Bit(str);
+    }
+}
+#endif
 
 QString qt_error_string(int errorCode)
@@ -2120,10 +2139,7 @@
         if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND)
             ret = QString::fromLatin1("The specified module could not be found.");
-
 #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
-
         QByteArray buf(1024, '\0');
-        strerror_r(errorCode, buf.data(), buf.size());
-        ret = QString::fromLocal8Bit(buf.constData());
+        ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
 #else
         ret = QString::fromLocal8Bit(strerror(errorCode));
Index: /trunk/src/corelib/global/qglobal.h
===================================================================
--- /trunk/src/corelib/global/qglobal.h	(revision 768)
+++ /trunk/src/corelib/global/qglobal.h	(revision 769)
@@ -45,9 +45,9 @@
 #include <stddef.h>
 
-#define QT_VERSION_STR "4.6.2"
+#define QT_VERSION_STR "4.6.3"
 /*
    QT_VERSION is (major << 16) + (minor << 8) + patch.
 */
-#define QT_VERSION 0x040602
+#define QT_VERSION 0x040603
 /*
    can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
@@ -55,7 +55,7 @@
 #define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
 
-#define QT_PACKAGEDATE_STR "2010-02-12"
-
-#define QT_PACKAGE_TAG "244b440f11a519bbd0f6a2c5cde90edb1732f2ea"
+#define QT_PACKAGEDATE_STR "2010-06-02"
+
+#define QT_PACKAGE_TAG "76353f177cd84327c692ea31ec644df683643194"
 
 #if !defined(QT_BUILD_MOC)
@@ -813,5 +813,5 @@
 #    endif
 #  elif defined(Q_OS_SYMBIAN)
-#    if (defined(__SERIES60_31__) || defined(__S60_32__) || defined(__S60_50__)) && !defined(QT_NO_S60)
+#    if !defined(QT_NO_S60)
 #      define Q_WS_S60
 #    endif
@@ -1679,8 +1679,5 @@
 
 Q_CORE_EXPORT void qt_check_pointer(const char *, int);
-
-#ifndef QT_NO_EXCEPTIONS
 Q_CORE_EXPORT void qBadAlloc();
-#endif
 
 #ifdef QT_NO_EXCEPTIONS
@@ -2417,14 +2414,16 @@
 #if defined(Q_OS_SYMBIAN)
 
-#ifdef SYMBIAN_GRAPHICS_USE_GCE
-//RWsPointerCursor is fixed, so don't use low performance sprites
-#define Q_SYMBIAN_FIXED_POINTER_CURSORS
+#ifdef SYMBIAN_BUILD_GCE
 #define Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE
+#define Q_SYMBIAN_WINDOW_SIZE_CACHE
+#define QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+
 //enabling new graphics resources
-#define QT_SYMBIAN_SUPPORTS_SGIMAGE
-#define QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+#  define QT_SYMBIAN_SUPPORTS_SGIMAGE
+#endif
 
 #ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
-#define Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
+#  define Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
 #endif
 #endif
Index: /trunk/src/corelib/global/qnamespace.h
===================================================================
--- /trunk/src/corelib/global/qnamespace.h	(revision 768)
+++ /trunk/src/corelib/global/qnamespace.h	(revision 769)
@@ -300,5 +300,7 @@
         BypassGraphicsProxyWidget = 0x20000000,
         WindowOkButtonHint = 0x00080000,
-        WindowCancelButtonHint = 0x00100000
+        WindowCancelButtonHint = 0x00100000,
+        WindowSoftkeysVisibleHint = 0x40000000,
+        WindowSoftkeysRespondHint = 0x80000000
 
 #ifdef QT3_SUPPORT
Index: /trunk/src/corelib/global/qnamespace.qdoc
===================================================================
--- /trunk/src/corelib/global/qnamespace.qdoc	(revision 768)
+++ /trunk/src/corelib/global/qnamespace.qdoc	(revision 769)
@@ -158,5 +158,5 @@
     \value AA_MacDontSwapCtrlAndMeta On Mac OS X by default, Qt swaps the
            Control and Meta (Command) keys (i.e., whenever Control is pressed, Qt
-           sends Meta and whenever Meta is pressed Control is sent. When this
+           sends Meta, and whenever Meta is pressed Control is sent). When this
            attribute is true, Qt will not do the flip. QKeySequence::StandardShortcuts
            will also flip accordingly (i.e., QKeySequence::Copy will be
@@ -494,5 +494,5 @@
     \omitvalue TextForceLeftToRight
     \omitvalue TextForceRightToLeft
-    \omitvalue TextLongestVariant Always use the longest variant when computing the size of a multi-variant string
+    \omitvalue TextLongestVariant Always use the longest variant when computing the size of a multi-variant string.
 
     You can use as many modifier flags as you want, except that
@@ -1623,20 +1623,20 @@
     \value Key_LaunchMail
     \value Key_LaunchMedia
-    \value Key_Launch0
-    \value Key_Launch1
-    \value Key_Launch2
-    \value Key_Launch3
-    \value Key_Launch4
-    \value Key_Launch5
-    \value Key_Launch6
-    \value Key_Launch7
-    \value Key_Launch8
-    \value Key_Launch9
-    \value Key_LaunchA
-    \value Key_LaunchB
-    \value Key_LaunchC
-    \value Key_LaunchD
-    \value Key_LaunchE
-    \value Key_LaunchF
+    \value Key_Launch0 On X11 this key is mapped to "My Computer" (XF86XK_MyComputer) key for legacy reasons.
+    \value Key_Launch1 On X11 this key is mapped to "Calculator" (XF86XK_Calculator) key for legacy reasons.
+    \value Key_Launch2 On X11 this key is mapped to XF86XK_Launch0 key for legacy reasons.
+    \value Key_Launch3 On X11 this key is mapped to XF86XK_Launch1 key for legacy reasons.
+    \value Key_Launch4 On X11 this key is mapped to XF86XK_Launch2 key for legacy reasons.
+    \value Key_Launch5 On X11 this key is mapped to XF86XK_Launch3 key for legacy reasons.
+    \value Key_Launch6 On X11 this key is mapped to XF86XK_Launch4 key for legacy reasons.
+    \value Key_Launch7 On X11 this key is mapped to XF86XK_Launch5 key for legacy reasons.
+    \value Key_Launch8 On X11 this key is mapped to XF86XK_Launch6 key for legacy reasons.
+    \value Key_Launch9 On X11 this key is mapped to XF86XK_Launch7 key for legacy reasons.
+    \value Key_LaunchA On X11 this key is mapped to XF86XK_Launch8 key for legacy reasons.
+    \value Key_LaunchB On X11 this key is mapped to XF86XK_Launch9 key for legacy reasons.
+    \value Key_LaunchC On X11 this key is mapped to XF86XK_LaunchA key for legacy reasons.
+    \value Key_LaunchD On X11 this key is mapped to XF86XK_LaunchB key for legacy reasons.
+    \value Key_LaunchE On X11 this key is mapped to XF86XK_LaunchC key for legacy reasons.
+    \value Key_LaunchF On X11 this key is mapped to XF86XK_LaunchD key for legacy reasons.
     \value Key_MonBrightnessUp
     \value Key_MonBrightnessDown
@@ -1664,5 +1664,5 @@
     \value Key_Book
     \value Key_CD
-    \value Key_Calculator
+    \value Key_Calculator On X11 this key is not mapped for legacy reasons. Use Qt::Key_Launch1 instead.
     \value Key_ToDoList
     \value Key_ClearGrab
@@ -2116,5 +2116,5 @@
 
     \value MacWindowToolBarButtonHint On Mac OS X adds a tool bar button (i.e.,
-           the oblong button that is on the top right of windows that have toolbars.
+           the oblong button that is on the top right of windows that have toolbars).
 
     \value BypassGraphicsProxyWidget Prevents the window and its children from
@@ -2146,4 +2146,12 @@
     \value WindowCancelButtonHint Adds a Cancel button to the window decoration of a dialog.
            Only supported for Windows CE.
+
+    \value WindowSoftkeysVisibleHint Makes softkeys visible when widget is fullscreen.
+           Only supported for Symbian.
+
+    \value WindowSoftkeysRespondHint Makes softkeys to receive key events even
+           when invisible. With this hint the softkey actions are triggered
+           even the softkeys are invisible i.e. the window is displayed with
+           \c showFullscreen(). Only supported for Symbian.
 
     \value WindowType_Mask  A mask for extracting the window type
Index: /trunk/src/corelib/io/qdatastream.cpp
===================================================================
--- /trunk/src/corelib/io/qdatastream.cpp	(revision 768)
+++ /trunk/src/corelib/io/qdatastream.cpp	(revision 769)
@@ -157,4 +157,10 @@
     the data (apart from the length quint32) must be done by you.
 
+    \section1 Reading and writing Qt collection classes
+
+    The Qt container classes can also be serialized to a QDataStream.
+    These include QList, QLinkedList, QVector, QSet, QHash, and QMap.
+    The stream operators are declared as non-members of the classes.
+
     \target Serializing Qt Classes
     \section1 Reading and writing other Qt classes.
Index: /trunk/src/corelib/io/qdir.cpp
===================================================================
--- /trunk/src/corelib/io/qdir.cpp	(revision 768)
+++ /trunk/src/corelib/io/qdir.cpp	(revision 769)
@@ -1050,13 +1050,13 @@
 /*!
     \obsolete
+
+    Use QDir::addSearchPath() with a prefix instead.
+
     Adds \a path to the search paths searched in to find resources
     that are not specified with an absolute path. The default search
     path is to search only in the root (\c{:/}).
 
-    Use QDir::addSearchPath() with a prefix instead.
-
-    \sa {The Qt Resource System}, QResource::addSearchPath()
-*/
-
+    \sa {The Qt Resource System}
+*/
 void QDir::addResourceSearchPath(const QString &path)
 {
Index: /trunk/src/corelib/io/qfile.cpp
===================================================================
--- /trunk/src/corelib/io/qfile.cpp	(revision 768)
+++ /trunk/src/corelib/io/qfile.cpp	(revision 769)
@@ -63,9 +63,11 @@
 static QByteArray locale_encode(const QString &f)
 {
-#ifndef Q_OS_DARWIN
-    return f.toLocal8Bit();
-#else
+#if defined(Q_OS_DARWIN)
     // Mac always expects UTF-8... and decomposed...
     return f.normalized(QString::NormalizationForm_D).toUtf8();
+#elif defined(Q_OS_SYMBIAN)
+    return f.toUtf8();
+#else
+    return f.toLocal8Bit();
 #endif
 }
@@ -73,9 +75,11 @@
 static QString locale_decode(const QByteArray &f)
 {
-#ifndef Q_OS_DARWIN
-    return QString::fromLocal8Bit(f);
-#else
+#if defined(Q_OS_DARWIN)
     // Mac always gives us UTF-8 and decomposed, we want that composed...
     return QString::fromUtf8(f).normalized(QString::NormalizationForm_C);
+#elif defined(Q_OS_SYMBIAN)
+    return QString::fromUtf8(f);
+#else
+    return QString::fromLocal8Bit(f);
 #endif
 }
@@ -87,5 +91,6 @@
 QFilePrivate::QFilePrivate()
     : fileEngine(0), lastWasWrite(false),
-      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError)
+      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError),
+      cachedSize(0)
 {
 }
@@ -1257,6 +1262,8 @@
     if(d->fileEngine->setSize(sz)) {
         unsetError();
+        d->cachedSize = sz;
         return true;
     }
+    d->cachedSize = 0;
     d->setError(QFile::ResizeError, d->fileEngine->errorString());
     return false;
@@ -1420,5 +1427,6 @@
     if (!d->ensureFlushed())
         return 0;
-    return fileEngine()->size();
+    d->cachedSize = fileEngine()->size();
+    return d->cachedSize;
 }
 
@@ -1446,12 +1454,12 @@
     Q_D(const QFile);
 
+    // If there's buffered data left, we're not at the end.
+    if (!d->buffer.isEmpty())
+        return false;
+
     if (!isOpen())
         return true;
 
     if (!d->ensureFlushed())
-        return false;
-
-    // If there's buffered data left, we're not at the end.
-    if (!d->buffer.isEmpty())
         return false;
 
@@ -1463,4 +1471,9 @@
     }
 
+    // if it looks like we are at the end, or if size is not cached,
+    // fall through to bytesAvailable() to make sure.
+    if (pos() < d->cachedSize)
+        return false;
+
     // Fall back to checking how much is available (will stat files).
     return bytesAvailable() == 0;
@@ -1502,10 +1515,19 @@
         return -1;
 
-    if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension))
-        return d->fileEngine->readLine(data, maxlen);
-
-    // Fall back to QIODevice's readLine implementation if the engine
-    // cannot do it faster.
-    return QIODevice::readLineData(data, maxlen);
+    qint64 read;
+    if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) {
+        read = d->fileEngine->readLine(data, maxlen);
+    } else {
+        // Fall back to QIODevice's readLine implementation if the engine
+        // cannot do it faster.
+        read = QIODevice::readLineData(data, maxlen);
+    }
+
+    if (read < maxlen) {
+        // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked
+        d->cachedSize = 0;
+    }
+
+    return read;
 }
 
@@ -1528,4 +1550,10 @@
         d->setError(err, d->fileEngine->errorString());
     }
+
+    if (read < len) {
+        // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked
+        d->cachedSize = 0;
+    }
+
     return read;
 }
Index: /trunk/src/corelib/io/qfile_p.h
===================================================================
--- /trunk/src/corelib/io/qfile_p.h	(revision 768)
+++ /trunk/src/corelib/io/qfile_p.h	(revision 769)
@@ -85,4 +85,6 @@
     void setError(QFile::FileError err, int errNum);
 
+    mutable qint64 cachedSize;
+
 private:
     static QFile::EncoderFn encoder;
Index: /trunk/src/corelib/io/qfilesystemwatcher_kqueue.cpp
===================================================================
--- /trunk/src/corelib/io/qfilesystemwatcher_kqueue.cpp	(revision 768)
+++ /trunk/src/corelib/io/qfilesystemwatcher_kqueue.cpp	(revision 769)
@@ -261,10 +261,20 @@
             DEBUG() << "QKqueueFileSystemWatcherEngine: processing kevent" << kev.ident << kev.filter;
             if (fd == kqpipe[0]) {
-                char c;
-                if (read(kqpipe[0], &c, 1) != 1) {
+                // read all pending data from the pipe
+                QByteArray ba;
+                ba.resize(kev.data);
+                if (read(kqpipe[0], ba.data(), ba.size()) != ba.size()) {
                     perror("QKqueueFileSystemWatcherEngine: error reading from pipe");
                     return;
                 }
-                switch (c) {
+                // read the command from the buffer (but break and return on 'q')
+                char cmd = 0;
+                for (int i = 0; i < ba.size(); ++i) {
+                    cmd = ba.constData()[i];
+                    if (cmd == 'q')
+                        break;
+                }
+                // handle the command
+                switch (cmd) {
                 case 'q':
                     DEBUG() << "QKqueueFileSystemWatcherEngine: thread received 'q', exiting...";
@@ -274,5 +284,5 @@
                     break;
                 default:
-                    DEBUG() << "QKqueueFileSystemWatcherEngine: thread received unknow message" << c;
+                    DEBUG() << "QKqueueFileSystemWatcherEngine: thread received unknow message" << cmd;
                     break;
                 }
Index: /trunk/src/corelib/io/qfsfileengine.cpp
===================================================================
--- /trunk/src/corelib/io/qfsfileengine.cpp	(revision 768)
+++ /trunk/src/corelib/io/qfsfileengine.cpp	(revision 769)
@@ -146,4 +146,6 @@
     // Mac OS X 10.5.x doesn't support the realpath(X,0) extenstion we use here.
 #if defined(Q_OS_LINUX) || defined(Q_OS_SYMBIAN)
+    // ... but Linux with uClibc does not have it
+#if !defined(__UCLIBC__)
     char *ret = realpath(path.toLocal8Bit().constData(), (char*)0);
     if (ret) {
@@ -152,4 +154,5 @@
         return canonicalPath;
     }
+#endif
 #endif
 
Index: /trunk/src/corelib/io/qfsfileengine_p.h
===================================================================
--- /trunk/src/corelib/io/qfsfileengine_p.h	(revision 768)
+++ /trunk/src/corelib/io/qfsfileengine_p.h	(revision 769)
@@ -152,4 +152,8 @@
 #endif
 
+#ifdef Q_OS_SYMBIAN
+    void setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString);
+#endif
+
 protected:
     QFSFileEnginePrivate();
Index: /trunk/src/corelib/io/qfsfileengine_unix.cpp
===================================================================
--- /trunk/src/corelib/io/qfsfileengine_unix.cpp	(revision 768)
+++ /trunk/src/corelib/io/qfsfileengine_unix.cpp	(revision 769)
@@ -82,4 +82,38 @@
              || (fileName.at(0) == QLatin1Char('/') && fileName.at(1) == QLatin1Char('/')))));
 }
+
+/*!
+ \internal
+ convert symbian error code to the one suitable for setError.
+ example usage: setSymbianError(err, QFile::CopyError, QLatin1String("copy error"))
+*/
+void QFSFileEnginePrivate::setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString)
+{
+    Q_Q(QFSFileEngine);
+    switch (symbianError) {
+    case KErrNone:
+        q->setError(QFile::NoError, QLatin1String(""));
+        break;
+    case KErrAccessDenied:
+        q->setError(QFile::PermissionsError, QLatin1String("access denied"));
+        break;
+    case KErrPermissionDenied:
+        q->setError(QFile::PermissionsError, QLatin1String("permission denied"));
+        break;
+    case KErrAbort:
+        q->setError(QFile::AbortError, QLatin1String("aborted"));
+        break;
+    case KErrCancel:
+        q->setError(QFile::AbortError, QLatin1String("cancelled"));
+        break;
+    case KErrTimedOut:
+        q->setError(QFile::TimeOutError, QLatin1String("timed out"));
+        break;
+    default:
+        q->setError(defaultError, defaultString);
+        break;
+    }
+}
+
 #endif
 
@@ -99,5 +133,5 @@
                 && QT_STAT(QFile::encodeName(fileName), &statBuf) == 0
                 && (statBuf.st_mode & S_IFMT) == S_IFREG) {
-                mode += "+";
+                mode += '+';
             } else {
                 mode = "wb+";
@@ -428,6 +462,8 @@
     ) // End TRAP
     delete fm;
-    // ### Add error reporting on failure
-    return (err == KErrNone);
+    if (err == KErrNone)
+        return true;
+    d->setSymbianError(err, QFile::CopyError, QLatin1String("copy error"));
+    return false;
 #else
     Q_UNUSED(newName);
@@ -669,4 +705,14 @@
         } else if (fd == -1) {
             // ### actually covers two cases: d->fh and when the file is not open
+#if defined(Q_OS_SYMBIAN)
+            // Optimisation for Symbian where fileFlags() calls both doStat() and isSymlink(), but rarely on real links.
+            // When the filename is not a link, lstat will return the same info as stat, but this also removes
+            // any need for a further call to lstat to check if the file is a link.
+            need_lstat = false;
+            could_stat = (QT_LSTAT(nativeFilePath.constData(), &st) == 0);
+            is_link = could_stat ? S_ISLNK(st.st_mode) : false;
+            // if it turns out this was a link, we can call stat too.
+            if (is_link)
+#endif
             could_stat = (QT_STAT(nativeFilePath.constData(), &st) == 0);
         } else {
@@ -1271,5 +1317,5 @@
     int extra = offset % pageSize;
 
-    if (size + extra > (size_t)-1) {
+    if (quint64(size + extra) > quint64((size_t)-1)) {
         q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL)));
         return 0;
Index: /trunk/src/corelib/io/qfsfileengine_win.cpp
===================================================================
--- /trunk/src/corelib/io/qfsfileengine_win.cpp	(revision 768)
+++ /trunk/src/corelib/io/qfsfileengine_win.cpp	(revision 769)
@@ -1485,5 +1485,5 @@
         //### what to do with permissions if we don't use NTFS
         // for now just add all permissions and what about exe missions ??
-        // also qt_ntfs_permission_lookup is now not set by defualt ... should it ?
+        // also qt_ntfs_permission_lookup is now not set by default ... should it ?
         ret |= QAbstractFileEngine::ReadOtherPerm | QAbstractFileEngine::ReadGroupPerm
             | QAbstractFileEngine::ReadOwnerPerm | QAbstractFileEngine::ReadUserPerm
Index: /trunk/src/corelib/io/qiodevice.cpp
===================================================================
--- /trunk/src/corelib/io/qiodevice.cpp	(revision 768)
+++ /trunk/src/corelib/io/qiodevice.cpp	(revision 769)
@@ -85,8 +85,4 @@
 #endif
 
-#ifndef QIODEVICE_BUFFERSIZE
-#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
-#endif
-
 #define Q_VOID
 
@@ -124,5 +120,7 @@
     : openMode(QIODevice::NotOpen), buffer(QIODEVICE_BUFFERSIZE),
       pos(0), devicePos(0)
+       , pPos(&pos), pDevicePos(&devicePos)
        , baseReadLineDataCalled(false)
+       , firstRead(true)
        , accessMode(Unset)
 #ifdef QT_NO_QOBJECT
@@ -283,6 +281,5 @@
     meaningless when used with some subclasses. Some of these
     restrictions are implied by the type of device that is represented
-    by a subclass; for example, access to a QBuffer is always
-    unbuffered. In other cases, the restriction may be due to the
+    by a subclass. In other cases, the restriction may be due to the
     implementation, or may be imposed by the underlying platform; for
     example, QTcpSocket does not support \c Unbuffered mode, and
@@ -451,9 +448,13 @@
 void QIODevice::setOpenMode(OpenMode openMode)
 {
+    Q_D(QIODevice);
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::setOpenMode(0x%x)\n", this, int(openMode));
 #endif
-    d_func()->openMode = openMode;
-    d_func()->accessMode = QIODevicePrivate::Unset;
+    d->openMode = openMode;
+    d->accessMode = QIODevicePrivate::Unset;
+    d->firstRead = true;
+    if (!isReadable())
+        d->buffer.clear();
 }
 
@@ -539,4 +540,5 @@
     d->buffer.clear();
     d->accessMode = QIODevicePrivate::Unset;
+    d->firstRead = true;
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::open(0x%x)\n", this, quint32(mode));
@@ -568,4 +570,5 @@
     d->pos = 0;
     d->buffer.clear();
+    d->firstRead = true;
 }
 
@@ -731,4 +734,10 @@
 }
 
+#ifdef Q_CC_RVCT
+// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
+#pragma push
+#pragma arm
+#endif
+
 /*!
     Reads at most \a maxSize bytes from the device into \a data, and
@@ -747,6 +756,4 @@
 {
     Q_D(QIODevice);
-    CHECK_READABLE(read, qint64(-1));
-    CHECK_MAXLEN(read, qint64(-1));
 
 #if defined QIODEVICE_DEBUG
@@ -754,5 +761,4 @@
            this, data, int(maxSize), int(d->pos), int(d->buffer.size()));
 #endif
-    const bool sequential = d->isSequential();
 
     // Short circuit for getChar()
@@ -760,6 +766,5 @@
         int chint;
         while ((chint = d->buffer.getChar()) != -1) {
-            if (!sequential)
-                ++d->pos;
+            ++(*d->pPos);
 
             char c = char(uchar(chint));
@@ -775,49 +780,68 @@
     }
 
+    CHECK_MAXLEN(read, qint64(-1));
     qint64 readSoFar = 0;
     bool moreToRead = true;
     do {
-        int lastReadChunkSize = 0;
-
         // Try reading from the buffer.
-        if (!d->buffer.isEmpty()) {
-            lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar);
+        int lastReadChunkSize = d->buffer.read(data, maxSize);
+        if (lastReadChunkSize > 0) {
+            *d->pPos += lastReadChunkSize;
             readSoFar += lastReadChunkSize;
-            if (!sequential)
-                d->pos += lastReadChunkSize;
+            // fast exit when satisfied by buffer
+            if (lastReadChunkSize == maxSize && !(d->openMode & Text))
+                return readSoFar;
+
+            data += lastReadChunkSize;
+            maxSize -= lastReadChunkSize;
 #if defined QIODEVICE_DEBUG
             printf("%p \treading %d bytes from buffer into position %d\n", this, lastReadChunkSize,
                    int(readSoFar) - lastReadChunkSize);
 #endif
-        } else if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
-            // In buffered mode, we try to fill up the QIODevice buffer before
-            // we do anything else.
-            int bytesToBuffer = qMax(maxSize - readSoFar, QIODEVICE_BUFFERSIZE);
-            char *writePointer = d->buffer.reserve(bytesToBuffer);
-
-            // Make sure the device is positioned correctly.
-            if (d->pos != d->devicePos && !sequential && !seek(d->pos))
-                return qint64(-1);
-            qint64 readFromDevice = readData(writePointer, bytesToBuffer);
-            d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice)));
-
-            if (readFromDevice > 0) {
-                if (!sequential)
-                    d->devicePos += readFromDevice;
-#if defined QIODEVICE_DEBUG
-                printf("%p \treading %d from device into buffer\n", this, int(readFromDevice));
-#endif
-
-                if (readFromDevice < bytesToBuffer)
-                    d->buffer.truncate(int(readFromDevice));
-                if (!d->buffer.isEmpty()) {
-                    lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar);
-                    readSoFar += lastReadChunkSize;
-                    if (!sequential)
-                        d->pos += lastReadChunkSize;
-#if defined QIODEVICE_DEBUG
-                    printf("%p \treading %d bytes from buffer at position %d\n", this,
-                           lastReadChunkSize, int(readSoFar));
-#endif
+        } else {
+            if (d->firstRead) {
+                // this is the first time the file has been read, check it's valid and set up pos pointers
+                // for fast pos updates.
+                CHECK_READABLE(read, qint64(-1));
+                d->firstRead = false;
+                if (d->isSequential()) {
+                    d->pPos = &d->seqDumpPos;
+                    d->pDevicePos = &d->seqDumpPos;
+                }
+            }
+
+            if (!maxSize)
+                return readSoFar;
+
+            if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
+                // In buffered mode, we try to fill up the QIODevice buffer before
+                // we do anything else.
+                // buffer is empty at this point, try to fill it
+                int bytesToBuffer = QIODEVICE_BUFFERSIZE;
+                char *writePointer = d->buffer.reserve(bytesToBuffer);
+
+                // Make sure the device is positioned correctly.
+                if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
+                    return readSoFar ? readSoFar : qint64(-1);
+                qint64 readFromDevice = readData(writePointer, bytesToBuffer);
+                d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice)));
+
+                if (readFromDevice > 0) {
+                    *d->pDevicePos += readFromDevice;
+#if defined QIODEVICE_DEBUG
+                    printf("%p \treading %d from device into buffer\n", this, int(readFromDevice));
+#endif
+
+                    if (!d->buffer.isEmpty()) {
+                        lastReadChunkSize = d->buffer.read(data, maxSize);
+                        readSoFar += lastReadChunkSize;
+                        data += lastReadChunkSize;
+                        maxSize -= lastReadChunkSize;
+                        *d->pPos += lastReadChunkSize;
+#if defined QIODEVICE_DEBUG
+                        printf("%p \treading %d bytes from buffer at position %d\n", this,
+                               lastReadChunkSize, int(readSoFar));
+#endif
+                    }
                 }
             }
@@ -825,9 +849,9 @@
 
         // If we need more, try reading from the device.
-        if (readSoFar < maxSize) {
+        if (maxSize > 0) {
             // Make sure the device is positioned correctly.
-            if (d->pos != d->devicePos && !sequential && !seek(d->pos))
-                return qint64(-1);
-            qint64 readFromDevice = readData(data + readSoFar, maxSize - readSoFar);
+            if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
+                return readSoFar ? readSoFar : qint64(-1);
+            qint64 readFromDevice = readData(data, maxSize);
 #if defined QIODEVICE_DEBUG
             printf("%p \treading %d bytes from device (total %d)\n", this, int(readFromDevice), int(readSoFar));
@@ -837,25 +861,19 @@
                 return -1;
             }
-            if (readFromDevice <= 0) {
-                moreToRead = false;
-            } else {
-                // see if we read as much data as we asked for
-                if (readFromDevice < maxSize - readSoFar)
-                    moreToRead = false;
-
+            if (readFromDevice > 0) {
                 lastReadChunkSize += int(readFromDevice);
                 readSoFar += readFromDevice;
-                if (!sequential) {
-                    d->pos += readFromDevice;
-                    d->devicePos += readFromDevice;
-                }
+                data += readFromDevice;
+                maxSize -= readFromDevice;
+                *d->pPos += readFromDevice;
+                *d->pDevicePos += readFromDevice;
             }
-        } else {
-            moreToRead = false;
         }
+        // Best attempt has been made to read data, don't try again except for text mode adjustment below
+        moreToRead = false;
 
         if (readSoFar && d->openMode & Text) {
-            char *readPtr = data + readSoFar - lastReadChunkSize;
-            const char *endPtr = data + readSoFar;
+            char *readPtr = data - lastReadChunkSize;
+            const char *endPtr = data;
 
             if (readPtr < endPtr) {
@@ -872,6 +890,9 @@
                     if (ch != '\r')
                         *writePtr++ = ch;
-                    else
+                    else {
                         --readSoFar;
+                        --data;
+                        ++maxSize;
+                    }
                 }
 
@@ -887,8 +908,12 @@
     printf("%p \treturning %d, d->pos == %d, d->buffer.size() == %d\n", this,
            int(readSoFar), int(d->pos), d->buffer.size());
-    debugBinaryString(data, readSoFar);
+    debugBinaryString(data - readSoFar, readSoFar);
 #endif
     return readSoFar;
 }
+
+#ifdef Q_CC_RVCT
+#pragma pop
+#endif
 
 /*!
@@ -999,4 +1024,10 @@
 }
 
+#ifdef Q_CC_RVCT
+// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
+#pragma push
+#pragma arm
+#endif
+
 /*!
     This function reads a line of ASCII characters from the device, up
@@ -1004,6 +1035,6 @@
     data, and returns the number of bytes read. If a line could not be
     read but no error ocurred, this function returns 0. If an error
-    occurs, this function returns what it could the length of what
-    could be read, or -1 if nothing was read.
+    occurs, this function returns the length of what could be read, or
+    -1 if nothing was read.
 
     A terminating '\0' byte is always appended to \a data, so \a
@@ -1230,4 +1261,8 @@
     return readSoFar;
 }
+
+#ifdef Q_CC_RVCT
+#pragma pop
+#endif
 
 /*!
@@ -1418,7 +1453,5 @@
 bool QIODevice::getChar(char *c)
 {
-    Q_D(QIODevice);
-    CHECK_READABLE(getChar, false);
-
+    // readability checked in read()
     char ch;
     return (1 == read(c ? c : &ch, 1));
Index: /trunk/src/corelib/io/qiodevice_p.h
===================================================================
--- /trunk/src/corelib/io/qiodevice_p.h	(revision 768)
+++ /trunk/src/corelib/io/qiodevice_p.h	(revision 769)
@@ -65,4 +65,124 @@
 QT_BEGIN_NAMESPACE
 
+#ifndef QIODEVICE_BUFFERSIZE
+#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
+#endif
+
+// This is QIODevice's read buffer, optimised for read(), isEmpty() and getChar()
+class QIODevicePrivateLinearBuffer
+{
+public:
+    QIODevicePrivateLinearBuffer(int) : len(0), first(0), buf(0), capacity(0) {
+    }
+    ~QIODevicePrivateLinearBuffer() {
+        delete [] buf;
+    }
+    void clear() {
+        first = buf;
+        len = 0;
+    }
+    int size() const {
+        return len;
+    }
+    bool isEmpty() const {
+        return len == 0;
+    }
+    void skip(int n) {
+        if (n >= len) {
+            clear();
+        } else {
+            len -= n;
+            first += n;
+        }
+    }
+    int getChar() {
+        if (len == 0)
+            return -1;
+        int ch = uchar(*first);
+        len--;
+        first++;
+        return ch;
+    }
+    int read(char* target, int size) {
+        int r = qMin(size, len);
+        memcpy(target, first, r);
+        len -= r;
+        first += r;
+        return r;
+    }
+    char* reserve(int size) {
+        makeSpace(size + len, freeSpaceAtEnd);
+        char* writePtr = first + len;
+        len += size;
+        return writePtr;
+    }
+    void chop(int size) {
+        if (size >= len) {
+            clear();
+        } else {
+            len -= size;
+        }
+    }
+    QByteArray readAll() {
+        char* f = first;
+        int l = len;
+        clear();
+        return QByteArray(f, l);
+    }
+    int readLine(char* target, int size) {
+        int r = qMin(size, len);
+        char* eol = static_cast<char*>(memchr(first, '\n', r));
+        if (eol)
+            r = 1+(eol-first);
+        memcpy(target, first, r);
+        len -= r;
+        first += r;
+        return int(r);
+        }
+    bool canReadLine() const {
+        return memchr(first, '\n', len);
+    }
+    void ungetChar(char c) {
+        if (first == buf) {
+            // underflow, the existing valid data needs to move to the end of the (potentially bigger) buffer
+            makeSpace(len+1, freeSpaceAtStart);
+        }
+        first--;
+        len++;
+        *first = c;
+    }
+
+private:
+    enum FreeSpacePos {freeSpaceAtStart, freeSpaceAtEnd};
+    void makeSpace(size_t required, FreeSpacePos where) {
+        size_t newCapacity = qMax(capacity, size_t(QIODEVICE_BUFFERSIZE));
+        while (newCapacity < required)
+            newCapacity *= 2;
+        int moveOffset = (where == freeSpaceAtEnd) ? 0 : newCapacity - len;
+        if (newCapacity > capacity) {
+            // allocate more space
+            char* newBuf = new char[newCapacity];
+            memmove(newBuf + moveOffset, first, len);
+            delete [] buf;
+            buf = newBuf;
+            capacity = newCapacity;
+        } else {
+            // shift any existing data to make space
+            memmove(buf + moveOffset, first, len);
+        }
+        first = buf + moveOffset;
+    }
+
+private:
+    // length of the unread data
+    int len;
+    // start of the unread data
+    char* first;
+    // the allocated buffer
+    char* buf;
+    // allocated buffer size
+    size_t capacity;
+};
+
 class Q_CORE_EXPORT QIODevicePrivate
 #ifndef QT_NO_QOBJECT
@@ -79,8 +199,13 @@
     QString errorString;
 
-    QRingBuffer buffer;
+    QIODevicePrivateLinearBuffer buffer;
     qint64 pos;
     qint64 devicePos;
+    // these three are for fast position updates during read, avoiding isSequential test
+    qint64 seqDumpPos;
+    qint64 *pPos;
+    qint64 *pDevicePos;
     bool baseReadLineDataCalled;
+    bool firstRead;
 
     virtual bool putCharHelper(char c);
Index: /trunk/src/corelib/io/qprocess.cpp
===================================================================
--- /trunk/src/corelib/io/qprocess.cpp	(revision 768)
+++ /trunk/src/corelib/io/qprocess.cpp	(revision 769)
@@ -552,4 +552,14 @@
     the interpreter to execute the desired command.
 
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use the functions kill() or terminate()
+    must have the \c PowerMgmt platform security capability. If the client
+    process lacks this capability, these functions will fail.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
+
     \sa QBuffer, QFile, QTcpSocket
 */
@@ -2030,7 +2040,11 @@
     calling kill().
 
+    On Symbian, this function requires platform security capability
+    \c PowerMgmt. If absent, the process will panic with KERN-EXEC 46.
+
     \note Terminating running processes from other processes will typically
     cause a panic in Symbian due to platform security.
 
+    \sa \l {Symbian Platform Security Requirements}
     \sa kill()
 */
@@ -2047,4 +2061,8 @@
     SIGKILL signal is sent to the process.
 
+    On Symbian, this function requires platform security capability
+    \c PowerMgmt. If absent, the process will panic with KERN-EXEC 46.
+
+    \sa \l {Symbian Platform Security Requirements}
     \sa terminate()
 */
Index: /trunk/src/corelib/io/qprocess_symbian.cpp
===================================================================
--- /trunk/src/corelib/io/qprocess_symbian.cpp	(revision 768)
+++ /trunk/src/corelib/io/qprocess_symbian.cpp	(revision 769)
@@ -238,9 +238,13 @@
                 endQuote += QLatin1String("\\");
             }
-            commandLine += QLatin1String(" \"") + tmp.left(i) + endQuote;
+            commandLine += QLatin1String("\"") + tmp.left(i) + endQuote + QLatin1Char(' ');
         } else {
-            commandLine += QLatin1Char(' ') + tmp;
+            commandLine += tmp + QLatin1Char(' ');
         }
     }
+
+    // Chop the extra trailing space if any arguments were appended
+    if (arguments.size())
+        commandLine.chop(1);
 }
 
@@ -372,4 +376,5 @@
 QProcessActive::~QProcessActive()
 {
+    Cancel();
     process = NULL;
     pproc = NULL;
@@ -478,4 +483,5 @@
 QProcessManagerMediator::~QProcessManagerMediator()
 {
+    Cancel();
     processManagerThread.Close();
     currentCommand = ENoCommand;
Index: /trunk/src/corelib/io/qprocess_unix.cpp
===================================================================
--- /trunk/src/corelib/io/qprocess_unix.cpp	(revision 768)
+++ /trunk/src/corelib/io/qprocess_unix.cpp	(revision 769)
@@ -784,5 +784,5 @@
     // did we read an error message?
     if (i > 0)
-        q_func()->setErrorString(QString::fromUtf16(buf, i / sizeof(QChar)));
+        q_func()->setErrorString(QString((const QChar *)buf, i / sizeof(QChar)));
 
     return i <= 0;
Index: /trunk/src/corelib/io/qresource.cpp
===================================================================
--- /trunk/src/corelib/io/qresource.cpp	(revision 768)
+++ /trunk/src/corelib/io/qresource.cpp	(revision 769)
@@ -556,4 +556,6 @@
   \obsolete
 
+  Use QDir::addSearchPath() with a prefix instead.
+
   Adds \a path to the search paths searched in to find resources that are
   not specified with an absolute path. The \a path must be an absolute
@@ -562,8 +564,5 @@
   The default search path is to search only in the root (\c{:/}). The last
   path added will be consulted first upon next QResource creation.
-
-  Use QDir::addSearchPath() with a prefix instead.
-*/
-
+*/
 void
 QResource::addSearchPath(const QString &path)
@@ -579,4 +578,8 @@
 
 /*!
+  \obsolete
+
+  Use QDir::searchPaths() instead.
+  
   Returns the current search path list. This list is consulted when
   creating a relative resource.
Index: /trunk/src/corelib/io/qsettings.cpp
===================================================================
--- /trunk/src/corelib/io/qsettings.cpp	(revision 768)
+++ /trunk/src/corelib/io/qsettings.cpp	(revision 769)
@@ -1092,28 +1092,21 @@
 }
 
-static QString getPath(QSettings::Format format, QSettings::Scope scope)
-{
-    Q_ASSERT((int)QSettings::NativeFormat == 0);
-    Q_ASSERT((int)QSettings::IniFormat == 1);
-
+static void initDefaultPaths(QMutexLocker *locker)
+{
+    PathHash *pathHash = pathHashFunc();
     QString homePath = QDir::homePath();
     QString systemPath;
 
-    QMutexLocker locker(globalMutex());
-    PathHash *pathHash = pathHashFunc();
-    bool loadSystemPath = pathHash->isEmpty();
-    locker.unlock();
-
-    if (loadSystemPath) {
-        /*
-           QLibraryInfo::location() uses QSettings, so in order to
-           avoid a dead-lock, we can't hold the global mutex while
-           calling it.
-       */
-        systemPath = QLibraryInfo::location(QLibraryInfo::SettingsPath);
-        systemPath += QLatin1Char('/');
-    }
-
-    locker.relock();
+    locker->unlock();
+	
+    /*
+       QLibraryInfo::location() uses QSettings, so in order to
+       avoid a dead-lock, we can't hold the global mutex while
+       calling it.
+    */
+    systemPath = QLibraryInfo::location(QLibraryInfo::SettingsPath);
+    systemPath += QLatin1Char('/');
+
+    locker->relock();
     if (pathHash->isEmpty()) {
         /*
@@ -1173,4 +1166,15 @@
 #endif
     }
+}
+
+static QString getPath(QSettings::Format format, QSettings::Scope scope)
+{
+    Q_ASSERT((int)QSettings::NativeFormat == 0);
+    Q_ASSERT((int)QSettings::IniFormat == 1);
+
+    QMutexLocker locker(globalMutex());
+    PathHash *pathHash = pathHashFunc();
+    if (pathHash->isEmpty())
+        initDefaultPaths(&locker);
 
     QString result = pathHash->value(pathHashKey(format, scope));
@@ -3483,4 +3487,6 @@
     QMutexLocker locker(globalMutex());
     PathHash *pathHash = pathHashFunc();
+    if (pathHash->isEmpty())
+        initDefaultPaths(&locker);
     pathHash->insert(pathHashKey(format, scope), path + QDir::separator());
 }
Index: /trunk/src/corelib/io/qurl.cpp
===================================================================
--- /trunk/src/corelib/io/qurl.cpp	(revision 768)
+++ /trunk/src/corelib/io/qurl.cpp	(revision 769)
@@ -339,4 +339,5 @@
     bool hasFragment;
     bool isValid;
+    bool isHostValid;
 
     char valueDelimiter;
@@ -438,7 +439,8 @@
 
 // scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-static void QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData)
+static bool QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData)
 {
     bool first = true;
+    bool isSchemeValid = true;
 
     parseData->scheme = *ptr;
@@ -447,6 +449,7 @@
         if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
             ;
-        } else if (!first && ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.')) {
-            ;
+        } else if ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.') {
+            if (first)
+                isSchemeValid = false;
         } else {
             break;
@@ -458,4 +461,5 @@
 
     if (**ptr != ':') {
+        isSchemeValid = true;
         *ptr = parseData->scheme;
     } else {
@@ -463,4 +467,6 @@
         ++(*ptr); // skip ':'
     }
+
+    return isSchemeValid;
 }
 
@@ -2986,5 +2992,7 @@
         if (c == '-' || (c >= '0' && c <= '9')
             || (c >= 'A' && c <= 'Z')
-            || (c >= 'a' && c <= 'z'))
+            || (c >= 'a' && c <= 'z')
+            //underscore is not supposed to be allowed, but other browser accept it (QTBUG-7434)
+            || c == '_')
             continue;
 
@@ -3125,8 +3133,9 @@
 
 static const char * const idn_whitelist[] = {
-    "ac", "at",
-    "br",
+    "ac", "ar", "at",
+    "biz", "br",
     "cat", "ch", "cl", "cn",
     "de", "dk",
+    "es",
     "fi",
     "gr",
@@ -3142,4 +3151,7 @@
     "th", "tm", "tw",
     "vn",
+    "xn--mgbaam7a8h",           // UAE
+    "xn--mgberp4a5d4ar",        // Saudi Arabia
+    "xn--wgbh1c"                // Egypt
 };
 
@@ -3242,6 +3254,9 @@
         int idx = nextDotDelimiter(domain, lastIdx);
         int labelLength = idx - lastIdx;
-        if (labelLength == 0)
+        if (labelLength == 0) {
+            if (idx == domain.length())
+                break;
             return QString(); // two delimiters in a row -- empty label not allowed
+        }
 
         // RFC 3490 says, about the ToASCII operation:
@@ -3297,4 +3312,5 @@
             labelLength = result.length() - prevLen;
             register int toReserve = labelLength + 4 + 6; // "xn--" plus some extra bytes
+            aceForm.resize(0);
             if (toReserve > aceForm.capacity())
                 aceForm.reserve(toReserve);
@@ -3333,4 +3349,5 @@
     port = -1;
     isValid = false;
+    isHostValid = true;
     parsingMode = QUrl::TolerantMode;
     valueDelimiter = '=';
@@ -3359,4 +3376,5 @@
       hasFragment(copy.hasFragment),
       isValid(copy.isValid),
+      isHostValid(copy.isHostValid),
       valueDelimiter(copy.valueDelimiter),
       pairDelimiter(copy.pairDelimiter),
@@ -3389,4 +3407,6 @@
     } else {
         that->host = qt_ACE_do(host, NormalizeAce);
+        if (that->host.isNull())
+            that->isHostValid = false;
     }
     return that->host;
@@ -3465,4 +3485,5 @@
 void QUrlPrivate::setAuthority(const QString &auth)
 {
+    isHostValid = true;
     if (auth.isEmpty())
         return;
@@ -3741,5 +3762,17 @@
 
     // optional scheme
-    _scheme(ptr, &parseData);
+    bool isSchemeValid = _scheme(ptr, &parseData);
+
+    if (isSchemeValid == false) {
+        that->isValid = false;
+        char ch = *((*ptr)++);
+        that->errorInfo.setParams(*ptr, QT_TRANSLATE_NOOP(QUrl, "unexpected URL scheme"),
+                                  0, ch);
+        QURL_SETFLAG(that->stateFlags, Validated | Parsed);
+#if defined (QURL_DEBUG)
+        qDebug("QUrlPrivate::parse(), unrecognized: %c%s", ch, *ptr);
+#endif
+        return;
+    }
 
     // hierpart
@@ -4143,5 +4176,5 @@
     if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Validated)) d->validate();
 
-    return d->isValid;
+    return d->isValid && d->isHostValid;
 }
 
@@ -4395,5 +4428,4 @@
     detach();
     QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized);
-
     d->setAuthority(authority);
 }
@@ -4616,4 +4648,5 @@
     if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
     detach();
+    d->isHostValid = true;
     QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized | QUrlPrivate::HostCanonicalized);
 
Index: /trunk/src/corelib/kernel/qabstractitemmodel.cpp
===================================================================
--- /trunk/src/corelib/kernel/qabstractitemmodel.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qabstractitemmodel.cpp	(revision 769)
@@ -1006,4 +1006,7 @@
     Returns the child of the model index that is stored in the given \a row and
     \a column.
+
+    \note This function does not work for an invalid model index which is often
+    used as the root index.
 
     \sa parent(), sibling()
Index: /trunk/src/corelib/kernel/qcore_symbian_p.cpp
===================================================================
--- /trunk/src/corelib/kernel/qcore_symbian_p.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qcore_symbian_p.cpp	(revision 769)
@@ -72,5 +72,5 @@
     return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length());
 #else
-    return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
+    return QString(reinterpret_cast<const QChar *>(aDescriptor.Ptr()), aDescriptor.Length());
 #endif
 }
@@ -133,7 +133,8 @@
     {
 #ifdef Q_WS_S60
-        _LIT(KLibName_3_1, "qts60plugin_3_1.dll");
-        _LIT(KLibName_3_2, "qts60plugin_3_2.dll");
-        _LIT(KLibName_5_0, "qts60plugin_5_0.dll");
+        _LIT(KLibName_3_1, "qts60plugin_3_1" QT_LIBINFIX_UNICODE L".dll");
+        _LIT(KLibName_3_2, "qts60plugin_3_2" QT_LIBINFIX_UNICODE L".dll");
+        _LIT(KLibName_5_0, "qts60plugin_5_0" QT_LIBINFIX_UNICODE L".dll");
+
         TPtrC libName;
         TInt uidValue;
Index: /trunk/src/corelib/kernel/qcore_symbian_p.h
===================================================================
--- /trunk/src/corelib/kernel/qcore_symbian_p.h	(revision 768)
+++ /trunk/src/corelib/kernel/qcore_symbian_p.h	(revision 769)
@@ -60,4 +60,13 @@
 #include <qhash.h>
 #include <f32file.h>
+
+#define QT_LSTRING2(x) L##x
+#define QT_LSTRING(x) QT_LSTRING2(x)
+
+#if defined(QT_LIBINFIX)
+#  define QT_LIBINFIX_UNICODE QT_LSTRING(QT_LIBINFIX)
+#else
+#  define QT_LIBINFIX_UNICODE L""
+#endif
 
 QT_BEGIN_HEADER
Index: /trunk/src/corelib/kernel/qcoreapplication.cpp
===================================================================
--- /trunk/src/corelib/kernel/qcoreapplication.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qcoreapplication.cpp	(revision 769)
@@ -68,4 +68,5 @@
 #  include <exception>
 #  include <f32file.h>
+#  include <e32ldr.h>
 #  include "qeventdispatcher_symbian_p.h"
 #  include "private/qcore_symbian_p.h"
@@ -597,4 +598,25 @@
     extern void qt_core_eval_init(uint);
     qt_core_eval_init(d->application_type);
+#endif
+
+#if    defined(Q_OS_SYMBIAN)  \
+    && defined(Q_CC_NOKIAX86) \
+    && defined(QT_DEBUG)
+    /**
+     * Prevent the executable from being locked in the Symbian emulator. The
+     * code dramatically simplifies debugging on Symbian, but beyond that has
+     * no impact.
+     *
+     * Force the ZLazyUnloadTimer to fire and therefore unload code segments
+     * immediately. The code affects Symbian's file server and on the other
+     * hand needs only to be run once in each emulator run.
+     */
+    {
+        RLoader loader;
+        CleanupClosePushL(loader);
+        User::LeaveIfError(loader.Connect());
+        User::LeaveIfError(loader.CancelLazyDllUnload());
+        CleanupStack::PopAndDestroy(&loader);
+    }
 #endif
 
@@ -2250,5 +2272,6 @@
             TInt err = finder.FindByDir(tempPathPtr, tempPathPtr);
             while (err == KErrNone) {
-                QString foundDir = QString::fromUtf16(finder.File().Ptr(), finder.File().Length());
+                QString foundDir(reinterpret_cast<const QChar *>(finder.File().Ptr()),
+                                 finder.File().Length());
                 foundDir = QDir(foundDir).canonicalPath();
                 if (!app_libpaths->contains(foundDir))
Index: /trunk/src/corelib/kernel/qeventdispatcher_symbian.cpp
===================================================================
--- /trunk/src/corelib/kernel/qeventdispatcher_symbian.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qeventdispatcher_symbian.cpp	(revision 769)
@@ -44,10 +44,18 @@
 #include <qcoreapplication.h>
 #include <private/qcoreapplication_p.h>
-#include <qdatetime.h>
 
 #include <unistd.h>
 #include <errno.h>
 
+#include <net/if.h>
+
 QT_BEGIN_NAMESPACE
+
+#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
+// when the system UI is Qt based, priority drop is not needed as CPU starved processes will not be killed.
+#undef QT_SYMBIAN_PRIORITY_DROP
+#else
+#define QT_SYMBIAN_PRIORITY_DROP
+#endif
 
 #define WAKE_UP_PRIORITY CActive::EPriorityStandard
@@ -93,23 +101,38 @@
 {
 public:
-    QSelectMutexGrabber(int fd, QMutex *mutex)
-        : m_mutex(mutex)
+    QSelectMutexGrabber(int fd, QMutex *threadMutex, QMutex *selectCallMutex)
+        : m_threadMutex(threadMutex), m_selectCallMutex(selectCallMutex), bHasThreadLock(false)
     {
-        if (m_mutex->tryLock())
+        // see if selectThread is waiting m_waitCond
+        // if yes ... dont write to pipe
+        if (m_threadMutex->tryLock()) {
+            bHasThreadLock = true;
             return;
+        }
+
+        // still check that SelectThread
+        // is in select call
+        if (m_selectCallMutex->tryLock()) {
+            m_selectCallMutex->unlock();
+            return;
+        }
 
         char dummy = 0;
         qt_pipe_write(fd, &dummy, 1);
 
-        m_mutex->lock();
+        m_threadMutex->lock();
+        bHasThreadLock = true;
     }
 
     ~QSelectMutexGrabber()
     {
-        m_mutex->unlock();
+        if(bHasThreadLock)
+            m_threadMutex->unlock();
     }
 
 private:
-    QMutex *m_mutex;
+    QMutex *m_threadMutex;
+    QMutex *m_selectCallMutex;
+    bool bHasThreadLock;
 };
 
@@ -393,5 +416,10 @@
         int ret;
         int savedSelectErrno;
-        ret = qt_socket_select(maxfd, &readfds, &writefds, &exceptionfds, 0);
+        {
+            // helps fighting the race condition between
+            // selctthread and new socket requests (cancel, restart ...)
+            QMutexLocker locker(&m_selectCallMutex);
+            ret = qt_socket_select(maxfd, &readfds, &writefds, &exceptionfds, 0);
+        }
         savedSelectErrno = errno;
 
@@ -457,7 +485,7 @@
 
                 // traversed all, so update
+                updateActivatedNotifiers(QSocketNotifier::Exception, &exceptionfds);
                 updateActivatedNotifiers(QSocketNotifier::Read, &readfds);
                 updateActivatedNotifiers(QSocketNotifier::Write, &writefds);
-                updateActivatedNotifiers(QSocketNotifier::Exception, &exceptionfds);
 
                 break;
@@ -469,7 +497,7 @@
             }
         } else {
+            updateActivatedNotifiers(QSocketNotifier::Exception, &exceptionfds);
             updateActivatedNotifiers(QSocketNotifier::Read, &readfds);
             updateActivatedNotifiers(QSocketNotifier::Write, &writefds);
-            updateActivatedNotifiers(QSocketNotifier::Exception, &exceptionfds);
         }
 
@@ -488,5 +516,7 @@
     }
 
-    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex);
+    QMutexLocker locker(&m_grabberMutex);
+
+    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex, &m_selectCallMutex);
 
     Q_ASSERT(!m_AOStatuses.contains(notifier));
@@ -499,5 +529,7 @@
 void QSelectThread::cancelSocketEvents ( QSocketNotifier *notifier )
 {
-    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex);
+    QMutexLocker locker(&m_grabberMutex);
+
+    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex, &m_selectCallMutex);
 
     m_AOStatuses.remove(notifier);
@@ -508,5 +540,7 @@
 void QSelectThread::restart()
 {
-    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex);
+    QMutexLocker locker(&m_grabberMutex);
+
+    QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex, &m_selectCallMutex);
 
     m_waitCond.wakeAll();
@@ -564,5 +598,15 @@
              * then signal RequestComplete for it
              */
-            qWarning("exception on %d", i.key()->socket());
+            qWarning("exception on %d [will do setdefaultif(0) - hack]", i.key()->socket());
+            // quick fix; there is a bug
+            // when doing read on socket
+            // errors not preoperly mapped
+            // after offline-ing the device
+            // on some devices we do get exception
+            // close all exiting sockets
+            // and reset default IAP
+            if(::setdefaultif(0) != KErrNone) // well we can't do much about it
+                qWarning("setdefaultif(0) failed");
+
             toRemove.append(i.key());
             TRequestStatus *status = i.value();
@@ -623,4 +667,72 @@
     }
 }
+
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+class QIdleDetectorThread
+{
+public:
+    QIdleDetectorThread()
+    : m_state(STATE_RUN), m_stop(false)
+    {
+        qt_symbian_throwIfError(m_lock.CreateLocal(0));
+        TInt err = m_idleDetectorThread.Create(KNullDesC(), &idleDetectorThreadFunc, 1024, NULL, this);
+        if (err != KErrNone)
+            m_lock.Close();
+        qt_symbian_throwIfError(err);
+        m_idleDetectorThread.SetPriority(EPriorityAbsoluteBackgroundNormal);
+        m_idleDetectorThread.Resume();
+    }
+
+    ~QIdleDetectorThread()
+    {
+        // close down the idle thread because if corelib is loaded temporarily, this would leak threads into the host process
+        m_stop = true;
+        m_lock.Signal();
+        m_idleDetectorThread.SetPriority(EPriorityNormal);
+        TRequestStatus s;
+        m_idleDetectorThread.Logon(s);
+        User::WaitForRequest(s);
+        m_idleDetectorThread.Close();
+        m_lock.Close();
+    }
+
+    void kick()
+    {
+        m_state = STATE_KICKED;
+        m_lock.Signal();
+    }
+
+    bool hasRun()
+    {
+        return m_state == STATE_RUN;
+    }
+
+private:
+    static TInt idleDetectorThreadFunc(TAny* self)
+    {
+        static_cast<QIdleDetectorThread*>(self)->IdleLoop();
+        return KErrNone;
+    }
+
+    void IdleLoop()
+    {
+        while (!m_stop) {
+            m_lock.Wait();
+            m_state = STATE_RUN;
+        }
+    }
+
+private:
+    enum IdleStates {STATE_KICKED, STATE_RUN} m_state;
+    bool m_stop;
+    RThread m_idleDetectorThread;
+    RSemaphore m_lock;
+};
+
+Q_GLOBAL_STATIC(QIdleDetectorThread, idleDetectorThread);
+
+const int maxBusyTime = 2000; // maximum time we allow idle detector to be blocked before worrying, in milliseconds
+const int baseDelay = 1000; // minimum delay time used when backing off to allow idling, in microseconds
+#endif
 
 QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent)
@@ -634,9 +746,13 @@
       m_noSocketEvents(false)
 {
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+    m_delay = baseDelay;
+    m_avgEventTime = 0;
+    idleDetectorThread();
+#endif
 }
 
 QEventDispatcherSymbian::~QEventDispatcherSymbian()
 {
-    m_processHandle.Close();
 }
 
@@ -698,21 +814,7 @@
         m_interrupt = false;
 
-        /*
-         * This QTime variable is used to measure the time it takes to finish
-         * the event loop. If we take too long in the loop, other processes
-         * may be starved and killed. After the first event has completed, we
-         * take the current time, and if the remaining events take longer than
-         * a preset time, we temporarily lower the priority to force a context
-         * switch. For applications that do not take unecessarily long in the
-         * event loop, the priority will not be altered.
-         */
-        QTime time;
-        enum {
-            FirstRun,
-            SubsequentRun,
-            TimeStarted
-        } timeState = FirstRun;
-
-        TProcessPriority priority;
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+        QTime eventTimer;
+#endif
 
         while (1) {
@@ -728,15 +830,31 @@
             }
 
-            if (timeState == SubsequentRun) {
-                time.start();
-                timeState = TimeStarted;
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+            if (idleDetectorThread()->hasRun()) {
+                if (m_delay > baseDelay)
+                    m_delay -= baseDelay;
+                m_lastIdleRequestTimer.start();
+                idleDetectorThread()->kick();
+            } else if (m_lastIdleRequestTimer.elapsed() > maxBusyTime) {
+                User::AfterHighRes(m_delay);
+                // allow delay to be up to 1/4 of execution time
+                if (!idleDetectorThread()->hasRun() && m_delay*3 < m_avgEventTime)
+                    m_delay += baseDelay;
             }
+            eventTimer.start();
+#endif
 
             TInt error;
-            handledSymbianEvent = CActiveScheduler::RunIfReady(error, CActive::EPriorityIdle);
+            handledSymbianEvent = CActiveScheduler::RunIfReady(error, KMinTInt);
             if (error) {
                 qWarning("CActiveScheduler::RunIfReady() returned error: %i\n", error);
                 CActiveScheduler::Current()->Error(error);
             }
+
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+            int eventDur = eventTimer.elapsed()*1000;
+            // average is calcualted as a 5% decaying exponential average
+            m_avgEventTime = (m_avgEventTime * 95 + eventDur * 5) / 100;
+#endif
 
             if (!handledSymbianEvent) {
@@ -748,16 +866,4 @@
             }
             block = false;
-            if (timeState == TimeStarted && time.elapsed() > 100) {
-                priority = m_processHandle.Priority();
-                m_processHandle.SetPriority(EPriorityBackground);
-                time.start();
-                // Slight chance of race condition in the next lines, but nothing fatal
-                // will happen, just wrong priority.
-                if (m_processHandle.Priority() == EPriorityBackground) {
-                    m_processHandle.SetPriority(priority);
-                }
-            }
-            if (timeState == FirstRun)
-                timeState = SubsequentRun;
         };
 
Index: /trunk/src/corelib/kernel/qeventdispatcher_symbian_p.h
===================================================================
--- /trunk/src/corelib/kernel/qeventdispatcher_symbian_p.h	(revision 768)
+++ /trunk/src/corelib/kernel/qeventdispatcher_symbian_p.h	(revision 769)
@@ -63,4 +63,5 @@
 #include <qwaitcondition.h>
 #include <qsocketnotifier.h>
+#include <qdatetime.h>
 
 #include <e32base.h>
@@ -211,4 +212,24 @@
     QWaitCondition m_waitCond;
     bool m_quit;
+
+    // to protect when several
+    // requests like:
+    // requestSocketEvents
+    // cancelSocketEvents
+    // kick in the same time
+    // all will fight for m_mutex
+    //
+    // TODO: fix more elegantely
+    //
+    QMutex m_grabberMutex;
+
+    // this one will tell
+    // if selectthread is
+    // really in select call
+    // and will prevent
+    // writing to pipe that
+    // causes later in locking
+    // of the thread in waitcond
+    QMutex m_selectCallMutex;
 };
 
@@ -280,5 +301,7 @@
     QList<QActiveObject *> m_deferredActiveObjects;
 
-    RProcess m_processHandle;
+    int m_delay;
+    int m_avgEventTime;
+    QTime m_lastIdleRequestTimer;
 };
 
Index: /trunk/src/corelib/kernel/qeventdispatcher_win.cpp
===================================================================
--- /trunk/src/corelib/kernel/qeventdispatcher_win.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qeventdispatcher_win.cpp	(revision 769)
@@ -69,4 +69,12 @@
 #endif
 
+#ifndef WM_TOUCH
+#  define WM_TOUCH 0x0240
+#endif
+#ifndef WM_GESTURE
+#  define WM_GESTURE 0x0119
+#  define WM_GESTURENOTIFY 0x011A
+#endif
+
 enum {
     WM_QT_SOCKETNOTIFIER = WM_USER,
@@ -503,6 +511,6 @@
                 if (localSerialNumber != d->lastSerialNumber
                     // if this message IS the one that triggers sendPostedEvents(), no need to post it again
-                    && msg->hwnd != d->internalHwnd
-                    && msg->message != WM_QT_SENDPOSTEDEVENTS) {
+                    && (msg->hwnd != d->internalHwnd
+                        || msg->message != WM_QT_SENDPOSTEDEVENTS)) {
                     PostMessage(d->internalHwnd, WM_QT_SENDPOSTEDEVENTS, 0, 0);
                 }
@@ -715,4 +723,7 @@
                         || msg.message == WM_MOUSEWHEEL
                         || msg.message == WM_MOUSEHWHEEL
+                        || msg.message == WM_TOUCH
+                        || msg.message == WM_GESTURE
+                        || msg.message == WM_GESTURENOTIFY
                         || msg.message == WM_CLOSE)) {
                     // queue user input events for later processing
Index: /trunk/src/corelib/kernel/qfunctions_wince.cpp
===================================================================
--- /trunk/src/corelib/kernel/qfunctions_wince.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qfunctions_wince.cpp	(revision 769)
@@ -353,14 +353,16 @@
     size_t high = num - 1;
     while (low <= high) {
-        unsigned int mid = ((unsigned) (low + high)) >> 1;
+        size_t mid = (low + high) >> 1;
         int c = compare(key, (char*)base + mid * size);
-        if (c < 0)
+        if (c < 0) {
+            if (!mid)
+                break;
             high = mid - 1;
-        else if (c > 0)
+        } else if (c > 0)
             low = mid + 1;
         else
             return (char*) base + mid * size;
     }
-    return (NULL);
+    return 0;
 }
 
Index: /trunk/src/corelib/kernel/qmetaobject.cpp
===================================================================
--- /trunk/src/corelib/kernel/qmetaobject.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qmetaobject.cpp	(revision 769)
@@ -944,5 +944,5 @@
         return result;
 
-    QVarLengthArray<char> stackbuf(int(strlen(type)) + 1);
+    QVarLengthArray<char> stackbuf(qstrlen(type) + 1);
     qRemoveWhitespace(type, stackbuf.data());
     int templdepth = 0;
Index: /trunk/src/corelib/kernel/qobject.cpp
===================================================================
--- /trunk/src/corelib/kernel/qobject.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qobject.cpp	(revision 769)
@@ -3265,10 +3265,12 @@
             const int method = c->method;
             QObjectPrivate::Sender currentSender;
-            currentSender.sender = sender;
-            currentSender.signal = signal_absolute_index;
-            currentSender.ref = 1;
+            const bool receiverInSameThread = currentThreadData == receiver->d_func()->threadData;
             QObjectPrivate::Sender *previousSender = 0;
-            if (currentThreadData == receiver->d_func()->threadData)
+            if (receiverInSameThread) {
+                currentSender.sender = sender;
+                currentSender.signal = signal_absolute_index;
+                currentSender.ref = 1;
                 previousSender = QObjectPrivate::setCurrentSender(receiver, &currentSender);
+            }
             locker.unlock();
 
@@ -3286,6 +3288,6 @@
             } QT_CATCH(...) {
                 locker.relock();
-
-                QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
+                if (receiverInSameThread)
+                    QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
 
                 --connectionLists->inUse;
@@ -3302,5 +3304,6 @@
             locker.relock();
 
-            QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
+            if (receiverInSameThread)
+                QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
 
             if (connectionLists->orphaned)
Index: /trunk/src/corelib/kernel/qobjectdefs.h
===================================================================
--- /trunk/src/corelib/kernel/qobjectdefs.h	(revision 768)
+++ /trunk/src/corelib/kernel/qobjectdefs.h	(revision 769)
@@ -79,4 +79,5 @@
 #define Q_INTERFACES(x)
 #define Q_PROPERTY(text)
+#define Q_PRIVATE_PROPERTY(d, text)
 #define Q_OVERRIDE(text)
 #define Q_ENUMS(x)
@@ -179,4 +180,5 @@
 #define Q_INTERFACES(x) Q_INTERFACES(x)
 #define Q_PROPERTY(text) Q_PROPERTY(text)
+#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
 #define Q_OVERRIDE(text) Q_OVERRIDE(text)
 #define Q_ENUMS(x) Q_ENUMS(x)
Index: /trunk/src/corelib/kernel/qtranslator.cpp
===================================================================
--- /trunk/src/corelib/kernel/qtranslator.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qtranslator.cpp	(revision 769)
@@ -634,5 +634,5 @@
     if (!tn)
         return QString();
-    QString str = QString::fromUtf16((const ushort *)tn, tn_length/2);
+    QString str = QString((const QChar *)tn, tn_length/2);
     if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
         for (int i = 0; i < str.length(); ++i)
Index: /trunk/src/corelib/kernel/qvariant.cpp
===================================================================
--- /trunk/src/corelib/kernel/qvariant.cpp	(revision 768)
+++ /trunk/src/corelib/kernel/qvariant.cpp	(revision 769)
@@ -467,6 +467,10 @@
      * user defined pointer types. */
     const char *const typeName = QMetaType::typeName(a->type);
-    if (typeName[qstrlen(typeName) - 1] == '*')
+    uint typeNameLen = qstrlen(typeName);
+    if (typeNameLen > 0 && typeName[typeNameLen - 1] == '*')
         return *static_cast<void *const *>(a_ptr) == *static_cast<void *const *>(b_ptr);
+
+    if (a->is_null && b->is_null)
+        return true;
 
     return a_ptr == b_ptr;
Index: /trunk/src/corelib/plugin/qlibrary.cpp
===================================================================
--- /trunk/src/corelib/plugin/qlibrary.cpp	(revision 768)
+++ /trunk/src/corelib/plugin/qlibrary.cpp	(revision 769)
@@ -540,4 +540,5 @@
     \row \i HP-UX         \i \c .sl, \c .so (HP-UXi)
     \row \i Mac OS X      \i \c .dylib, \c .bundle, \c .so
+    \row \i Symbian     \i \c .dll
     \endtable
 
Index: /trunk/src/corelib/statemachine/qstatemachine.cpp
===================================================================
--- /trunk/src/corelib/statemachine/qstatemachine.cpp	(revision 768)
+++ /trunk/src/corelib/statemachine/qstatemachine.cpp	(revision 769)
@@ -1176,4 +1176,14 @@
 }
 
+void QStateMachinePrivate::clearHistory()
+{
+    Q_Q(QStateMachine);
+    QList<QHistoryState*> historyStates = qFindChildren<QHistoryState*>(q);
+    for (int i = 0; i < historyStates.size(); ++i) {
+        QHistoryState *h = historyStates.at(i);
+        QHistoryStatePrivate::get(h)->configuration.clear();
+    }
+}
+
 void QStateMachinePrivate::_q_start()
 {
@@ -1187,4 +1197,5 @@
     qDeleteAll(externalEventQueue);
     externalEventQueue.clear();
+    clearHistory();
 
 #ifdef QSTATEMACHINE_DEBUG
Index: /trunk/src/corelib/statemachine/qstatemachine_p.h
===================================================================
--- /trunk/src/corelib/statemachine/qstatemachine_p.h	(revision 768)
+++ /trunk/src/corelib/statemachine/qstatemachine_p.h	(revision 769)
@@ -126,4 +126,6 @@
     QState *startState();
     void removeStartState();
+
+    void clearHistory();
 
     void microstep(QEvent *event, const QList<QAbstractTransition*> &transitionList);
Index: /trunk/src/corelib/thread/qmutex.h
===================================================================
--- /trunk/src/corelib/thread/qmutex.h	(revision 768)
+++ /trunk/src/corelib/thread/qmutex.h	(revision 769)
@@ -96,5 +96,5 @@
 public:
     inline explicit QMutexLocker(QMutex *m)
-        : mtx(m)
+        : val(reinterpret_cast<quintptr>(m))
     {
         Q_ASSERT_X((val & quintptr(1u)) == quintptr(0),
@@ -106,8 +106,8 @@
     inline void unlock()
     {
-        if (mtx) {
+        if (val) {
             if ((val & quintptr(1u)) == quintptr(1u)) {
                 val &= ~quintptr(1u);
-                mtx->unlock();
+                mutex()->unlock();
             }
         }
@@ -116,7 +116,7 @@
     inline void relock()
     {
-        if (mtx) {
+        if (val) {
             if ((val & quintptr(1u)) == quintptr(0u)) {
-                mtx->lock();
+                mutex()->lock();
                 val |= quintptr(1u);
             }
@@ -141,8 +141,5 @@
     Q_DISABLE_COPY(QMutexLocker)
 
-    union {
-        QMutex *mtx;
-        quintptr val;
-    };
+    quintptr val;
 };
 
Index: /trunk/src/corelib/thread/qreadwritelock.h
===================================================================
--- /trunk/src/corelib/thread/qreadwritelock.h	(revision 768)
+++ /trunk/src/corelib/thread/qreadwritelock.h	(revision 769)
@@ -97,8 +97,8 @@
     inline void unlock()
     {
-        if (q_lock) {
+        if (q_val) {
             if ((q_val & quintptr(1u)) == quintptr(1u)) {
                 q_val &= ~quintptr(1u);
-                q_lock->unlock();
+                readWriteLock()->unlock();
             }
         }
@@ -107,7 +107,7 @@
     inline void relock()
     {
-        if (q_lock) {
+        if (q_val) {
             if ((q_val & quintptr(1u)) == quintptr(0u)) {
-                q_lock->lockForRead();
+                readWriteLock()->lockForRead();
                 q_val |= quintptr(1u);
             }
@@ -120,12 +120,9 @@
 private:
     Q_DISABLE_COPY(QReadLocker)
-    union {
-        QReadWriteLock *q_lock;
-        quintptr q_val;
-    };
+    quintptr q_val;
 };
 
 inline QReadLocker::QReadLocker(QReadWriteLock *areadWriteLock)
-    : q_lock(areadWriteLock)
+    : q_val(reinterpret_cast<quintptr>(areadWriteLock))
 {
     Q_ASSERT_X((q_val & quintptr(1u)) == quintptr(0),
@@ -144,8 +141,8 @@
     inline void unlock()
     {
-        if (q_lock) {
+        if (q_val) {
             if ((q_val & quintptr(1u)) == quintptr(1u)) {
                 q_val &= ~quintptr(1u);
-                q_lock->unlock();
+                readWriteLock()->unlock();
             }
         }
@@ -154,7 +151,7 @@
     inline void relock()
     {
-        if (q_lock) {
+        if (q_val) {
             if ((q_val & quintptr(1u)) == quintptr(0u)) {
-                q_lock->lockForWrite();
+                readWriteLock()->lockForWrite();
                 q_val |= quintptr(1u);
             }
@@ -168,12 +165,9 @@
 private:
     Q_DISABLE_COPY(QWriteLocker)
-    union{
-        QReadWriteLock *q_lock;
-        quintptr q_val;
-    };
+    quintptr q_val;
 };
 
 inline QWriteLocker::QWriteLocker(QReadWriteLock *areadWriteLock)
-    : q_lock(areadWriteLock)
+    : q_val(reinterpret_cast<quintptr>(areadWriteLock))
 {
     Q_ASSERT_X((q_val & quintptr(1u)) == quintptr(0),
Index: /trunk/src/corelib/thread/qthread_win.cpp
===================================================================
--- /trunk/src/corelib/thread/qthread_win.cpp	(revision 768)
+++ /trunk/src/corelib/thread/qthread_win.cpp	(revision 769)
@@ -41,5 +41,7 @@
 
 //#define WINVER 0x0500
+#if _WIN32_WINNT < 0x0400
 #define _WIN32_WINNT 0x0400
+#endif
 
 
Index: /trunk/src/corelib/tools/qbytedata_p.h
===================================================================
--- /trunk/src/corelib/tools/qbytedata_p.h	(revision 768)
+++ /trunk/src/corelib/tools/qbytedata_p.h	(revision 769)
@@ -85,5 +85,5 @@
 
 
-    inline void append(QByteArray& bd)
+    inline void append(const QByteArray& bd)
     {
         if (bd.isEmpty())
Index: /trunk/src/corelib/tools/qchar.cpp
===================================================================
--- /trunk/src/corelib/tools/qchar.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qchar.cpp	(revision 769)
@@ -382,6 +382,10 @@
     \value Null A QChar with this value isNull().
     \value Nbsp Non-breaking space.
-    \value ReplacementCharacter
-    \value ObjectReplacementCharacter The character shown when a font has no glyph for a certain codepoint. The square character is normally used.
+    \value ReplacementCharacter The character shown when a font has no glyph
+           for a certain codepoint. A special question mark character is often
+           used. Codecs use this codepoint when input data cannot be
+           represented in Unicode.
+    \value ObjectReplacementCharacter Used to represent an object such as an
+           image when such objects cannot be presented.
     \value ByteOrderMark
     \value ByteOrderSwapped
Index: /trunk/src/corelib/tools/qcontiguouscache.h
===================================================================
--- /trunk/src/corelib/tools/qcontiguouscache.h	(revision 768)
+++ /trunk/src/corelib/tools/qcontiguouscache.h	(revision 769)
@@ -98,5 +98,5 @@
     typedef value_type& reference;
     typedef const value_type& const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
     typedef int size_type;
 
@@ -222,20 +222,27 @@
     x.d->count = qMin(d->count, asize);
     x.d->offset = d->offset + d->count - x.d->count;
-    x.d->start = x.d->offset % x.d->alloc;
-    T *dest = x.p->array + (x.d->start + x.d->count-1) % x.d->alloc;
-    T *src = p->array + (d->start + d->count-1) % d->alloc;
+    if(asize)
+        x.d->start = x.d->offset % x.d->alloc;
+    else
+        x.d->start = 0;
+
     int oldcount = x.d->count;
-    while (oldcount--) {
-        if (QTypeInfo<T>::isComplex) {
-            new (dest) T(*src);
-        } else {
-            *dest = *src;
+    if(oldcount)
+    {
+        T *dest = x.p->array + (x.d->start + x.d->count-1) % x.d->alloc;
+        T *src = p->array + (d->start + d->count-1) % d->alloc;
+        while (oldcount--) {
+            if (QTypeInfo<T>::isComplex) {
+                new (dest) T(*src);
+            } else {
+                *dest = *src;
+            }
+            if (dest == x.p->array)
+                dest = x.p->array + x.d->alloc;
+            dest--;
+            if (src == p->array)
+                src = p->array + d->alloc;
+            src--;
         }
-        if (dest == x.p->array)
-            dest = x.p->array + x.d->alloc;
-        dest--;
-        if (src == p->array)
-            src = p->array + d->alloc;
-        src--;
     }
     /* free old */
Index: /trunk/src/corelib/tools/qhash.cpp
===================================================================
--- /trunk/src/corelib/tools/qhash.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qhash.cpp	(revision 769)
@@ -69,6 +69,6 @@
     while (n--) {
         h = (h << 4) + *p++;
-        if ((g = (h & 0xf0000000)) != 0)
-            h ^= g >> 23;
+        g = h & 0xf0000000;
+        h ^= g >> 23;
         h &= ~g;
     }
@@ -83,6 +83,6 @@
     while (n--) {
         h = (h << 4) + (*p++).unicode();
-        if ((g = (h & 0xf0000000)) != 0)
-            h ^= g >> 23;
+        g = h & 0xf0000000;
+        h ^= g >> 23;
         h &= ~g;
     }
Index: /trunk/src/corelib/tools/qhash.h
===================================================================
--- /trunk/src/corelib/tools/qhash.h	(revision 768)
+++ /trunk/src/corelib/tools/qhash.h	(revision 769)
@@ -330,5 +330,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef T *pointer;
@@ -395,5 +395,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -479,5 +479,5 @@
     typedef T mapped_type;
     typedef Key key_type;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
     typedef int size_type;
 
@@ -928,5 +928,5 @@
 
     inline QMultiHash &operator+=(const QMultiHash &other)
-    { unite(other); return *this; }
+    { this->unite(other); return *this; }
     inline QMultiHash operator+(const QMultiHash &other) const
     { QMultiHash result = *this; result += other; return result; }
@@ -1003,10 +1003,5 @@
     while (i != end && i.key() == key) {
         if (i.value() == value) {
-#if defined(Q_CC_RVCT)
-            // RVCT has problems with scoping, apparently.
-            i = QHash<Key, T>::erase(i);
-#else
-            i = erase(i);
-#endif
+            i = this->erase(i);
             ++n;
         } else {
Index: /trunk/src/corelib/tools/qlinkedlist.h
===================================================================
--- /trunk/src/corelib/tools/qlinkedlist.h	(revision 768)
+++ /trunk/src/corelib/tools/qlinkedlist.h	(revision 769)
@@ -114,5 +114,5 @@
     public:
         typedef std::bidirectional_iterator_tag  iterator_category;
-        typedef ptrdiff_t  difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef T *pointer;
@@ -147,5 +147,5 @@
     public:
         typedef std::bidirectional_iterator_tag  iterator_category;
-        typedef ptrdiff_t  difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -213,5 +213,5 @@
     typedef value_type &reference;
     typedef const value_type &const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
 
 #ifndef QT_NO_STL
Index: /trunk/src/corelib/tools/qlist.cpp
===================================================================
--- /trunk/src/corelib/tools/qlist.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qlist.cpp	(revision 769)
@@ -209,5 +209,5 @@
     if (n) {
         if (e + n > d->alloc)
-            realloc(grow(e + l.d->end - l.d->begin));
+            realloc(grow(e + n));
         d->end += n;
     }
Index: /trunk/src/corelib/tools/qlist.h
===================================================================
--- /trunk/src/corelib/tools/qlist.h	(revision 768)
+++ /trunk/src/corelib/tools/qlist.h	(revision 769)
@@ -164,5 +164,5 @@
         Node *i;
         typedef std::random_access_iterator_tag  iterator_category;
-        typedef ptrdiff_t  difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef T *pointer;
@@ -211,5 +211,5 @@
         Node *i;
         typedef std::random_access_iterator_tag  iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -290,5 +290,5 @@
     typedef value_type &reference;
     typedef const value_type &const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
 
 #ifdef QT3_SUPPORT
Index: /trunk/src/corelib/tools/qlocale.cpp
===================================================================
--- /trunk/src/corelib/tools/qlocale.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qlocale.cpp	(revision 769)
@@ -774,4 +774,5 @@
 };
 
+/* NOTE: This array should be sorted by the first column! */
 static const WindowsToISOListElt windows_to_iso_list[] = {
     { 0x0401, "ar_SA" },
Index: /trunk/src/corelib/tools/qlocale_symbian.cpp
===================================================================
--- /trunk/src/corelib/tools/qlocale_symbian.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qlocale_symbian.cpp	(revision 769)
@@ -88,69 +88,73 @@
 
 /*
-  Mapping from Symbian to ISO locale
+  Mapping from Symbian to ISO locale.
+  NOTE: This array should be sorted by the first column!
 */
 static const symbianToISO symbian_to_iso_list[] = {
-    { ELangEnglish,             "en_GB" },
-    { ELangFrench,              "fr_FR" },
-    { ELangGerman,              "de_DE" },
-    { ELangSpanish,             "es_ES" },
-    { ELangItalian,             "it_IT" },
-    { ELangSwedish,             "sv_SE" },
-    { ELangDanish,              "da_DK" },
-    { ELangNorwegian,           "no_NO" },
-    { ELangFinnish,             "fi_FI" },
-    { ELangAmerican,            "en_US" },
-    { ELangPortuguese,          "pt_PT" },
-    { ELangTurkish,             "tr_TR" },
-    { ELangIcelandic,           "is_IS" },
-    { ELangRussian,             "ru_RU" },
-    { ELangHungarian,           "hu_HU" },
-    { ELangDutch,               "nl_NL" },
-    { ELangBelgianFlemish,      "nl_BE" },
-    { ELangCzech,               "cs_CZ" },
-    { ELangSlovak,              "sk_SK" },
-    { ELangPolish,              "pl_PL" },
-    { ELangSlovenian,           "sl_SI" },
-    { ELangTaiwanChinese,       "zh_TW" },
-    { ELangHongKongChinese,     "zh_HK" },
-    { ELangPrcChinese,          "zh_CN" },
-    { ELangJapanese,            "ja_JP" },
-    { ELangThai,                "th_TH" },
-    { ELangArabic,              "ar_AE" },
-    { ELangTagalog,             "tl_PH" },
-    { ELangBulgarian,           "bg_BG" },
-    { ELangCatalan,             "ca_ES" },
-    { ELangCroatian,            "hr_HR" },
-    { ELangEstonian,            "et_EE" },
-    { ELangFarsi,               "fa_IR" },
-    { ELangCanadianFrench,      "fr_CA" },
-    { ELangGreek,               "el_GR" },
-    { ELangHebrew,              "he_IL" },
-    { ELangHindi,               "hi_IN" },
-    { ELangIndonesian,          "id_ID" },
-    { ELangLatvian,             "lv_LV" },
-    { ELangLithuanian,          "lt_LT" },
-    { ELangMalay,               "ms_MY" },
-    { ELangBrazilianPortuguese, "pt_BR" },
-    { ELangRomanian,            "ro_RO" },
-    { ELangSerbian,             "sr_YU" },
-    { ELangLatinAmericanSpanish, "es" },
-    { ELangUkrainian,           "uk_UA" },
-    { ELangUrdu,                "ur_PK" }, // India/Pakistan
-    { ELangVietnamese,          "vi_VN" },
+    { ELangEnglish,             "en_GB" },  // 1
+    { ELangFrench,              "fr_FR" },  // 2
+    { ELangGerman,              "de_DE" },  // 3
+    { ELangSpanish,             "es_ES" },  // 4
+    { ELangItalian,             "it_IT" },  // 5
+    { ELangSwedish,             "sv_SE" },  // 6
+    { ELangDanish,              "da_DK" },  // 7
+    { ELangNorwegian,           "no_NO" },  // 8
+    { ELangFinnish,             "fi_FI" },  // 9
+    { ELangAmerican,            "en_US" },  // 10
+    { ELangPortuguese,          "pt_PT" },  // 13
+    { ELangTurkish,             "tr_TR" },  // 14
+    { ELangIcelandic,           "is_IS" },  // 15
+    { ELangRussian,             "ru_RU" },  // 16
+    { ELangHungarian,           "hu_HU" },  // 17
+    { ELangDutch,               "nl_NL" },  // 18
+    { ELangBelgianFlemish,      "nl_BE" },  // 19
+    { ELangCzech,               "cs_CZ" },  // 25
+    { ELangSlovak,              "sk_SK" },  // 26
+    { ELangPolish,              "pl_PL" },  // 27
+    { ELangSlovenian,           "sl_SI" },  // 28
+    { ELangTaiwanChinese,       "zh_TW" },  // 29
+    { ELangHongKongChinese,     "zh_HK" },  // 30
+    { ELangPrcChinese,          "zh_CN" },  // 31
+    { ELangJapanese,            "ja_JP" },  // 32
+    { ELangThai,                "th_TH" },  // 33
+    { ELangArabic,              "ar_AE" },  // 37
+    { ELangTagalog,             "tl_PH" },  // 39
+    { ELangBulgarian,           "bg_BG" },  // 42
+    { ELangCatalan,             "ca_ES" },  // 44
+    { ELangCroatian,            "hr_HR" },  // 45
+    { ELangEstonian,            "et_EE" },  // 49
+    { ELangFarsi,               "fa_IR" },  // 50
+    { ELangCanadianFrench,      "fr_CA" },  // 51
+    { ELangGreek,               "el_GR" },  // 54
+    { ELangHebrew,              "he_IL" },  // 57
+    { ELangHindi,               "hi_IN" },  // 58
+    { ELangIndonesian,          "id_ID" },  // 59
+    { ELangKorean,              "ko_KO" },  // 65
+    { ELangLatvian,             "lv_LV" },  // 67
+    { ELangLithuanian,          "lt_LT" },  // 68
+    { ELangMalay,               "ms_MY" },  // 70
+    { ELangNorwegianNynorsk,    "nn_NO" },  // 75
+    { ELangBrazilianPortuguese, "pt_BR" },  // 76
+    { ELangRomanian,            "ro_RO" },  // 78
+    { ELangSerbian,             "sr_RS" },  // 79
+    { ELangLatinAmericanSpanish,"es_419" }, // 83
+    { ELangUkrainian,           "uk_UA" },  // 93
+    { ELangUrdu,                "ur_PK" },  // 94 - India/Pakistan
+    { ELangVietnamese,          "vi_VN" },  // 96
 #ifdef __E32LANG_H__
 // 5.0
-    { ELangBasque,              "eu_ES" },
-    { ELangGalician,            "gl_ES" },
+    { ELangBasque,              "eu_ES" },  // 102
+    { ELangGalician,            "gl_ES" },  // 103
 #endif
 #if !defined(__SERIES60_31__)
-    { ELangEnglish_Apac,        "en" },
-    { ELangEnglish_Taiwan,      "en_TW" },
-    { ELangEnglish_HongKong,    "en_HK" },
-    { ELangEnglish_Prc,         "en_CN" },
-    { ELangEnglish_Japan,       "en_JP"},
-    { ELangEnglish_Thailand,    "en_TH" },
-    { ELangMalay_Apac,          "ms" }
+    { ELangEnglish_Apac,        "en" },     // 129
+    { ELangEnglish_Taiwan,      "en_TW" },  // 157 ### Not supported by CLDR
+    { ELangEnglish_HongKong,    "en_HK" },  // 158
+    { ELangEnglish_Prc,         "en_CN" },  // 159 ### Not supported by CLDR
+    { ELangEnglish_Japan,       "en_JP"},   // 160 ### Not supported by CLDR
+    { ELangEnglish_Thailand,    "en_TH" },  // 161 ### Not supported by CLDR
+    { ELangMalay_Apac,          "ms" },     // 326
 #endif
+    { 327/*ELangIndonesian_Apac*/,"id_ID" } // 327 - appeared in Symbian^3
 };
 
Index: /trunk/src/corelib/tools/qmap.h
===================================================================
--- /trunk/src/corelib/tools/qmap.h	(revision 768)
+++ /trunk/src/corelib/tools/qmap.h	(revision 769)
@@ -214,5 +214,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef T *pointer;
@@ -282,5 +282,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -385,5 +385,5 @@
     typedef Key key_type;
     typedef T mapped_type;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
     typedef int size_type;
     inline bool empty() const { return isEmpty(); }
@@ -954,5 +954,5 @@
 
     inline QMultiMap &operator+=(const QMultiMap &other)
-    { unite(other); return *this; }
+    { this->unite(other); return *this; }
     inline QMultiMap operator+(const QMultiMap &other) const
     { QMultiMap result = *this; result += other; return result; }
@@ -1029,10 +1029,5 @@
     while (i != end && !qMapLessThanKey<Key>(key, i.key())) {
         if (i.value() == value) {
-#if defined(Q_CC_RVCT)
-            // RVCT has problems with scoping, apparently.
-            i = QMap<Key, T>::erase(i);
-#else
-            i = erase(i);
-#endif
+            i = this->erase(i);
             ++n;
         } else {
Index: /trunk/src/corelib/tools/qpoint.cpp
===================================================================
--- /trunk/src/corelib/tools/qpoint.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qpoint.cpp	(revision 769)
@@ -375,5 +375,5 @@
 {
     d.nospace() << "QPointF(" << p.x() << ", " << p.y() << ')';
-    return d;
+    return d.space();
 }
 #endif
Index: /trunk/src/corelib/tools/qregexp.cpp
===================================================================
--- /trunk/src/corelib/tools/qregexp.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qregexp.cpp	(revision 769)
@@ -524,5 +524,5 @@
 
     In the mode Wildcard, the wildcard characters cannot be
-    escaped. In the mode WildcardUnix, the character '\' escapes the
+    escaped. In the mode WildcardUnix, the character '\\' escapes the
     wildcard.
 
@@ -3775,5 +3775,5 @@
     \value WildcardUnix This is similar to Wildcard but with the
     behavior of a Unix shell. The wildcard characters can be escaped
-    with the character "\".
+    with the character "\\".
 
     \value FixedString The pattern is a fixed string. This is
Index: /trunk/src/corelib/tools/qscopedpointer.cpp
===================================================================
--- /trunk/src/corelib/tools/qscopedpointer.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qscopedpointer.cpp	(revision 769)
@@ -58,5 +58,5 @@
 
     QScopedPointer guarantees that the object pointed to will get deleted when
-    the current scope dissapears.
+    the current scope disappears.
 
     Consider this function which does heap allocations, and have various exit points:
@@ -226,3 +226,58 @@
  */
 
+/*!
+  \class QScopedArrayPointer
+
+  \brief The QScopedArrayPointer class stores a pointer to a
+  dynamically allocated array of objects, and deletes it upon
+  destruction.
+
+  \since 4.6
+  \reentrant
+  \ingroup misc
+
+  A QScopedArrayPointer is a QScopedPointer that defaults to
+  deleting the object it is pointing to with the delete[] operator. It
+  also features operator[] for convenience, so we can write:
+
+  \code
+    void foo()
+    {
+        QScopedArrayPointer<int> i(new int[10]);
+        i[2] = 42;
+        ...
+        return; // our integer array is now deleted using delete[]
+    }
+  \endcode
+*/
+
+/*!
+    \fn QScopedArrayPointer::QScopedArrayPointer(T *p = 0)
+
+    Constructs this QScopedArrayPointer instance and sets its pointer
+    to \a p.
+*/
+
+/*!
+    \fn T *QScopedArrayPointer::operator[](int i)
+
+    Provides access to entry \a i of the scoped pointer's array of
+    objects.
+
+    If the contained pointer is \c null, behavior is undefined.
+
+    \sa isNull()
+*/
+
+/*!
+    \fn T *QScopedArrayPointer::operator[](int i) const
+
+    Provides access to entry \a i of the scoped pointer's array of
+    objects.
+
+    If the contained pointer is \c null, behavior is undefined.
+
+    \sa isNull()
+*/
+
 QT_END_NAMESPACE
Index: /trunk/src/corelib/tools/qset.h
===================================================================
--- /trunk/src/corelib/tools/qset.h	(revision 768)
+++ /trunk/src/corelib/tools/qset.h	(revision 769)
@@ -98,5 +98,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -133,5 +133,5 @@
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -189,9 +189,8 @@
     typedef value_type &reference;
     typedef const value_type &const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
     typedef int size_type;
 
     inline bool empty() const { return isEmpty(); }
-
     // comfort
     inline QSet<T> &operator<<(const T &value) { insert(value); return *this; }
Index: /trunk/src/corelib/tools/qsharedpointer_impl.h
===================================================================
--- /trunk/src/corelib/tools/qsharedpointer_impl.h	(revision 768)
+++ /trunk/src/corelib/tools/qsharedpointer_impl.h	(revision 769)
@@ -133,5 +133,5 @@
         typedef value_type &reference;
         typedef const value_type &const_reference;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
 
         inline T *data() const { return value; }
@@ -542,5 +542,5 @@
     typedef value_type &reference;
     typedef const value_type &const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
 
     inline bool isNull() const { return d == 0 || d->strongref == 0 || value == 0; }
Index: /trunk/src/corelib/tools/qstring.cpp
===================================================================
--- /trunk/src/corelib/tools/qstring.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qstring.cpp	(revision 769)
@@ -891,5 +891,5 @@
 {
     if (sizeof(wchar_t) == sizeof(QChar)) {
-        return fromUtf16((ushort *)string, size);
+        return fromUtf16((const ushort *)string, size);
     } else {
         return fromUcs4((uint *)string, size);
@@ -3191,5 +3191,5 @@
             x++;
     }
-    if((flags & SectionIncludeLeadingSep)) {
+    if((flags & SectionIncludeLeadingSep) && first_i < sections.size()) {
         const qt_section_chunk &section = sections.at(first_i);
         ret.prepend(section.string.left(section.length));
@@ -3863,4 +3863,10 @@
     with a 0.
 
+    This function checks for a Byte Order Mark (BOM). If it is missing,
+    host byte order is assumed.
+
+    This function is comparatively slow.
+    Use QString(const ushort *, int) if possible.
+
     QString makes a deep copy of the Unicode data.
 
@@ -3928,4 +3934,7 @@
     If \a unicode is 0, nothing is copied, but the string is still
     resized to \a size.
+
+    Note that unlike fromUtf16(), this function does not consider BOMs and
+    possibly differing byte ordering.
 
     \sa utf16(), setUnicode()
@@ -4705,4 +4714,6 @@
     Returns the QString as a '\\0\'-terminated array of unsigned
     shorts. The result remains valid until the string is modified.
+
+    The returned string is in host byte order.
 
     \sa unicode()
@@ -7777,5 +7788,5 @@
     if (m_size && m_position == 0 && m_size == m_string->size())
         return *m_string;
-    return QString::fromUtf16(reinterpret_cast<const ushort*>(m_string->unicode() + m_position), m_size);
+    return QString(m_string->unicode() + m_position, m_size);
 }
 
Index: /trunk/src/corelib/tools/qstringbuilder.h
===================================================================
--- /trunk/src/corelib/tools/qstringbuilder.h	(revision 768)
+++ /trunk/src/corelib/tools/qstringbuilder.h	(revision 769)
@@ -72,5 +72,5 @@
 private:
     const int m_size;
-    const char *m_data;
+    const char * const m_data;
 };
 
Index: /trunk/src/corelib/tools/qstringlist.cpp
===================================================================
--- /trunk/src/corelib/tools/qstringlist.cpp	(revision 768)
+++ /trunk/src/corelib/tools/qstringlist.cpp	(revision 769)
@@ -405,15 +405,5 @@
 QString QtPrivate::QStringList_join(const QStringList *that, const QString &sep)
 {
-    int totalLength = 0;
-    const int size = that->size();
-
-    for (int i = 0; i < size; ++i)
-        totalLength += that->at(i).size();
-
-    if(size > 0)
-        totalLength += sep.size() * (size - 1);
-
     QString res;
-    res.reserve(totalLength);
     for (int i = 0; i < that->size(); ++i) {
         if (i)
Index: /trunk/src/corelib/tools/qvarlengtharray.h
===================================================================
--- /trunk/src/corelib/tools/qvarlengtharray.h	(revision 768)
+++ /trunk/src/corelib/tools/qvarlengtharray.h	(revision 769)
@@ -129,7 +129,7 @@
     void realloc(int size, int alloc);
 
-    int a;
-    int s;
-    T *ptr;
+    int a;      // capacity
+    int s;      // size
+    T *ptr;     // data
     union {
         // ### Qt 5: Use 'Prealloc * sizeof(T)' as array size
@@ -194,6 +194,6 @@
     T *oldPtr = ptr;
     int osize = s;
-    // s = asize;
-
+
+    const int copySize = qMin(asize, osize);
     if (aalloc != a) {
         ptr = reinterpret_cast<T *>(qMalloc(aalloc * sizeof(T)));
@@ -206,5 +206,4 @@
                 QT_TRY {
                     // copy all the old elements
-                    const int copySize = qMin(asize, osize);
                     while (s < copySize) {
                         new (ptr+s) T(*(oldPtr+s));
@@ -222,6 +221,5 @@
                 }
             } else {
-                qMemCopy(ptr, oldPtr, qMin(asize, osize) * sizeof(T));
-                s = asize;
+                qMemCopy(ptr, oldPtr, copySize * sizeof(T));
             }
         } else {
@@ -230,10 +228,10 @@
         }
     }
-
-    if (QTypeInfo<T>::isComplex) {
+    s = copySize;
+
+    if (QTypeInfo<T>::isComplex) {
+        // destroy remaining old objects
         while (osize > asize)
             (oldPtr+(--osize))->~T();
-        if( oldPtr == ptr )
-            s = osize;
     }
 
Index: /trunk/src/corelib/tools/qvector.h
===================================================================
--- /trunk/src/corelib/tools/qvector.h	(revision 768)
+++ /trunk/src/corelib/tools/qvector.h	(revision 769)
@@ -164,5 +164,5 @@
         T *i;
         typedef std::random_access_iterator_tag  iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef T *pointer;
@@ -197,5 +197,5 @@
         T *i;
         typedef std::random_access_iterator_tag  iterator_category;
-        typedef ptrdiff_t difference_type;
+        typedef qptrdiff difference_type;
         typedef T value_type;
         typedef const T *pointer;
@@ -261,5 +261,5 @@
     typedef value_type& reference;
     typedef const value_type& const_reference;
-    typedef ptrdiff_t difference_type;
+    typedef qptrdiff difference_type;
     typedef iterator Iterator;
     typedef const_iterator ConstIterator;
Index: /trunk/src/corelib/xml/qxmlstream.g
===================================================================
--- /trunk/src/corelib/xml/qxmlstream.g	(revision 768)
+++ /trunk/src/corelib/xml/qxmlstream.g	(revision 769)
@@ -749,5 +749,5 @@
             return true;
         } else if (act > 0) {
-            if (++tos == stack_size)
+            if (++tos == stack_size-1)
                 reallocateStack();
 
Index: /trunk/src/corelib/xml/qxmlstream_p.h
===================================================================
--- /trunk/src/corelib/xml/qxmlstream_p.h	(revision 768)
+++ /trunk/src/corelib/xml/qxmlstream_p.h	(revision 769)
@@ -55,5 +55,5 @@
 #define QXMLSTREAM_P_H
 
-#if defined(Q_OS_VXWORKS) && defined(ERROR)
+#if defined(ERROR)
 #  undef ERROR
 #endif
@@ -62,5 +62,5 @@
 {
 public:
-  enum {
+  enum VariousConstants {
     EOF_SYMBOL = 0,
     AMPERSAND = 5,
@@ -1243,5 +1243,5 @@
             return true;
         } else if (act > 0) {
-            if (++tos == stack_size)
+            if (++tos == stack_size-1)
                 reallocateStack();
 
Index: /trunk/src/dbus/qdbusargument.cpp
===================================================================
--- /trunk/src/dbus/qdbusargument.cpp	(revision 768)
+++ /trunk/src/dbus/qdbusargument.cpp	(revision 769)
@@ -536,5 +536,4 @@
 /*!
     \internal
-    Returns the type signature of the D-Bus type this QDBusArgument
     \since 4.5
 
Index: /trunk/src/dbus/qdbusconnection.cpp
===================================================================
--- /trunk/src/dbus/qdbusconnection.cpp	(revision 768)
+++ /trunk/src/dbus/qdbusconnection.cpp	(revision 769)
@@ -492,4 +492,10 @@
     QDBusMessage::ReplyMessage or QDBusMessage::ErrorMessage.
 
+    If no reply is received within \a timeout milliseconds, an automatic
+    error will be delivered indicating the expiration of the call.
+    The default \a timeout is -1, which will be replaced with an
+    implementation-defined value that is suitable for inter-process
+    communications (generally, 25 seconds).
+
     See the QDBusInterface::call() function for a more friendly way
     of placing calls.
@@ -527,7 +533,12 @@
     immediately. This function is suitable for method calls only. It
     returns an object of type QDBusPendingCall which can be used to
-    track the status of the reply. The \a timeout parameter is used to
-    determine when an auto-generated error reply may be emitted and is
-    also the upper limit for waiting in QDBusPendingCall::waitForFinished().
+    track the status of the reply.
+
+    If no reply is received within \a timeout milliseconds, an automatic
+    error will be delivered indicating the expiration of the call. The
+    default \a timeout is -1, which will be replaced with an
+    implementation-defined value that is suitable for inter-process
+    communications (generally, 25 seconds). This timeout is also the
+    upper limit for waiting in QDBusPendingCall::waitForFinished().
 
     See the QDBusInterface::asyncCall() function for a more friendly way
Index: /trunk/src/dbus/qdbusintegrator.cpp
===================================================================
--- /trunk/src/dbus/qdbusintegrator.cpp	(revision 768)
+++ /trunk/src/dbus/qdbusintegrator.cpp	(revision 769)
@@ -524,5 +524,5 @@
 
     QDBusMessage amsg = QDBusMessagePrivate::fromDBusMessage(message);
-    qDBusDebug() << d << "got message:" << amsg;
+    qDBusDebug() << d << "got message (signal):" << amsg;
 
     return d->handleMessage(amsg) ?
@@ -1661,7 +1661,4 @@
 
     QString busService = QLatin1String(DBUS_SERVICE_DBUS);
-    WatchedServicesHash::mapped_type &bus = watchedServices[busService];
-    bus.refcount = 1;
-    bus.owner = getNameOwnerNoCache(busService);
     connectSignal(busService, QString(), QString(), QLatin1String("NameAcquired"), QStringList(), QString(),
                   this, SLOT(registerService(QString)));
@@ -1691,7 +1688,21 @@
 {
     Q_ASSERT(pcall->pending);
-    QDBusDispatchLocker locker(PendingCallBlockAction, this);
-    q_dbus_pending_call_block(pcall->pending);
-    // QDBusConnectionPrivate::processFinishedCall() is called automatically
+    Q_ASSERT(!pcall->autoDelete);
+    //Q_ASSERT(pcall->mutex.isLocked()); // there's no such function
+
+    if (pcall->waitingForFinished) {
+        // another thread is already waiting
+        pcall->waitForFinishedCondition.wait(&pcall->mutex);
+    } else {
+        pcall->waitingForFinished = true;
+        pcall->mutex.unlock();
+
+        {
+            QDBusDispatchLocker locker(PendingCallBlockAction, this);
+            q_dbus_pending_call_block(pcall->pending);
+            // QDBusConnectionPrivate::processFinishedCall() is called automatically
+        }
+        pcall->mutex.lock();
+    }
 }
 
@@ -1699,4 +1710,6 @@
 {
     QDBusConnectionPrivate *connection = const_cast<QDBusConnectionPrivate *>(call->connection);
+
+    QMutexLocker locker(&call->mutex);
 
     QDBusMessage &msg = call->replyMessage;
@@ -1729,4 +1742,10 @@
     }
 
+    if (call->pending)
+        q_dbus_pending_call_unref(call->pending);
+    call->pending = 0;
+
+    locker.unlock();
+
     // Are there any watchers?
     if (call->watcherHelper)
@@ -1736,10 +1755,8 @@
         emit connection->callWithCallbackFailed(QDBusError(msg), call->sentMessage);
 
-    if (call->pending)
-        q_dbus_pending_call_unref(call->pending);
-    call->pending = 0;
-
-    if (call->autoDelete)
+    if (call->autoDelete) {
+        Q_ASSERT(!call->waitingForFinished); // can't wait on a call with autoDelete!
         delete call;
+    }
 }
 
@@ -1883,8 +1900,6 @@
     if (isServiceRegisteredByThread(message.service())) {
         // special case for local calls
-        QDBusPendingCallPrivate *pcall = new QDBusPendingCallPrivate;
-        pcall->sentMessage = message;
+        QDBusPendingCallPrivate *pcall = new QDBusPendingCallPrivate(message, this);
         pcall->replyMessage = sendWithReplyLocal(message);
-        pcall->connection = this;
 
         return pcall;
@@ -1892,6 +1907,5 @@
 
     checkThread();
-    QDBusPendingCallPrivate *pcall = new QDBusPendingCallPrivate;
-    pcall->sentMessage = message;
+    QDBusPendingCallPrivate *pcall = new QDBusPendingCallPrivate(message, this);
     pcall->ref = 0;
 
@@ -1917,5 +1931,4 @@
 
             pcall->pending = pending;
-            pcall->connection = this;
             q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0);
 
@@ -1941,5 +1954,5 @@
     Q_ASSERT(pcall);
 
-    // has it already finished (dispatched locally)?
+    // has it already finished with success (dispatched locally)?
     if (pcall->replyMessage.type() == QDBusMessage::ReplyMessage) {
         pcall->setReplyCallback(receiver, returnMethod);
@@ -1949,11 +1962,14 @@
     }
 
+    // either it hasn't finished or it has finished with error
+    if (errorMethod) {
+        pcall->watcherHelper = new QDBusPendingCallWatcherHelper;
+        connect(pcall->watcherHelper, SIGNAL(error(QDBusError,QDBusMessage)), receiver, errorMethod,
+                Qt::QueuedConnection);
+        pcall->watcherHelper->moveToThread(thread());
+    }
+
     // has it already finished and is an error reply message?
     if (pcall->replyMessage.type() == QDBusMessage::ErrorMessage) {
-        if (errorMethod) {
-            pcall->watcherHelper = new QDBusPendingCallWatcherHelper;
-            connect(pcall->watcherHelper, SIGNAL(error(QDBusError,QDBusMessage)), receiver, errorMethod);
-            pcall->watcherHelper->moveToThread(thread());
-        }
         processFinishedCall(pcall);
         delete pcall;
@@ -1961,19 +1977,7 @@
     }
 
-    // has it already finished with error?
-    if (pcall->replyMessage.type() != QDBusMessage::InvalidMessage) {
-        delete pcall;
-        return 0;
-    }
-
     pcall->autoDelete = true;
     pcall->ref.ref();
-
     pcall->setReplyCallback(receiver, returnMethod);
-    if (errorMethod) {
-        pcall->watcherHelper = new QDBusPendingCallWatcherHelper;
-        connect(pcall->watcherHelper, SIGNAL(error(QDBusError,QDBusMessage)), receiver, errorMethod);
-        pcall->watcherHelper->moveToThread(thread());
-    }
 
     return 1;
@@ -2005,5 +2009,6 @@
             entry.signature == hook.signature &&
             entry.obj == hook.obj &&
-            entry.midx == hook.midx) {
+            entry.midx == hook.midx &&
+            entry.argumentMatch == hook.argumentMatch) {
             // no need to compare the parameters if it's the same slot
             return true;        // already there
@@ -2047,8 +2052,5 @@
             if (shouldWatchService(hook.service)) {
                 WatchedServicesHash::mapped_type &data = watchedServices[hook.service];
-                if (data.refcount) {
-                    // already watching
-                    ++data.refcount;
-                } else {
+                if (++data.refcount == 1) {
                     // we need to watch for this service changing
                     QString dbusServerService = QLatin1String(DBUS_SERVICE_DBUS);
@@ -2090,5 +2092,6 @@
             entry.signature == hook.signature &&
             entry.obj == hook.obj &&
-            entry.midx == hook.midx) {
+            entry.midx == hook.midx &&
+            entry.argumentMatch == hook.argumentMatch) {
             // no need to compare the parameters if it's the same slot
             disconnectSignal(it);
@@ -2105,17 +2108,4 @@
 {
     const SignalHook &hook = it.value();
-
-    WatchedServicesHash::Iterator sit = watchedServices.find(hook.service);
-    if (sit != watchedServices.end()) {
-        if (sit.value().refcount == 1) {
-            watchedServices.erase(sit);
-            QString dbusServerService = QLatin1String(DBUS_SERVICE_DBUS);
-            disconnectSignal(dbusServerService, QString(), QLatin1String(DBUS_INTERFACE_DBUS),
-                          QLatin1String("NameOwnerChanged"), QStringList() << hook.service, QString(),
-                          this, SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
-        } else {
-            --sit.value().refcount;
-        }
-    }
 
     bool erase = false;
@@ -2137,4 +2127,18 @@
         qDBusDebug("Removing rule: %s", hook.matchRule.constData());
         q_dbus_bus_remove_match(connection, hook.matchRule, NULL);
+
+        // Successfully disconnected the signal
+        // Were we watching for this name?
+        WatchedServicesHash::Iterator sit = watchedServices.find(hook.service);
+        if (sit != watchedServices.end()) {
+            if (--sit.value().refcount == 0) {
+                watchedServices.erase(sit);
+                QString dbusServerService = QLatin1String(DBUS_SERVICE_DBUS);
+                disconnectSignal(dbusServerService, QString(), QLatin1String(DBUS_INTERFACE_DBUS),
+                              QLatin1String("NameOwnerChanged"), QStringList() << hook.service, QString(),
+                              this, SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
+            }
+        }
+
     }
 
Index: /trunk/src/dbus/qdbusinterface.cpp
===================================================================
--- /trunk/src/dbus/qdbusinterface.cpp	(revision 768)
+++ /trunk/src/dbus/qdbusinterface.cpp	(revision 769)
@@ -259,5 +259,5 @@
 {
     _id = QDBusAbstractInterface::qt_metacall(_c, _id, _a);
-    if (_id < 0 || !d_func()->isValid)
+    if (_id < 0 || !d_func()->isValid || !d_func()->metaObject)
         return _id;
     return d_func()->metacall(_c, _id, _a);
Index: /trunk/src/dbus/qdbusmacros.h
===================================================================
--- /trunk/src/dbus/qdbusmacros.h	(revision 768)
+++ /trunk/src/dbus/qdbusmacros.h	(revision 769)
@@ -49,6 +49,8 @@
 #if defined(QDBUS_MAKEDLL)
 # define QDBUS_EXPORT Q_DECL_EXPORT
+#elif defined(QT_SHARED)
+# define QDBUS_EXPORT Q_DECL_IMPORT
 #else
-# define QDBUS_EXPORT Q_DECL_IMPORT
+# define QDBUS_EXPORT
 #endif
 
Index: /trunk/src/dbus/qdbusmarshaller.cpp
===================================================================
--- /trunk/src/dbus/qdbusmarshaller.cpp	(revision 768)
+++ /trunk/src/dbus/qdbusmarshaller.cpp	(revision 769)
@@ -41,4 +41,5 @@
 
 #include "qdbusargument_p.h"
+#include "qdbusmetatype_p.h"
 #include "qdbusutil_p.h"
 
@@ -168,5 +169,5 @@
     QByteArray tmpSignature;
     const char *signature = 0;
-    if (int(id) == qMetaTypeId<QDBusArgument>()) {
+    if (int(id) == QDBusMetaTypeId::argument) {
         // take the signature from the QDBusArgument object we're marshalling
         tmpSignature =
@@ -354,5 +355,5 @@
 
     // intercept QDBusArgument parameters here
-    if (id == qMetaTypeId<QDBusArgument>()) {
+    if (id == QDBusMetaTypeId::argument) {
         QDBusArgument dbusargument = qvariant_cast<QDBusArgument>(arg);
         QDBusArgumentPrivate *d = QDBusArgumentPrivate::d(dbusargument);
Index: /trunk/src/dbus/qdbuspendingcall.cpp
===================================================================
--- /trunk/src/dbus/qdbuspendingcall.cpp	(revision 768)
+++ /trunk/src/dbus/qdbuspendingcall.cpp	(revision 769)
@@ -209,4 +209,6 @@
 void QDBusPendingCallPrivate::checkReceivedSignature()
 {
+    // MUST BE CALLED WITH A LOCKED MUTEX!
+
     if (replyMessage.type() == QDBusMessage::InvalidMessage)
         return;                 // not yet finished - no message to
@@ -231,4 +233,6 @@
 void QDBusPendingCallPrivate::waitForFinished()
 {
+    QMutexLocker locker(&mutex);
+
     if (replyMessage.type() != QDBusMessage::InvalidMessage)
         return;                 // already finished
@@ -311,5 +315,9 @@
 bool QDBusPendingCall::isFinished() const
 {
-    return !d || (d->replyMessage.type() != QDBusMessage::InvalidMessage);
+    if (!d)
+        return true; // considered finished
+
+    QMutexLocker locker(&d->mutex);
+    return d->replyMessage.type() != QDBusMessage::InvalidMessage;
 }
 
@@ -330,5 +338,8 @@
 bool QDBusPendingCall::isValid() const
 {
-    return d ? d->replyMessage.type() == QDBusMessage::ReplyMessage : false;
+    if (!d)
+        return false;
+    QMutexLocker locker(&d->mutex);
+    return d->replyMessage.type() == QDBusMessage::ReplyMessage;
 }
 
@@ -344,5 +355,8 @@
 bool QDBusPendingCall::isError() const
 {
-    return d ? d->replyMessage.type() == QDBusMessage::ErrorMessage : true;
+    if (!d)
+        return true; // considered finished and an error
+    QMutexLocker locker(&d->mutex);
+    return d->replyMessage.type() == QDBusMessage::ErrorMessage;
 }
 
@@ -357,6 +371,8 @@
 QDBusError QDBusPendingCall::error() const
 {
-    if (d)
+    if (d) {
+        QMutexLocker locker(&d->mutex);
         return d->replyMessage;
+    }
 
     // not connected, return an error
@@ -379,5 +395,8 @@
 QDBusMessage QDBusPendingCall::reply() const
 {
-    return d ? d->replyMessage : QDBusMessage::createError(error());
+    if (!d)
+        return QDBusMessage::createError(error());
+    QMutexLocker locker(&d->mutex);
+    return d->replyMessage;
 }
 
@@ -440,7 +459,6 @@
     if (msg.type() == QDBusMessage::ErrorMessage ||
         msg.type() == QDBusMessage::ReplyMessage) {
-        d = new QDBusPendingCallPrivate;
+        d = new QDBusPendingCallPrivate(QDBusMessage(), 0);
         d->replyMessage = msg;
-        d->connection = 0;
     }
 
@@ -472,7 +490,8 @@
 {
     if (d) {                    // QDBusPendingCall::d
+        QMutexLocker locker(&d->mutex);
         if (!d->watcherHelper) {
             d->watcherHelper = new QDBusPendingCallWatcherHelper;
-            if (isFinished()) {
+            if (d->replyMessage.type() != QDBusMessage::InvalidMessage) {
                 // cause a signal emission anyways
                 QMetaObject::invokeMethod(d->watcherHelper, "finished", Qt::QueuedConnection);
Index: /trunk/src/dbus/qdbuspendingcall_p.h
===================================================================
--- /trunk/src/dbus/qdbuspendingcall_p.h	(revision 768)
+++ /trunk/src/dbus/qdbuspendingcall_p.h	(revision 769)
@@ -58,4 +58,6 @@
 #include <qpointer.h>
 #include <qlist.h>
+#include <qmutex.h>
+#include <qwaitcondition.h>
 
 #include "qdbusmessage.h"
@@ -72,15 +74,10 @@
 {
 public:
-    QDBusMessage sentMessage;
-    QDBusMessage replyMessage;
-//    QDBusMessage pendingReplyMessage; // used in the local loop
-    QDBusPendingCallWatcherHelper *watcherHelper;
-    DBusPendingCall *pending;
-    QDBusConnectionPrivate *connection;
+    // {
+    //     set only during construction:
+    const QDBusMessage sentMessage;
+    QDBusConnectionPrivate * const connection;
 
-    QString expectedReplySignature;
-    int expectedReplyCount;
-
-    // for the callback
+    // for the callback mechanism (see setReplyCallback and QDBusConnectionPrivate::sendWithReplyAsync)
     QPointer<QObject> receiver;
     QList<int> metaTypes;
@@ -88,6 +85,22 @@
 
     bool autoDelete;
+    // }
 
-    QDBusPendingCallPrivate() : watcherHelper(0), pending(0), autoDelete(false)
+    mutable QMutex mutex;
+    QWaitCondition waitForFinishedCondition;
+
+    // {
+    //    protected by the mutex above:
+    QDBusPendingCallWatcherHelper *watcherHelper;
+    QDBusMessage replyMessage;
+    DBusPendingCall *pending;
+    volatile bool waitingForFinished;
+
+    QString expectedReplySignature;
+    int expectedReplyCount;
+    // }
+
+    QDBusPendingCallPrivate(const QDBusMessage &sent, QDBusConnectionPrivate *connection)
+        : sentMessage(sent), connection(connection), autoDelete(false), watcherHelper(0), pending(0), waitingForFinished(false)
     { }
     ~QDBusPendingCallPrivate();
Index: /trunk/src/dbus/qdbuspendingreply.cpp
===================================================================
--- /trunk/src/dbus/qdbuspendingreply.cpp	(revision 768)
+++ /trunk/src/dbus/qdbuspendingreply.cpp	(revision 769)
@@ -253,5 +253,5 @@
 void QDBusPendingReplyData::assign(const QDBusMessage &message)
 {
-    d = new QDBusPendingCallPrivate; // drops the reference to the old one
+    d = new QDBusPendingCallPrivate(QDBusMessage(), 0); // drops the reference to the old one
     d->replyMessage = message;
 }
@@ -272,4 +272,5 @@
 {
     Q_ASSERT(d);
+    QMutexLocker locker(&d->mutex);
     d->setMetaTypes(count, types);
     d->checkReceivedSignature();
Index: /trunk/src/gui/dialogs/qcolordialog.cpp
===================================================================
--- /trunk/src/gui/dialogs/qcolordialog.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qcolordialog.cpp	(revision 769)
@@ -645,4 +645,5 @@
     void mouseMoveEvent(QMouseEvent *);
     void mousePressEvent(QMouseEvent *);
+    void resizeEvent(QResizeEvent *);
 
 private:
@@ -655,5 +656,5 @@
     void setCol(const QPoint &pt);
 
-    QPixmap *pix;
+    QPixmap pix;
 };
 
@@ -791,11 +792,25 @@
 
 QPoint QColorPicker::colPt()
-{ return QPoint((360-hue)*(pWidth-1)/360, (255-sat)*(pHeight-1)/255); }
+{
+    QRect r = contentsRect();
+    return QPoint((360 - hue) * (r.width() - 1) / 360, (255 - sat) * (r.height() - 1) / 255);
+}
+
 int QColorPicker::huePt(const QPoint &pt)
-{ return 360 - pt.x()*360/(pWidth-1); }
+{
+    QRect r = contentsRect();
+    return 360 - pt.x() * 360 / (r.width() - 1);
+}
+
 int QColorPicker::satPt(const QPoint &pt)
-{ return 255 - pt.y()*255/(pHeight-1) ; }
+{
+    QRect r = contentsRect();
+    return 255 - pt.y() * 255 / (r.height() - 1);
+}
+
 void QColorPicker::setCol(const QPoint &pt)
-{ setCol(huePt(pt), satPt(pt)); }
+{
+    setCol(huePt(pt), satPt(pt));
+}
 
 QColorPicker::QColorPicker(QWidget* parent)
@@ -805,9 +820,72 @@
     setCol(150, 255);
 
-    QImage img(pWidth, pHeight, QImage::Format_RGB32);
+    setAttribute(Qt::WA_NoSystemBackground);
+    setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed) );
+}
+
+QColorPicker::~QColorPicker()
+{
+}
+
+QSize QColorPicker::sizeHint() const
+{
+    return QSize(pWidth + 2*frameWidth(), pHeight + 2*frameWidth());
+}
+
+void QColorPicker::setCol(int h, int s)
+{
+    int nhue = qMin(qMax(0,h), 359);
+    int nsat = qMin(qMax(0,s), 255);
+    if (nhue == hue && nsat == sat)
+        return;
+
+    QRect r(colPt(), QSize(20,20));
+    hue = nhue; sat = nsat;
+    r = r.united(QRect(colPt(), QSize(20,20)));
+    r.translate(contentsRect().x()-9, contentsRect().y()-9);
+    //    update(r);
+    repaint(r);
+}
+
+void QColorPicker::mouseMoveEvent(QMouseEvent *m)
+{
+    QPoint p = m->pos() - contentsRect().topLeft();
+    setCol(p);
+    emit newCol(hue, sat);
+}
+
+void QColorPicker::mousePressEvent(QMouseEvent *m)
+{
+    QPoint p = m->pos() - contentsRect().topLeft();
+    setCol(p);
+    emit newCol(hue, sat);
+}
+
+void QColorPicker::paintEvent(QPaintEvent* )
+{
+    QPainter p(this);
+    drawFrame(&p);
+    QRect r = contentsRect();
+
+    p.drawPixmap(r.topLeft(), pix);
+    QPoint pt = colPt() + r.topLeft();
+    p.setPen(Qt::black);
+
+    p.fillRect(pt.x()-9, pt.y(), 20, 2, Qt::black);
+    p.fillRect(pt.x(), pt.y()-9, 2, 20, Qt::black);
+
+}
+
+void QColorPicker::resizeEvent(QResizeEvent *ev)
+{
+    QFrame::resizeEvent(ev);
+
+    int w = width() - frameWidth() * 2;
+    int h = height() - frameWidth() * 2;
+    QImage img(w, h, QImage::Format_RGB32);
     int x, y;
     uint *pixel = (uint *) img.scanLine(0);
-    for (y = 0; y < pHeight; y++) {
-        const uint *end = pixel + pWidth;
+    for (y = 0; y < h; y++) {
+        const uint *end = pixel + w;
         x = 0;
         while (pixel < end) {
@@ -820,62 +898,7 @@
         }
     }
-    pix = new QPixmap(QPixmap::fromImage(img));
-    setAttribute(Qt::WA_NoSystemBackground);
-    setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed) );
-}
-
-QColorPicker::~QColorPicker()
-{
-    delete pix;
-}
-
-QSize QColorPicker::sizeHint() const
-{
-    return QSize(pWidth + 2*frameWidth(), pHeight + 2*frameWidth());
-}
-
-void QColorPicker::setCol(int h, int s)
-{
-    int nhue = qMin(qMax(0,h), 359);
-    int nsat = qMin(qMax(0,s), 255);
-    if (nhue == hue && nsat == sat)
-        return;
-
-    QRect r(colPt(), QSize(20,20));
-    hue = nhue; sat = nsat;
-    r = r.united(QRect(colPt(), QSize(20,20)));
-    r.translate(contentsRect().x()-9, contentsRect().y()-9);
-    //    update(r);
-    repaint(r);
-}
-
-void QColorPicker::mouseMoveEvent(QMouseEvent *m)
-{
-    QPoint p = m->pos() - contentsRect().topLeft();
-    setCol(p);
-    emit newCol(hue, sat);
-}
-
-void QColorPicker::mousePressEvent(QMouseEvent *m)
-{
-    QPoint p = m->pos() - contentsRect().topLeft();
-    setCol(p);
-    emit newCol(hue, sat);
-}
-
-void QColorPicker::paintEvent(QPaintEvent* )
-{
-    QPainter p(this);
-    drawFrame(&p);
-    QRect r = contentsRect();
-
-    p.drawPixmap(r.topLeft(), *pix);
-    QPoint pt = colPt() + r.topLeft();
-    p.setPen(Qt::black);
-
-    p.fillRect(pt.x()-9, pt.y(), 20, 2, Qt::black);
-    p.fillRect(pt.x(), pt.y()-9, 2, 20, Qt::black);
-
-}
+    pix = QPixmap::fromImage(img);
+}
+
 
 class QColSpinBox : public QSpinBox
@@ -1079,6 +1102,5 @@
 #ifdef QT_SMALL_COLORDIALOG
 #  ifdef Q_WS_S60
-    QS60Data s60Data = QS60Data();
-    const bool nonTouchUI = !s60Data.hasTouchscreen;
+    const bool nonTouchUI = !S60->hasTouchscreen;
 #  elif defined Q_WS_MAEMO_5
     const bool nonTouchUI = false;
@@ -1507,6 +1529,5 @@
 #if defined(QT_SMALL_COLORDIALOG)
 #  if defined(Q_WS_S60)
-    QS60Data s60Data = QS60Data();
-    const bool nonTouchUI = !s60Data.hasTouchscreen;
+    const bool nonTouchUI = !S60->hasTouchscreen;
 #  elif defined(Q_WS_MAEMO_5)
     const bool nonTouchUI = false;
Index: /trunk/src/gui/dialogs/qcolordialog_mac.mm
===================================================================
--- /trunk/src/gui/dialogs/qcolordialog_mac.mm	(revision 768)
+++ /trunk/src/gui/dialogs/qcolordialog_mac.mm	(revision 769)
@@ -97,4 +97,5 @@
 - (void)showColorPanel;
 - (void)exec;
+- (void)setResultSet:(BOOL)result;
 @end
 
@@ -157,4 +158,9 @@
     delete mQtColor;
     [super dealloc];
+}
+
+- (void)setResultSet:(BOOL)result
+{
+    mResultSet = result;
 }
 
@@ -321,5 +327,5 @@
                 mPriv->colorDialog()->accept();
             }
-        }
+        } 
     }
 }
@@ -434,5 +440,5 @@
         [colorPanel setDelegate:static_cast<QCocoaColorPanelDelegate *>(delegate)];
     }
-
+    [delegate setResultSet:false];
     setCocoaPanelColor(initial);
     [static_cast<QCocoaColorPanelDelegate *>(delegate) showColorPanel];
Index: /trunk/src/gui/dialogs/qdialog.cpp
===================================================================
--- /trunk/src/gui/dialogs/qdialog.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qdialog.cpp	(revision 769)
@@ -70,5 +70,4 @@
 #   include "qcolordialog.h"
 #   include "qwizard.h"
-#   include "qmenubar.h"
 #endif
 
@@ -416,6 +415,13 @@
      }
 #else
-    if ((e->type() == QEvent::StyleChange) || (e->type() == QEvent::Resize ))
-        adjustPosition(parentWidget());
+    if ((e->type() == QEvent::StyleChange) || (e->type() == QEvent::Resize )) {
+        if (!testAttribute(Qt::WA_Moved)) {
+            Qt::WindowStates state = windowState();
+            adjustPosition(parentWidget());
+            setAttribute(Qt::WA_Moved, false); // not really an explicit position
+            if (state != windowState())
+                setWindowState(state);
+        }
+    }
 #endif
     return result;
@@ -523,10 +529,4 @@
 
 #ifdef Q_OS_SYMBIAN
-#ifndef QT_NO_MENUBAR
-    QMenuBar *menuBar = 0;
-    if (!findChild<QMenuBar *>())
-        menuBar = new QMenuBar(this);
-#endif
-
     if (qobject_cast<QFileDialog *>(this) || qobject_cast<QFontDialog *>(this) ||
         qobject_cast<QColorDialog *>(this) || qobject_cast<QWizard *>(this))
@@ -560,11 +560,4 @@
 #endif //QT_NO_MENUBAR
 #endif //Q_WS_WINCE_WM
-#ifdef Q_OS_SYMBIAN
-#ifndef QT_NO_MENUBAR
-    else if (menuBar)
-        delete menuBar;
-#endif //QT_NO_MENUBAR
-#endif //Q_OS_SYMBIAN
-
     return res;
 }
@@ -808,9 +801,9 @@
 {
     if (!event->spontaneous() && !testAttribute(Qt::WA_Moved)) {
-	Qt::WindowStates  state = windowState();
+        Qt::WindowStates  state = windowState();
         adjustPosition(parentWidget());
         setAttribute(Qt::WA_Moved, false); // not really an explicit position
-	if (state != windowState())
-	    setWindowState(state);
+        if (state != windowState())
+            setWindowState(state);
     }
 }
@@ -912,24 +905,31 @@
                 cbaHeight = qt_TSize2QSize(bgContainer->Size()).height();
             }
-            p.setY(S60->screenHeightInPixels-height()-cbaHeight);
+            p.setY(S60->screenHeightInPixels - height() - cbaHeight);
             p.setX(0);
         } else {
             const int scrollbarWidth = style()->pixelMetric(QStyle::PM_ScrollBarExtent);
-            TRect cbaRect = TRect();
-            AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect);
-            AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation();
-            switch (cbaLocation) {
-            case AknLayoutUtils::EAknCbaLocationBottom:
-                p.setY(S60->screenHeightInPixels - height()-cbaRect.Height());
-                p.setX((S60->screenWidthInPixels - width())>>1);
-                break;
-            case AknLayoutUtils::EAknCbaLocationRight:
-                p.setY((S60->screenHeightInPixels - height())>>1);
-                p.setX(qMax(0,S60->screenWidthInPixels-width()-scrollbarWidth-cbaRect.Width()));
-                break;
-            case AknLayoutUtils::EAknCbaLocationLeft:
-                p.setY((S60->screenHeightInPixels - height())>>1);
-                p.setX(qMax(0,scrollbarWidth+cbaRect.Width()));
-                break;
+            TRect staConTopRect = TRect();
+            AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, staConTopRect);
+            if (staConTopRect.IsEmpty()) {
+                TRect cbaRect = TRect();
+                AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect);
+                AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation();
+                switch (cbaLocation) {
+                case AknLayoutUtils::EAknCbaLocationBottom:
+                    p.setY(S60->screenHeightInPixels - height() - cbaRect.Height());
+                    p.setX((S60->screenWidthInPixels - width()) >> 1);
+                    break;
+                case AknLayoutUtils::EAknCbaLocationRight:
+                    p.setY((S60->screenHeightInPixels - height()) >> 1);
+                    p.setX(qMax(0,S60->screenWidthInPixels - width() - scrollbarWidth - cbaRect.Width()));
+                    break;
+                case AknLayoutUtils::EAknCbaLocationLeft:
+                    p.setY((S60->screenHeightInPixels - height()) >> 1);
+                    p.setX(qMax(0,scrollbarWidth + cbaRect.Width()));
+                    break;
+                }
+            } else {
+                p.setY((S60->screenHeightInPixels - height()) >> 1);
+                p.setX(qMax(0,S60->screenWidthInPixels - width()));
             }
         }
Index: /trunk/src/gui/dialogs/qfiledialog.cpp
===================================================================
--- /trunk/src/gui/dialogs/qfiledialog.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qfiledialog.cpp	(revision 769)
@@ -230,9 +230,8 @@
 
     \value HideNameFilterDetails Indicates if the is hidden or not.
-    This value is obsolete and does nothing since Qt 4.5:
 
     \value DontUseSheet In previous versions of Qt, the static
     functions would create a sheet by default if the static function
-    was given a parent. This is no longer supported in Qt 4.5, The
+    was given a parent. This is no longer supported and does nothing in Qt 4.5, The
     static functions will always be an application modal dialog. If
     you want to use sheets, use QFileDialog::open() instead.
Index: /trunk/src/gui/dialogs/qfiledialog.ui
===================================================================
--- /trunk/src/gui/dialogs/qfiledialog.ui	(revision 768)
+++ /trunk/src/gui/dialogs/qfiledialog.ui	(revision 769)
@@ -84,4 +84,10 @@
         <string>Back</string>
        </property>
+       <property name="accessibleName">
+        <string>Back</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Go back</string>
+       </property>
       </widget>
      </item>
@@ -91,4 +97,10 @@
         <string>Forward</string>
        </property>
+       <property name="accessibleName">
+        <string>Forward</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Go forward</string>
+       </property>
       </widget>
      </item>
@@ -98,4 +110,10 @@
         <string>Parent Directory</string>
        </property>
+       <property name="accessibleName">
+        <string>Parent Directory</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Go to the parent directory</string>
+       </property>
       </widget>
      </item>
@@ -105,4 +123,10 @@
         <string>Create New Folder</string>
        </property>
+       <property name="accessibleName">
+        <string>Create New Folder</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Create a New Folder</string>
+       </property>
       </widget>
      </item>
@@ -112,4 +136,10 @@
         <string>List View</string>
        </property>
+       <property name="accessibleName">
+        <string>List View</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Change to list view mode</string>
+       </property>
       </widget>
      </item>
@@ -118,4 +148,10 @@
        <property name="toolTip" >
         <string>Detail View</string>
+       </property>
+       <property name="accessibleName">
+        <string>Detail View</string>
+       </property>
+       <property name="accessibleDescription">
+        <string>Change to detail view mode</string>
        </property>
       </widget>
Index: /trunk/src/gui/dialogs/qfilesystemmodel.cpp
===================================================================
--- /trunk/src/gui/dialogs/qfilesystemmodel.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qfilesystemmodel.cpp	(revision 769)
@@ -1361,4 +1361,14 @@
         return d->index(rootPath());
 
+    //We remove the watcher on the previous path
+    if (!rootPath().isEmpty() && rootPath() != QLatin1String(".")) {
+        //This remove the watcher for the old rootPath
+        d->fileInfoGatherer.removePath(rootPath());
+        //This line "marks" the node as dirty, so the next fetchMore
+        //call on the path will ask the gatherer to install a watcher again
+        //But it doesn't re-fetch everything
+        d->node(rootPath())->populatedChildren = false;
+    }
+
     // We have a new valid root path
     d->rootDir = newPathDir;
Index: /trunk/src/gui/dialogs/qfontdialog.cpp
===================================================================
--- /trunk/src/gui/dialogs/qfontdialog.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qfontdialog.cpp	(revision 769)
@@ -990,32 +990,22 @@
 {
     Q_D(QFontDialog);
-    if (visible)
-        d->selectedFont = QFont();
-
-#if defined(Q_WS_MAC)
-    bool isCurrentlyVisible = (isVisible() || d->delegate);
-
-    if (!visible == !isCurrentlyVisible)
+    if (visible) {
+        if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden))
+            return;
+    } else if  (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden))
         return;
-
-    if (visible) {
-        if (!(d->opts & DontUseNativeDialog) && QFontDialogPrivate::sharedFontPanelAvailable) {
-            d->delegate = QFontDialogPrivate::openCocoaFontPanel(
-                              currentFont(), parentWidget(), windowTitle(), options(), d);
-            QFontDialogPrivate::sharedFontPanelAvailable = false;
-            return;
+#ifdef Q_WS_MAC
+    if (d->canBeNativeDialog()){
+        if (d->setVisible_sys(visible)){
+            d->nativeDialogInUse = true;
+            // Set WA_DontShowOnScreen so that QDialog::setVisible(visible) below
+            // updates the state correctly, but skips showing the non-native version:
+            setAttribute(Qt::WA_DontShowOnScreen, true);
+        } else {
+            d->nativeDialogInUse = false;
+            setAttribute(Qt::WA_DontShowOnScreen, false);
         }
-
-        setWindowFlags(windowModality() == Qt::WindowModal ? Qt::Sheet : DefaultWindowFlags);
-    } else {
-        if (d->delegate) {
-            QFontDialogPrivate::closeCocoaFontPanel(d->delegate);
-            d->delegate = 0;
-            QFontDialogPrivate::sharedFontPanelAvailable = true;
-            return;
-        }
-    }
-#endif
-
+    }
+#endif // Q_WS_MAC
     QDialog::setVisible(visible);
 }
@@ -1033,9 +1023,12 @@
     QDialog::done(result);
     if (result == Accepted) {
-        d->selectedFont = currentFont();
+        // We check if this is the same font we had before, if so we emit currentFontChanged
+        QFont selectedFont = currentFont();
+        if(selectedFont != d->selectedFont)
+            emit(currentFontChanged(selectedFont));
+        d->selectedFont = selectedFont;
         emit fontSelected(d->selectedFont);
-    } else {
+    } else
         d->selectedFont = QFont();
-    }
     if (d->receiverToDisconnectOnClose) {
         disconnect(this, SIGNAL(fontSelected(QFont)),
@@ -1046,4 +1039,21 @@
 }
 
+#ifdef Q_WS_MAC
+bool QFontDialogPrivate::canBeNativeDialog()
+{
+    Q_Q(QFontDialog);
+    if (nativeDialogInUse)
+        return true;
+    if (q->testAttribute(Qt::WA_DontShowOnScreen))
+        return false;
+    if (opts & QFontDialog::DontUseNativeDialog)
+        return false;
+
+    QLatin1String staticName(QFontDialog::staticMetaObject.className());
+    QLatin1String dynamicName(q->metaObject()->className());
+    return (staticName == dynamicName);
+}
+#endif // Q_WS_MAC
+
 /*!
     \fn QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget* parent, const char* name)
Index: /trunk/src/gui/dialogs/qfontdialog.h
===================================================================
--- /trunk/src/gui/dialogs/qfontdialog.h	(revision 768)
+++ /trunk/src/gui/dialogs/qfontdialog.h	(revision 769)
@@ -132,4 +132,7 @@
     Q_PRIVATE_SLOT(d_func(), void _q_sizeHighlighted(int))
     Q_PRIVATE_SLOT(d_func(), void _q_updateSample())
+#if defined(Q_WS_MAC)
+    Q_PRIVATE_SLOT(d_func(), void _q_macRunNativeAppModalPanel())
+#endif
 };
 
Index: /trunk/src/gui/dialogs/qfontdialog_mac.mm
===================================================================
--- /trunk/src/gui/dialogs/qfontdialog_mac.mm	(revision 768)
+++ /trunk/src/gui/dialogs/qfontdialog_mac.mm	(revision 769)
@@ -50,4 +50,5 @@
 #include <private/qt_cocoa_helpers_mac_p.h>
 #include <private/qt_mac_p.h>
+#include <qabstracteventdispatcher.h>
 #include <qdebug.h>
 #import <AppKit/AppKit.h>
@@ -373,5 +374,10 @@
             mModalSession = 0;
         }
-
+        // Hack alert!
+        // Since this code path was never intended to be followed when starting from exec
+        // we need to force the dialog to communicate the new font, otherwise the signal
+        // won't get emitted.
+        if(code == NSOKButton)
+            mPriv->sampleEdit->setFont([self qtFont]);
         mPriv->done((code == NSOKButton) ? QDialog::Accepted : QDialog::Rejected);
     } else {
@@ -568,5 +574,4 @@
         }
     }
-
     return delegate;
 }
@@ -641,4 +646,143 @@
 }
 
+void *QFontDialogPrivate::_q_constructNativePanel()
+{
+    QMacCocoaAutoReleasePool pool;
+
+    bool sharedFontPanelExisted = [NSFontPanel sharedFontPanelExists];
+    NSFontPanel *sharedFontPanel = [NSFontPanel sharedFontPanel];
+    [sharedFontPanel setHidesOnDeactivate:false];
+
+    // hack to ensure that QCocoaApplication's validModesForFontPanel:
+    // implementation is honored
+    if (!sharedFontPanelExisted) {
+        [sharedFontPanel makeKeyAndOrderFront:sharedFontPanel];
+        [sharedFontPanel close];
+    }
+
+    NSPanel *ourPanel = 0;
+    NSView *stolenContentView = 0;
+    NSButton *okButton = 0;
+    NSButton *cancelButton = 0;
+
+    CGFloat dialogExtraWidth = 0.0;
+    CGFloat dialogExtraHeight = 0.0;
+
+    // compute dialogExtra{Width,Height}
+    dialogExtraWidth = 2.0 * DialogSideMargin;
+    dialogExtraHeight = DialogTopMargin + ButtonTopMargin + ButtonMinHeight
+                        + ButtonBottomMargin;
+
+    // compute initial contents rectangle
+    NSRect contentRect = [sharedFontPanel contentRectForFrameRect:[sharedFontPanel frame]];
+    contentRect.size.width += dialogExtraWidth;
+    contentRect.size.height += dialogExtraHeight;
+
+    // create the new panel
+    ourPanel = [[NSPanel alloc] initWithContentRect:contentRect
+                styleMask:StyleMask
+                    backing:NSBackingStoreBuffered
+                        defer:YES];
+    [ourPanel setReleasedWhenClosed:YES];
+
+    stolenContentView = [sharedFontPanel contentView];
+
+    // steal the font panel's contents view
+    [stolenContentView retain];
+    [sharedFontPanel setContentView:0];
+
+    {
+        // create a new content view and add the stolen one as a subview
+        NSRect frameRect = { { 0.0, 0.0 }, { 0.0, 0.0 } };
+        NSView *ourContentView = [[NSView alloc] initWithFrame:frameRect];
+        [ourContentView addSubview:stolenContentView];
+
+        // create OK and Cancel buttons and add these as subviews
+        okButton = macCreateButton("&OK", ourContentView);
+        cancelButton = macCreateButton("Cancel", ourContentView);
+
+        [ourPanel setContentView:ourContentView];
+        [ourPanel setDefaultButtonCell:[okButton cell]];
+    }
+    // create a delegate and set it
+    QCocoaFontPanelDelegate *delegate =
+            [[QCocoaFontPanelDelegate alloc] initWithFontPanel:sharedFontPanel
+                                             stolenContentView:stolenContentView
+                                                      okButton:okButton
+                                                  cancelButton:cancelButton
+                                                          priv:this
+                                                    extraWidth:dialogExtraWidth
+                                                   extraHeight:dialogExtraHeight];
+    [ourPanel setDelegate:delegate];
+    [[NSFontManager sharedFontManager] setDelegate:delegate];
+#ifdef QT_MAC_USE_COCOA
+    [[NSFontManager sharedFontManager] setTarget:delegate];
+#endif
+    setFont(delegate, QApplication::font());
+
+    {
+        // hack to get correct initial layout
+        NSRect frameRect = [ourPanel frame];
+        frameRect.size.width += 1.0;
+        [ourPanel setFrame:frameRect display:NO];
+        frameRect.size.width -= 1.0;
+        frameRect.size = [delegate windowWillResize:ourPanel toSize:frameRect.size];
+        [ourPanel setFrame:frameRect display:NO];
+        [ourPanel center];
+    }
+    NSString *title = @"Select font";
+    [ourPanel setTitle:title];
+
+    [delegate setModalSession:[NSApp beginModalSessionForWindow:ourPanel]];
+    return delegate;
+}
+
+void QFontDialogPrivate::mac_nativeDialogModalHelp()
+{
+    // Copied from QFileDialogPrivate
+    // Do a queued meta-call to open the native modal dialog so it opens after the new
+    // event loop has started to execute (in QDialog::exec). Using a timer rather than
+    // a queued meta call is intentional to ensure that the call is only delivered when
+    // [NSApp run] runs (timers are handeled special in cocoa). If NSApp is not
+    // running (which is the case if e.g a top-most QEventLoop has been
+    // interrupted, and the second-most event loop has not yet been reactivated (regardless
+    // if [NSApp run] is still on the stack)), showing a native modal dialog will fail.
+    if (nativeDialogInUse) {
+        Q_Q(QFontDialog);
+        QTimer::singleShot(1, q, SLOT(_q_macRunNativeAppModalPanel()));
+    }
+}
+
+// The problem with the native font dialog is that OS X does not
+// offer a proper dialog, but a panel (i.e. without Ok and Cancel buttons).
+// This means we need to "construct" a native dialog by taking the panel
+// and "adding" the buttons.
+void QFontDialogPrivate::_q_macRunNativeAppModalPanel()
+{
+    QBoolBlocker nativeDialogOnTop(QApplicationPrivate::native_modal_dialog_active);
+    Q_Q(QFontDialog);
+    QCocoaFontPanelDelegate *delegate = (QCocoaFontPanelDelegate *)_q_constructNativePanel();
+    NSWindow *ourPanel = [delegate actualPanel];
+    [ourPanel retain];
+    int rval = [NSApp runModalForWindow:ourPanel];
+    QAbstractEventDispatcher::instance()->interrupt();
+    [ourPanel release];
+    [delegate cleanUpAfterMyself];
+    [delegate release];
+    bool isOk = (rval == NSOKButton);
+    if(isOk)
+        rescode = QDialog::Accepted;
+    else
+        rescode = QDialog::Rejected;
+}
+
+bool QFontDialogPrivate::setVisible_sys(bool visible)
+{
+    Q_Q(QFontDialog);
+    if (!visible == q->isHidden())
+        return false;
+    return visible;
+}
+
 QT_END_NAMESPACE
 
Index: /trunk/src/gui/dialogs/qfontdialog_p.h
===================================================================
--- /trunk/src/gui/dialogs/qfontdialog_p.h	(revision 768)
+++ /trunk/src/gui/dialogs/qfontdialog_p.h	(revision 769)
@@ -153,4 +153,10 @@
 
     void *delegate;
+    bool nativeDialogInUse;
+    bool canBeNativeDialog();
+    bool setVisible_sys(bool visible);
+    void *_q_constructNativePanel();
+    void _q_macRunNativeAppModalPanel();
+    void mac_nativeDialogModalHelp();
 
     static bool sharedFontPanelAvailable;
Index: /trunk/src/gui/dialogs/qmessagebox.cpp
===================================================================
--- /trunk/src/gui/dialogs/qmessagebox.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qmessagebox.cpp	(revision 769)
@@ -66,4 +66,8 @@
 #include <QtGui/qclipboard.h>
 
+#ifndef QT_NO_STYLE_S60
+#include <qs60style.h>
+#endif
+
 #ifdef Q_WS_WINCE
 extern bool qt_wince_is_mobile();    //defined in qguifunctions_wince.cpp
@@ -315,4 +319,5 @@
             width = hardLimit;
         }
+    }
 #ifdef Q_WS_S60
         // in S60 portait messageBoxes should always occupy maximum width
@@ -324,5 +329,4 @@
         }
 #endif
-    }
 
     if (informativeLabel) {
@@ -354,4 +358,14 @@
                      ? layout->totalHeightForWidth(width)
                      : layout->totalMinimumSize().height();
+
+#ifndef QT_NO_STYLE_S60
+        QS60Style *s60Style = 0;
+        s60Style = qobject_cast<QS60Style *>(QApplication::style());
+
+        //use custom pixel metric to deduce the minimum height of the messagebox
+        if (s60Style)
+            height = qMax(height, s60Style->pixelMetric((QStyle::PixelMetric)PM_MessageBoxHeight));
+#endif
+
     q->setFixedSize(width, height);
     QCoreApplication::removePostedEvents(q, QEvent::LayoutRequest);
Index: /trunk/src/gui/dialogs/qprintdialog.h
===================================================================
--- /trunk/src/gui/dialogs/qprintdialog.h	(revision 768)
+++ /trunk/src/gui/dialogs/qprintdialog.h	(revision 769)
@@ -57,5 +57,5 @@
 class QPrinter;
 
-#if (defined (Q_OS_UNIX) && !defined(QTOPIA_PRINTDIALOG) && !defined(Q_WS_MAC)) || defined (Q_WS_PM)
+#if (defined (Q_OS_UNIX) && !defined(QTOPIA_PRINTDIALOG) && !defined(Q_WS_MAC) && !defined(Q_OS_SYMBIAN)) || defined (Q_WS_PM)
 class QUnixPrintWidgetPrivate;
 
@@ -98,7 +98,7 @@
 
 #if defined (Q_OS_UNIX) && defined (QT3_SUPPORT)
-    void setPrinter(QPrinter *, bool = false);
-    QPrinter *printer() const;
-    void addButton(QPushButton *button);
+    QT3_SUPPORT void setPrinter(QPrinter *, bool = false);
+    QT3_SUPPORT QPrinter *printer() const;
+    QT3_SUPPORT void addButton(QPushButton *button);
 #endif
 
Index: /trunk/src/gui/dialogs/qprintdialog_unix.cpp
===================================================================
--- /trunk/src/gui/dialogs/qprintdialog_unix.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qprintdialog_unix.cpp	(revision 769)
@@ -155,4 +155,7 @@
     void setupPrinter();
     void setOptionsPane(QPrintDialogPrivate *pane);
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    void setCupsProperties();
+#endif
 
 // slots
@@ -970,5 +973,5 @@
 void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked()
 {
-    if (propertiesDialog == 0) {
+    if (!propertiesDialog) {
         propertiesDialog = new QPrintPropertiesDialog(q);
         propertiesDialog->setResult(QDialog::Rejected);
@@ -989,4 +992,33 @@
     propertiesDialog->exec();
 }
+
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+void QUnixPrintWidgetPrivate::setCupsProperties()
+{
+    if (cups && QCUPSSupport::isAvailable() && cups->pageSizes()) {
+        QPrintEngine *engine = printer->printEngine();
+        const ppd_option_t* pageSizes = cups->pageSizes();
+        QByteArray cupsPageSize;
+        for (int i = 0; i < pageSizes->num_choices; ++i) {
+            if (static_cast<int>(pageSizes->choices[i].marked) == 1)
+                cupsPageSize = pageSizes->choices[i].choice;
+        }
+        engine->setProperty(PPK_CupsStringPageSize, QString::fromLatin1(cupsPageSize));
+        engine->setProperty(PPK_CupsOptions, cups->options());
+
+        QRect pageRect = cups->pageRect(cupsPageSize);
+        engine->setProperty(PPK_CupsPageRect, pageRect);
+
+        QRect paperRect = cups->paperRect(cupsPageSize);
+        engine->setProperty(PPK_CupsPaperRect, paperRect);
+
+        for (int ps = 0; ps < QPrinter::NPaperSize; ++ps) {
+            QPdf::PaperSize size = QPdf::paperSize(QPrinter::PaperSize(ps));
+            if (size.width == paperRect.width() && size.height == paperRect.height())
+                printer->setPaperSize(static_cast<QPrinter::PaperSize>(ps));
+        }
+    }
+}
+#endif
 
 void QUnixPrintWidgetPrivate::setupPrinter()
@@ -1018,4 +1050,8 @@
     if (propertiesDialog && propertiesDialog->result() == QDialog::Accepted)
         propertiesDialog->setupPrinter();
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    if (!propertiesDialog)
+        setCupsProperties();
+#endif
 }
 
Index: /trunk/src/gui/dialogs/qprintpreviewdialog.cpp
===================================================================
--- /trunk/src/gui/dialogs/qprintpreviewdialog.cpp	(revision 768)
+++ /trunk/src/gui/dialogs/qprintpreviewdialog.cpp	(revision 769)
@@ -274,5 +274,18 @@
     QVBoxLayout *vboxLayout = new QVBoxLayout;
     vboxLayout->setContentsMargins(0, 0, 0, 0);
+#ifdef Q_WS_MAC
+    // We query the widgets about their size and then we fix the size.
+    // This should do the trick for the laying out part...
+    QSize pageNumEditSize, pageNumLabelSize;
+    pageNumEditSize = pageNumEdit->minimumSizeHint();
+    pageNumLabelSize = pageNumLabel->minimumSizeHint();
+    pageNumEdit->resize(pageNumEditSize);
+    pageNumLabel->resize(pageNumLabelSize);
+#endif
     QFormLayout *formLayout = new QFormLayout;
+#ifdef Q_WS_MAC
+    // We have to change the growth policy in Mac.
+    formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
+#endif
     formLayout->setWidget(0, QFormLayout::LabelRole, pageNumEdit);
     formLayout->setWidget(0, QFormLayout::FieldRole, pageNumLabel);
Index: /trunk/src/gui/effects/qgraphicseffect.cpp
===================================================================
--- /trunk/src/gui/effects/qgraphicseffect.cpp	(revision 768)
+++ /trunk/src/gui/effects/qgraphicseffect.cpp	(revision 769)
@@ -384,7 +384,7 @@
     if (m_cachedMode != QGraphicsEffect::PadToEffectiveBoundingRect
         && (reason == EffectRectChanged
-            || reason == TransformChanged
-               && m_cachedSystem == Qt::LogicalCoordinates))
-        return;
+            || (reason == TransformChanged && m_cachedSystem == Qt::LogicalCoordinates))) {
+        return;
+    }
 
     QPixmapCache::remove(m_cacheKey);
@@ -700,5 +700,7 @@
         // No point in drawing in device coordinates (pixmap will be scaled anyways).
         const QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset, NoPad);
-        d->filter->draw(painter, offset, pixmap);
+        if (!pixmap.isNull())
+            d->filter->draw(painter, offset, pixmap);
+
         return;
     }
@@ -706,4 +708,7 @@
     // Draw pixmap in deviceCoordinates to avoid pixmap scaling.
     const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset);
+    if (pixmap.isNull())
+        return;
+
     QTransform restoreTransform = painter->worldTransform();
     painter->setWorldTransform(QTransform());
@@ -722,5 +727,6 @@
     function. Use setBlurHints() to choose the blur hints.
 
-    By default, the blur radius is 5 pixels.
+    By default, the blur radius is 5 pixels. The blur radius is specified in
+    device coordinates.
 
     \img graphicseffect-blur.png
@@ -777,4 +783,7 @@
 
     By default, the blur radius is 5 pixels.
+
+    The radius is given in device coordinates, meaning it is
+    unaffected by scale.
 */
 qreal QGraphicsBlurEffect::blurRadius() const
@@ -859,7 +868,9 @@
         mode = NoPad;
 
-    // Draw pixmap in device coordinates to avoid pixmap scaling.
     QPoint offset;
     QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset, mode);
+    if (pixmap.isNull())
+        return;
+
     d->filter->draw(painter, offset, pixmap);
 }
@@ -878,5 +889,6 @@
     By default, the drop shadow is a semi-transparent dark gray
     (QColor(63, 63, 63, 180)) shadow, blurred with a radius of 1 at an offset
-    of 8 pixels towards the lower right.
+    of 8 pixels towards the lower right. The drop shadow offset is specified
+    in device coordinates.
 
     \img graphicseffect-drop-shadow.png
@@ -906,4 +918,7 @@
 
     By default, the offset is 8 pixels towards the lower right.
+
+    The offset is given in device coordinates, which means it is
+    unaffected by scale.
 
     \sa xOffset(), yOffset(), blurRadius(), color()
@@ -1048,4 +1063,7 @@
     QPoint offset;
     const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset, mode);
+    if (pixmap.isNull())
+        return;
+
     QTransform restoreTransform = painter->worldTransform();
     painter->setWorldTransform(QTransform());
Index: /trunk/src/gui/egl/egl.pri
===================================================================
--- /trunk/src/gui/egl/egl.pri	(revision 768)
+++ /trunk/src/gui/egl/egl.pri	(revision 769)
@@ -1,23 +1,29 @@
-CONFIG += egl
+contains(QT_CONFIG, egl): {
+	CONFIG += egl
 
-HEADERS += \
-    egl/qegl_p.h \
-    egl/qeglproperties_p.h
+	HEADERS += \
+	    egl/qegl_p.h \
+	    egl/qeglproperties_p.h
 
-SOURCES += \
-    egl/qegl.cpp \
-    egl/qeglproperties.cpp
+	SOURCES += \
+	    egl/qegl.cpp \
+	    egl/qeglproperties.cpp
 
-wince*: SOURCES += egl/qegl_wince.cpp
+	wince*: SOURCES += egl/qegl_wince.cpp
 
-unix {
-    embedded {
-        SOURCES += egl/qegl_qws.cpp
-    } else {
-        symbian {
-            SOURCES += egl/qegl_symbian.cpp
-        } else {
-            SOURCES += egl/qegl_x11.cpp
-        }
-    }
+	unix {
+	    embedded {
+	        SOURCES += egl/qegl_qws.cpp
+	    } else {
+	        symbian {
+	            SOURCES += egl/qegl_symbian.cpp
+	        } else {
+	            SOURCES += egl/qegl_x11.cpp
+	        }
+	    }
+	}
+} else:symbian {
+	DEFINES += QT_NO_EGL
+	SOURCES += egl/qegl_stub.cpp
+	SOURCES += egl/qeglproperties_stub.cpp
 }
Index: /trunk/src/gui/egl/qegl.cpp
===================================================================
--- /trunk/src/gui/egl/qegl.cpp	(revision 768)
+++ /trunk/src/gui/egl/qegl.cpp	(revision 769)
@@ -43,8 +43,37 @@
 #include <QtGui/qpixmap.h>
 #include <QtGui/qwidget.h>
+#include <QtCore/qatomic.h>
 #include <QtCore/qdebug.h>
 #include "qegl_p.h"
 
 QT_BEGIN_NAMESPACE
+
+
+/*
+    QEglContextTracker is used to track the EGL contexts that we
+    create internally in Qt, so that we can call eglTerminate() to
+    free additional EGL resources when the last context is destroyed.
+*/
+
+class QEglContextTracker
+{
+public:
+    static void ref() { contexts.ref(); }
+    static void deref() {
+        if (!contexts.deref()) {
+            eglTerminate(QEglContext::display());
+            displayOpen = 0;
+        }
+    }
+    static void setDisplayOpened() { displayOpen = 1; }
+    static bool displayOpened() { return displayOpen; }
+
+private:
+    static QBasicAtomicInt contexts;
+    static QBasicAtomicInt displayOpen;
+};
+
+QBasicAtomicInt QEglContextTracker::contexts = Q_BASIC_ATOMIC_INITIALIZER(0);
+QBasicAtomicInt QEglContextTracker::displayOpen = Q_BASIC_ATOMIC_INITIALIZER(0);
 
 // Current GL and VG contexts.  These are used to determine if
@@ -55,7 +84,8 @@
 static QEglContext * volatile currentVGContext = 0;
 
+EGLDisplay QEglContext::dpy = EGL_NO_DISPLAY;
+
 QEglContext::QEglContext()
     : apiType(QEgl::OpenGL)
-    , dpy(EGL_NO_DISPLAY)
     , ctx(EGL_NO_CONTEXT)
     , cfg(0)
@@ -65,9 +95,10 @@
     , sharing(false)
 {
+    QEglContextTracker::ref();
 }
 
 QEglContext::~QEglContext()
 {
-    destroy();
+    destroyContext();
 
     if (currentGLContext == this)
@@ -75,4 +106,5 @@
     if (currentVGContext == this)
         currentVGContext = 0;
+    QEglContextTracker::deref();
 }
 
@@ -85,12 +117,4 @@
 {
     return current;
-}
-
-// Open the EGL display associated with "device".
-bool QEglContext::openDisplay(QPaintDevice *device)
-{
-    if (dpy == EGL_NO_DISPLAY)
-        dpy = defaultDisplay(device);
-    return (dpy != EGL_NO_DISPLAY);
 }
 
@@ -103,5 +127,5 @@
         // Get the number of matching configurations for this set of properties.
         EGLint matching = 0;
-        if (!eglChooseConfig(dpy, props.properties(), 0, 0, &matching) || !matching)
+        if (!eglChooseConfig(display(), props.properties(), 0, 0, &matching) || !matching)
             continue;
 
@@ -109,5 +133,5 @@
         // matching configuration.
         if (match == QEgl::BestPixelFormat) {
-            eglChooseConfig(dpy, props.properties(), &cfg, 1, &matching);
+            eglChooseConfig(display(), props.properties(), &cfg, 1, &matching);
             if (matching < 1)
                 continue;
@@ -119,11 +143,11 @@
         EGLint size = matching;
         EGLConfig *configs = new EGLConfig [size];
-        eglChooseConfig(dpy, props.properties(), configs, size, &matching);
+        eglChooseConfig(display(), props.properties(), configs, size, &matching);
         for (EGLint index = 0; index < size; ++index) {
             EGLint red, green, blue, alpha;
-            eglGetConfigAttrib(dpy, configs[index], EGL_RED_SIZE, &red);
-            eglGetConfigAttrib(dpy, configs[index], EGL_GREEN_SIZE, &green);
-            eglGetConfigAttrib(dpy, configs[index], EGL_BLUE_SIZE, &blue);
-            eglGetConfigAttrib(dpy, configs[index], EGL_ALPHA_SIZE, &alpha);
+            eglGetConfigAttrib(display(), configs[index], EGL_RED_SIZE, &red);
+            eglGetConfigAttrib(display(), configs[index], EGL_GREEN_SIZE, &green);
+            eglGetConfigAttrib(display(), configs[index], EGL_BLUE_SIZE, &blue);
+            eglGetConfigAttrib(display(), configs[index], EGL_ALPHA_SIZE, &alpha);
             if (red == props.value(EGL_RED_SIZE) &&
                     green == props.value(EGL_GREEN_SIZE) &&
@@ -180,5 +204,5 @@
         shareContext = 0;
     if (shareContext) {
-        ctx = eglCreateContext(dpy, cfg, shareContext->ctx, contextProps.properties());
+        ctx = eglCreateContext(display(), cfg, shareContext->ctx, contextProps.properties());
         if (ctx == EGL_NO_CONTEXT) {
             qWarning() << "QEglContext::createContext(): Could not share context:" << errorString(eglGetError());
@@ -189,5 +213,5 @@
     }
     if (ctx == EGL_NO_CONTEXT) {
-        ctx = eglCreateContext(dpy, cfg, 0, contextProps.properties());
+        ctx = eglCreateContext(display(), cfg, 0, contextProps.properties());
         if (ctx == EGL_NO_CONTEXT) {
             qWarning() << "QEglContext::createContext(): Unable to create EGL context:" << errorString(eglGetError());
@@ -205,14 +229,13 @@
         if (surface == currentSurface)
             doneCurrent();
-        eglDestroySurface(dpy, surface);
+        eglDestroySurface(display(), surface);
     }
 }
 
 // Destroy the context.  Note: this does not destroy the surface.
-void QEglContext::destroy()
+void QEglContext::destroyContext()
 {
     if (ctx != EGL_NO_CONTEXT && ownsContext)
-        eglDestroyContext(dpy, ctx);
-    dpy = EGL_NO_DISPLAY;
+        eglDestroyContext(display(), ctx);
     ctx = EGL_NO_CONTEXT;
     cfg = 0;
@@ -249,5 +272,5 @@
 #endif
 
-    bool ok = eglMakeCurrent(dpy, surface, surface, ctx);
+    bool ok = eglMakeCurrent(display(), surface, surface, ctx);
     if (!ok)
         qWarning() << "QEglContext::makeCurrent():" << errorString(eglGetError());
@@ -278,5 +301,5 @@
 #endif
 
-    bool ok = eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    bool ok = eglMakeCurrent(display(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
     if (!ok)
         qWarning() << "QEglContext::doneCurrent():" << errorString(eglGetError());
@@ -300,5 +323,5 @@
         return false;
 
-    bool ok = eglSwapBuffers(dpy, surface);
+    bool ok = eglSwapBuffers(display(), surface);
     if (!ok)
         qWarning() << "QEglContext::swapBuffers():" << errorString(eglGetError());
@@ -339,5 +362,15 @@
 bool QEglContext::configAttrib(int name, EGLint *value) const
 {
-    return eglGetConfigAttrib(dpy, cfg, name, value);
+    return eglGetConfigAttrib(display(), cfg, name, value);
+}
+
+void QEglContext::clearError()
+{
+    eglGetError();
+}
+
+EGLint QEglContext::error()
+{
+    return eglGetError();
 }
 
@@ -351,5 +384,5 @@
     for (int name = 0x3020; name <= 0x304F; ++name) {
         EGLint value;
-        if (name != EGL_NONE && eglGetConfigAttrib(dpy, cfg, name, &value))
+        if (name != EGL_NONE && eglGetConfigAttrib(display(), cfg, name, &value))
             props.setValue(name, value);
     }
@@ -358,24 +391,33 @@
 }
 
-// Initialize and return the default display.
-EGLDisplay QEglContext::defaultDisplay(QPaintDevice *device)
-{
-    static EGLDisplay dpy = EGL_NO_DISPLAY;
-    if (dpy == EGL_NO_DISPLAY) {
-        dpy = getDisplay(device);
+EGLDisplay QEglContext::display()
+{
+    if (!QEglContextTracker::displayOpened()) {
+        dpy = eglGetDisplay(nativeDisplay());
+        QEglContextTracker::setDisplayOpened();
         if (dpy == EGL_NO_DISPLAY) {
-            qWarning() << "QEglContext::defaultDisplay(): Cannot open EGL display";
+            qWarning("QEglContext::display(): Falling back to EGL_DEFAULT_DISPLAY");
+            dpy = eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY));
+        }
+        if (dpy == EGL_NO_DISPLAY) {
+            qWarning("QEglContext::display(): Can't even open the default display");
             return EGL_NO_DISPLAY;
         }
+
         if (!eglInitialize(dpy, NULL, NULL)) {
-            qWarning() << "QEglContext::defaultDisplay(): Cannot initialize EGL display:" << errorString(eglGetError());
+            qWarning() << "QEglContext::display(): Cannot initialize EGL display:" << errorString(eglGetError());
             return EGL_NO_DISPLAY;
         }
-#ifdef EGL_OPENGL_ES_API
-        eglBindAPI(EGL_OPENGL_ES_API);
-#endif
-    }
+    }
+
     return dpy;
 }
+
+#if !defined(Q_WS_X11) && !defined(Q_WS_WINCE) // WinCE & X11 implement this properly
+EGLNativeDisplayType QEglContext::nativeDisplay()
+{
+    return EGL_DEFAULT_DISPLAY;
+}
+#endif
 
 // Return the error string associated with a specific code.
@@ -411,8 +453,8 @@
     QEglProperties props;
     EGLint count = 0;
-    if (!eglGetConfigs(dpy, 0, 0, &count) || count < 1)
+    if (!eglGetConfigs(display(), 0, 0, &count) || count < 1)
         return;
     EGLConfig *configs = new EGLConfig [count];
-    eglGetConfigs(dpy, configs, count, &count);
+    eglGetConfigs(display(), configs, count, &count);
     for (EGLint index = 0; index < count; ++index) {
         props = configProperties(configs[index]);
@@ -424,5 +466,5 @@
 QString QEglContext::extensions()
 {
-    const char* exts = eglQueryString(QEglContext::defaultDisplay(0), EGL_EXTENSIONS);
+    const char* exts = eglQueryString(QEglContext::display(), EGL_EXTENSIONS);
     return QString(QLatin1String(exts));
 }
@@ -432,5 +474,5 @@
     QList<QByteArray> extensions =
         QByteArray(reinterpret_cast<const char *>
-            (eglQueryString(QEglContext::defaultDisplay(0), EGL_EXTENSIONS))).split(' ');
+            (eglQueryString(QEglContext::display(), EGL_EXTENSIONS))).split(' ');
     return extensions.contains(extensionName);
 }
Index: /trunk/src/gui/egl/qegl_p.h
===================================================================
--- /trunk/src/gui/egl/qegl_p.h	(revision 768)
+++ /trunk/src/gui/egl/qegl_p.h	(revision 769)
@@ -87,11 +87,9 @@
     void setApi(QEgl::API api) { apiType = api; }
 
-    bool openDisplay(QPaintDevice *device);
     bool chooseConfig(const QEglProperties& properties, QEgl::PixelFormatMatch match = QEgl::ExactPixelFormat);
     bool createContext(QEglContext *shareContext = 0, const QEglProperties *properties = 0);
+    void destroyContext();
     EGLSurface createSurface(QPaintDevice *device, const QEglProperties *properties = 0);
     void destroySurface(EGLSurface surface);
-
-    void destroy();
 
     bool makeCurrent(EGLSurface surface);
@@ -105,9 +103,9 @@
     bool configAttrib(int name, EGLint *value) const;
 
-    static void clearError() { eglGetError(); }
-    static EGLint error() { return eglGetError(); }
+    static void clearError();
+    static EGLint error();
     static QString errorString(EGLint code);
 
-    EGLDisplay display() const { return dpy; }
+    static EGLDisplay display();
 
     EGLContext context() const { return ctx; }
@@ -119,6 +117,4 @@
     QEglProperties configProperties(EGLConfig cfg = 0) const;
 
-    static EGLDisplay defaultDisplay(QPaintDevice *device);
-
     void dumpAllConfigs();
 
@@ -128,5 +124,4 @@
 private:
     QEgl::API apiType;
-    EGLDisplay dpy;
     EGLContext ctx;
     EGLConfig cfg;
@@ -136,5 +131,6 @@
     bool sharing;
 
-    static EGLDisplay getDisplay(QPaintDevice *device);
+    static EGLDisplay dpy;
+    static EGLNativeDisplayType nativeDisplay();
 
     static QEglContext *currentContext(QEgl::API api);
Index: /trunk/src/gui/egl/qegl_qws.cpp
===================================================================
--- /trunk/src/gui/egl/qegl_qws.cpp	(revision 768)
+++ /trunk/src/gui/egl/qegl_qws.cpp	(revision 769)
@@ -65,10 +65,4 @@
 }
 
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
-{
-    Q_UNUSED(device);
-    return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY));
-}
-
 static QScreen *screenForDevice(QPaintDevice *device)
 {
Index: /trunk/src/gui/egl/qegl_stub.cpp
===================================================================
--- /trunk/src/gui/egl/qegl_stub.cpp	(revision 769)
+++ /trunk/src/gui/egl/qegl_stub.cpp	(revision 769)
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** 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$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qpaintdevice.h>
+#include <QtGui/qpixmap.h>
+#include <QtGui/qwidget.h>
+#include <QtCore/qdebug.h>
+
+#include "qegl_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static void noegl(const char *fn)
+{
+    qWarning() << fn << " called, but Qt configured without EGL" << endl;
+}
+
+#define NOEGL noegl(__FUNCTION__);
+
+EGLDisplay QEglContext::dpy = 0;
+
+QEglContext::QEglContext()
+    : apiType(QEgl::OpenGL)
+    , ctx(0)
+    , cfg(0)
+    , currentSurface(0)
+    , current(false)
+    , ownsContext(true)
+    , sharing(false)
+{
+    NOEGL
+}
+
+QEglContext::~QEglContext()
+{
+    NOEGL
+}
+
+bool QEglContext::isValid() const
+{
+    NOEGL
+    return false;
+}
+
+bool QEglContext::isCurrent() const
+{
+    NOEGL
+    return false;
+}
+
+bool QEglContext::chooseConfig(const QEglProperties& properties, QEgl::PixelFormatMatch match)
+{
+    Q_UNUSED(properties)
+    Q_UNUSED(match)
+    NOEGL
+    return false;
+}
+
+EGLSurface QEglContext::createSurface(QPaintDevice* device, const QEglProperties *properties)
+{
+    Q_UNUSED(device)
+    Q_UNUSED(properties)
+    NOEGL
+    return 0;
+}
+
+
+// Create the EGLContext.
+bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties *properties)
+{
+    Q_UNUSED(shareContext)
+    Q_UNUSED(properties)
+    NOEGL
+    return false;
+}
+
+// Destroy an EGL surface object.  If it was current on this context
+// then call doneCurrent() for it first.
+void QEglContext::destroySurface(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+}
+
+// Destroy the context.  Note: this does not destroy the surface.
+void QEglContext::destroyContext()
+{
+    NOEGL
+}
+
+bool QEglContext::makeCurrent(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+    return false;
+}
+
+bool QEglContext::doneCurrent()
+{
+    NOEGL
+    return false;
+}
+
+// Act as though doneCurrent() was called, but keep the context
+// and the surface active for the moment.  This allows makeCurrent()
+// to skip a call to eglMakeCurrent() if we are using the same
+// surface as the last set of painting operations.  We leave the
+// currentContext() pointer as-is for now.
+bool QEglContext::lazyDoneCurrent()
+{
+    NOEGL
+    return false;
+}
+
+bool QEglContext::swapBuffers(EGLSurface surface)
+{
+    Q_UNUSED(surface)
+    NOEGL
+    return false;
+}
+
+bool QEglContext::configAttrib(int name, EGLint *value) const
+{
+    Q_UNUSED(name)
+    Q_UNUSED(value)
+    NOEGL
+    return false;
+}
+
+void QEglContext::clearError()
+{
+    NOEGL
+    return;
+}
+
+EGLint QEglContext::error()
+{
+    NOEGL
+    return 0;
+}
+
+EGLDisplay QEglContext::display()
+{
+    NOEGL
+    return 0;
+}
+
+// Return the error string associated with a specific code.
+QString QEglContext::errorString(EGLint code)
+{
+    Q_UNUSED(code)
+    NOEGL
+    return QString();
+}
+
+// Dump all of the EGL configurations supported by the system.
+void QEglContext::dumpAllConfigs()
+{
+    NOEGL
+}
+
+QString QEglContext::extensions()
+{
+    NOEGL
+    return QString();
+}
+
+bool QEglContext::hasExtension(const char* extensionName)
+{
+    Q_UNUSED(extensionName)
+    NOEGL
+    return false;
+}
+
+QEglContext *QEglContext::currentContext(QEgl::API api)
+{
+    Q_UNUSED(api)
+    NOEGL
+    return false;
+}
+
+void QEglContext::setCurrentContext(QEgl::API api, QEglContext *context)
+{
+    Q_UNUSED(api)
+    Q_UNUSED(context)
+    NOEGL
+}
+
+EGLNativeDisplayType QEglContext::nativeDisplay()
+{
+    NOEGL
+    return 0;
+}
+
+void QEglContext::waitClient()
+{
+    NOEGL
+}
+
+void QEglContext::waitNative()
+{
+    NOEGL
+}
+
+QEglProperties QEglContext::configProperties(EGLConfig cfg) const
+{
+    Q_UNUSED(cfg)
+    NOEGL
+    return QEglProperties();
+}
+
+QT_END_NAMESPACE
Index: /trunk/src/gui/egl/qegl_symbian.cpp
===================================================================
--- /trunk/src/gui/egl/qegl_symbian.cpp	(revision 768)
+++ /trunk/src/gui/egl/qegl_symbian.cpp	(revision 769)
@@ -79,18 +79,10 @@
     EGLSurface surf;
     if (devType == QInternal::Widget)
-        surf = eglCreateWindowSurface(dpy, cfg, windowDrawable, 0);
+        surf = eglCreateWindowSurface(dpy, cfg, windowDrawable, props);
     else
-        surf = eglCreatePixmapSurface(dpy, cfg, pixmapDrawable, 0);
+        surf = eglCreatePixmapSurface(dpy, cfg, pixmapDrawable, props);
     if (surf == EGL_NO_SURFACE)
         qWarning("QEglContext::createSurface(): Unable to create EGL surface, error = 0x%x", eglGetError());
     return surf;
-}
-
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
-{
-    EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-    if (dpy == EGL_NO_DISPLAY)
-        qWarning("QEglContext::defaultDisplay(): Falling back to EGL_DEFAULT_DISPLAY");
-    return dpy;
 }
 
Index: /trunk/src/gui/egl/qegl_wince.cpp
===================================================================
--- /trunk/src/gui/egl/qegl_wince.cpp	(revision 768)
+++ /trunk/src/gui/egl/qegl_wince.cpp	(revision 769)
@@ -88,18 +88,13 @@
 }
 
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
+EGLNativeDisplayType QEglContext::nativeDisplay()
 {
-    EGLDisplay dpy = 0;
-    HWND win = (static_cast<QWidget*>(device))->winId();
-    HDC myDc = GetDC(win);
+    HDC myDc = GetDC(0);
+
     if (!myDc) {
-        qWarning("QEglContext::defaultDisplay(): WinCE display is not open");
+        qWarning("QEglContext::nativeDisplay(): WinCE display is not open");
+        return EGL_DEFAULT_DISPLAY;
     }
-    dpy = eglGetDisplay(EGLNativeDisplayType(myDc));
-    if (dpy == EGL_NO_DISPLAY) {
-        qWarning("QEglContext::defaultDisplay(): Falling back to EGL_DEFAULT_DISPLAY");
-        dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-    }
-    return dpy;
+    return EGLNativeDisplayType(myDc);
 }
 
Index: /trunk/src/gui/egl/qegl_x11.cpp
===================================================================
--- /trunk/src/gui/egl/qegl_x11.cpp	(revision 768)
+++ /trunk/src/gui/egl/qegl_x11.cpp	(revision 769)
@@ -94,13 +94,12 @@
 }
 
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
+EGLNativeDisplayType QEglContext::nativeDisplay()
 {
-    Q_UNUSED(device);
     Display *xdpy = QX11Info::display();
     if (!xdpy) {
         qWarning("QEglContext::getDisplay(): X11 display is not open");
-        return EGL_NO_DISPLAY;
+        return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY);
     }
-    return eglGetDisplay(EGLNativeDisplayType(xdpy));
+    return EGLNativeDisplayType(xdpy);
 }
 
Index: /trunk/src/gui/egl/qeglproperties.cpp
===================================================================
--- /trunk/src/gui/egl/qeglproperties.cpp	(revision 768)
+++ /trunk/src/gui/egl/qeglproperties.cpp	(revision 769)
@@ -40,10 +40,10 @@
 ****************************************************************************/
 
-#include "qeglproperties_p.h"
-
-QT_BEGIN_NAMESPACE
-
 #include <QtCore/qdebug.h>
 #include <QtCore/qstringlist.h>
+
+#include "qeglproperties_p.h"
+
+QT_BEGIN_NAMESPACE
 
 #include "qegl_p.h"
@@ -61,5 +61,5 @@
     for (int name = 0x3020; name <= 0x304F; ++name) {
         EGLint value;
-        if (name != EGL_NONE && eglGetConfigAttrib(QEglContext::defaultDisplay(0), cfg, name, &value))
+        if (name != EGL_NONE && eglGetConfigAttrib(QEglContext::display(), cfg, name, &value))
             setValue(name, value);
     }
@@ -274,10 +274,10 @@
 {
     EGLint count = 0;
-    eglGetConfigs(QEglContext::defaultDisplay(0), 0, 0, &count);
+    eglGetConfigs(QEglContext::display(), 0, 0, &count);
     if (count < 1)
         return;
 
     EGLConfig *configs = new EGLConfig [count];
-    eglGetConfigs(QEglContext::defaultDisplay(0), configs, count, &count);
+    eglGetConfigs(QEglContext::display(), configs, count, &count);
     for (EGLint index = 0; index < count; ++index)
         qWarning() << QEglProperties(configs[index]).toString();
Index: /trunk/src/gui/egl/qeglproperties_p.h
===================================================================
--- /trunk/src/gui/egl/qeglproperties_p.h	(revision 768)
+++ /trunk/src/gui/egl/qeglproperties_p.h	(revision 769)
@@ -59,9 +59,33 @@
 QT_BEGIN_INCLUDE_NAMESPACE
 
+#ifndef QT_NO_EGL
+#if defined(QT_OPENGL_ES_2)
+#   include <GLES2/gl2.h>
+#endif
+
 #if defined(QT_GLES_EGL)
-#include <GLES/egl.h>
+#   include <GLES/egl.h>
 #else
-#include <EGL/egl.h>
+#   include <EGL/egl.h>
 #endif
+#else
+
+//types from egltypes.h for compiling stub without EGL headers
+typedef int EGLBoolean;
+typedef int EGLint;
+typedef int EGLenum;
+typedef int    NativeDisplayType;
+typedef void*  NativeWindowType;
+typedef void*  NativePixmapType;
+typedef int EGLDisplay;
+typedef int EGLConfig;
+typedef int EGLSurface;
+typedef int EGLContext;
+typedef int EGLClientBuffer;
+#define EGL_NONE            0x3038  /* Attrib list terminator */
+
+#endif
+
+
 
 #if defined(Q_WS_X11)
@@ -99,5 +123,5 @@
         BestPixelFormat
     };
-};
+}
 
 class QX11Info;
Index: /trunk/src/gui/egl/qeglproperties_stub.cpp
===================================================================
--- /trunk/src/gui/egl/qeglproperties_stub.cpp	(revision 769)
+++ /trunk/src/gui/egl/qeglproperties_stub.cpp	(revision 769)
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** 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$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+
+#include "qeglproperties_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static void noegl(const char *fn)
+{
+    qWarning() << fn << " called, but Qt configured without EGL" << endl;
+}
+
+#define NOEGL noegl(__FUNCTION__);
+
+// Initialize a property block.
+QEglProperties::QEglProperties()
+{
+    NOEGL
+}
+
+QEglProperties::QEglProperties(EGLConfig cfg)
+{
+    Q_UNUSED(cfg)
+    NOEGL
+}
+
+// Fetch the current value associated with a property.
+int QEglProperties::value(int name) const
+{
+    Q_UNUSED(name)
+    NOEGL
+    return 0;
+}
+
+// Set the value associated with a property, replacing an existing
+// value if there is one.
+void QEglProperties::setValue(int name, int value)
+{
+    Q_UNUSED(name)
+    Q_UNUSED(value)
+    NOEGL
+}
+
+// Remove a property value.  Returns false if the property is not present.
+bool QEglProperties::removeValue(int name)
+{
+    Q_UNUSED(name)
+    NOEGL
+    return false;
+}
+
+// Sets the red, green, blue, and alpha sizes based on a pixel format.
+// Normally used to match a configuration request to the screen format.
+void QEglProperties::setPixelFormat(QImage::Format pixelFormat)
+{
+    Q_UNUSED(pixelFormat)
+    NOEGL
+
+}
+
+void QEglProperties::setRenderableType(QEgl::API api)
+{
+    Q_UNUSED(api);
+    NOEGL
+}
+
+// Reduce the complexity of a configuration request to ask for less
+// because the previous request did not result in success.  Returns
+// true if the complexity was reduced, or false if no further
+// reductions in complexity are possible.
+bool QEglProperties::reduceConfiguration()
+{
+    NOEGL
+    return false;
+}
+
+// Convert a property list to a string suitable for debug output.
+QString QEglProperties::toString() const
+{
+    NOEGL
+    return QString();
+}
+
+void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
+{
+    Q_UNUSED(dev)
+    NOEGL
+}
+
+void QEglProperties::dumpAllConfigs()
+{
+    NOEGL
+}
+
+QT_END_NAMESPACE
+
+
Index: /trunk/src/gui/embedded/directfb.pri
===================================================================
--- /trunk/src/gui/embedded/directfb.pri	(revision 768)
+++ /trunk/src/gui/embedded/directfb.pri	(revision 769)
@@ -16,5 +16,5 @@
 #DEFINES += QT_NO_DIRECTFB_OPAQUE_DETECTION
 #DEFINES += QT_NO_DIRECTFB_STRETCHBLIT
-#DIRECTFB_DRAWINGOPERATIONS=DRAW_RECTS|DRAW_LINES|DRAW_IMAGE|DRAW_PIXMAP|DRAW_TILED_PIXMAP|STROKE_PATH|DRAW_PATH|DRAW_POINTS|DRAW_ELLIPSE|DRAW_POLYGON|DRAW_TEXT|FILL_PATH|FILL_RECT|DRAW_COLORSPANS|DRAW_ROUNDED_RECT
+DIRECTFB_DRAWINGOPERATIONS=DRAW_RECTS|DRAW_LINES|DRAW_IMAGE|DRAW_PIXMAP|DRAW_TILED_PIXMAP|STROKE_PATH|DRAW_PATH|DRAW_POINTS|DRAW_ELLIPSE|DRAW_POLYGON|DRAW_TEXT|FILL_PATH|FILL_RECT|DRAW_COLORSPANS|DRAW_ROUNDED_RECT
 #DEFINES += \"QT_DIRECTFB_WARN_ON_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\"
 #DEFINES += \"QT_DIRECTFB_DISABLE_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\"
Index: /trunk/src/gui/embedded/qscreen_qws.cpp
===================================================================
--- /trunk/src/gui/embedded/qscreen_qws.cpp	(revision 768)
+++ /trunk/src/gui/embedded/qscreen_qws.cpp	(revision 769)
@@ -2740,5 +2740,5 @@
                 break;
             }
-            spanData.setup(qwsServer->backgroundBrush(), 256, QPainter::CompositionMode_SourceOver);
+            spanData.setup(qwsServer->backgroundBrush(), 256, QPainter::CompositionMode_Source);
             spanData.dx = off.x();
             spanData.dy = off.y();
Index: /trunk/src/gui/embedded/qscreenqnx_qws.cpp
===================================================================
--- /trunk/src/gui/embedded/qscreenqnx_qws.cpp	(revision 768)
+++ /trunk/src/gui/embedded/qscreenqnx_qws.cpp	(revision 769)
@@ -206,5 +206,5 @@
                 GF_FORMAT_ARGB8888, 0,
                 GF_SURFACE_CREATE_CPU_FAST_ACCESS | GF_SURFACE_CREATE_CPU_LINEAR_ACCESSIBLE
-                | GF_SURFACE_PHYS_CONTIG);
+                | GF_SURFACE_PHYS_CONTIG | GF_SURFACE_CREATE_SHAREABLE);
     if (ret != GF_ERR_OK) {
         qWarning("QQnxScreen: gf_surface_create(%dx%d) failed with error code %d",
Index: /trunk/src/gui/graphicsview/qgraphicsitem.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsitem.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsitem.cpp	(revision 769)
@@ -320,5 +320,5 @@
 
     \value ItemClipsToShape The item clips to its own shape. The item cannot
-    draw or receive mouse, tablet, drag and drop or hover events outside ts
+    draw or receive mouse, tablet, drag and drop or hover events outside its
     shape. It is disabled by default. This behavior is enforced by
     QGraphicsView::drawItems() or QGraphicsScene::drawItems(). This flag was
@@ -358,17 +358,20 @@
     this flag, the child will be stacked behind it. This flag is useful for
     drop shadow effects and for decoration objects that follow the parent
-    item's geometry without drawing on top of it.
+    item's geometry without drawing on top of it. This flag was introduced
+    in Qt 4.5.
 
     \value ItemUsesExtendedStyleOption The item makes use of either
-    \l{QStyleOptionGraphicsItem::}{exposedRect} or
-    \l{QStyleOptionGraphicsItem::}{matrix} in QStyleOptionGraphicsItem. By default,
-    the \l{QStyleOptionGraphicsItem::}{exposedRect} is initialized to the item's
-    boundingRect() and the \l{QStyleOptionGraphicsItem::}{matrix} is untransformed.
-    You can enable this flag for the style options to be set up with more
-    fine-grained values.
-    Note that QStyleOptionGraphicsItem::levelOfDetail is unaffected by this flag
+    \l{QStyleOptionGraphicsItem::} {exposedRect} or
+    \l{QStyleOptionGraphicsItem::} {matrix} in
+    QStyleOptionGraphicsItem. By default, the
+    \l{QStyleOptionGraphicsItem::} {exposedRect} is initialized to the
+    item's boundingRect() and the
+    \l{QStyleOptionGraphicsItem::}{matrix} is untransformed.  You can
+    enable this flag for the style options to be set up with more
+    fine-grained values.  Note that
+    QStyleOptionGraphicsItem::levelOfDetail is unaffected by this flag
     and always initialized to 1. Use
-    QStyleOptionGraphicsItem::levelOfDetailFromTransform() if you need a higher
-    value.
+    QStyleOptionGraphicsItem::levelOfDetailFromTransform() if you need
+    a higher value. This flag was introduced in Qt 4.6.
 
     \value ItemHasNoContents The item does not paint anything (i.e., calling
@@ -388,7 +391,8 @@
     This flag was introduced in Qt 4.6.
 
-    \value ItemNegativeZStacksBehindParent The item automatically stacks behind
-    it's parent if it's z-value is negative. This flag enables setZValue() to
-    toggle ItemStacksBehindParent.
+    \value ItemNegativeZStacksBehindParent The item automatically
+    stacks behind it's parent if it's z-value is negative. This flag
+    enables setZValue() to toggle ItemStacksBehindParent. This flag
+    was introduced in Qt 4.6.
 
     \value ItemIsPanel The item is a panel. A panel provides activation and
@@ -410,10 +414,4 @@
 /*!
     \enum QGraphicsItem::GraphicsItemChange
-
-        ItemVisibleHasChanged,
-        ItemEnabledHasChanged,
-        ItemSelectedHasChanged,
-        ItemParentHasChanged,
-        ItemSceneHasChanged
 
     This enum describes the state changes that are notified by
@@ -644,7 +642,14 @@
 
     The values are:
-    \value NonModal   The panel is not modal and does not block input to other panels.
-    \value PanelModal The panel is modal to a single item hierarchy and blocks input to its parent pane, all grandparent panels, and all siblings of its parent and grandparent panels.
-    \value SceneModal The window is modal to the entire scene and blocks input to all panels.
+
+    \value NonModal The panel is not modal and does not block input to
+    other panels. This is the default value for panels.
+
+    \value PanelModal The panel is modal to a single item hierarchy
+    and blocks input to its parent pane, all grandparent panels, and
+    all siblings of its parent and grandparent panels.
+
+    \value SceneModal The window is modal to the entire scene and
+    blocks input to all panels.
 
     \sa QGraphicsItem::setPanelModality(), QGraphicsItem::panelModality(), QGraphicsItem::ItemIsPanel
@@ -1126,4 +1131,7 @@
     }
 
+    // Resolve depth.
+    invalidateDepthRecursively();
+
     if ((parent = newParent)) {
         if (parent->d_func()->scene && parent->d_func()->scene != scene) {
@@ -1176,6 +1184,4 @@
     }
 
-    // Resolve depth.
-    invalidateDepthRecursively();
     dirtySceneTransform = 1;
 
@@ -1393,5 +1399,6 @@
     delete d_ptr->transformData;
 
-    qt_dataStore()->data.remove(this);
+    if (QGraphicsItemCustomDataStore *dataStore = qt_dataStore())
+        dataStore->data.remove(this);
 }
 
@@ -1571,15 +1578,16 @@
 
 /*!
-    Sets this item's parent item to \a parent. If this item already has a
-    parent, it is first removed from the previous parent. If \a parent is 0,
-    this item will become a top-level item.
-
-    Note that this implicitly adds this graphics item to the scene of
-    the parent. You should not \l{QGraphicsScene::addItem()}{add} the
-    item to the scene yourself.
-
-    Calling this function on an item that is an ancestor of \a parent have undefined behaviour.
-
-    \sa parentItem(), childItems()
+  Sets this item's parent item to \a newParent. If this item already
+  has a parent, it is first removed from the previous parent. If \a
+  newParent is 0, this item will become a top-level item.
+
+  Note that this implicitly adds this graphics item to the scene of
+  the parent. You should not \l{QGraphicsScene::addItem()}{add} the
+  item to the scene yourself.
+
+  Calling this function on an item that is an ancestor of \a newParent
+  have undefined behaviour.
+
+  \sa parentItem(), childItems()
 */
 void QGraphicsItem::setParentItem(QGraphicsItem *newParent)
@@ -1876,5 +1884,6 @@
     bool noVisualChange = (mode == NoCache && lastMode == NoCache)
                           || (mode == NoCache && lastMode == DeviceCoordinateCache)
-                          || (mode == DeviceCoordinateCache && lastMode == NoCache);
+                          || (mode == DeviceCoordinateCache && lastMode == NoCache)
+                          || (mode == DeviceCoordinateCache && lastMode == DeviceCoordinateCache);
     if (mode == NoCache) {
         d_ptr->removeExtraItemCache();
@@ -2170,9 +2179,14 @@
         if (c)
             c->purge();
-        if (scene)
+        if (scene) {
+#ifndef QT_NO_GRAPHICSEFFECT
+            invalidateParentGraphicsEffectsRecursively();
+#endif //QT_NO_GRAPHICSEFFECT
             scene->d_func()->markDirty(q_ptr, QRectF(), /*invalidateChildren=*/false, /*force=*/true);
+        }
     }
 
     // Certain properties are dropped as an item becomes invisible.
+    bool hasFocus = q_ptr->hasFocus();
     if (!newVisible) {
         if (scene) {
@@ -2184,5 +2198,5 @@
                 scene->d_func()->leaveModal(q_ptr);
         }
-        if (q_ptr->hasFocus() && scene) {
+        if (hasFocus && scene) {
             // Hiding the closest non-panel ancestor of the focus item
             QGraphicsItem *focusItem = scene->focusItem();
@@ -2197,5 +2211,5 @@
             }
             if (clear)
-                q_ptr->clearFocus();
+                clearFocusHelper(/* giveFocusToParent = */ false);
         }
         if (q_ptr->isSelected())
@@ -2235,24 +2249,43 @@
 
     // Enable subfocus
-    if (scene && newVisible) {
-        QGraphicsItem *p = parent;
-        bool done = false;
-        while (p) {
-            if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
-                QGraphicsItem *fsi = p->d_ptr->focusScopeItem;
-                if (q_ptr == fsi || q_ptr->isAncestorOf(fsi)) {
-                    done = true;
-                    while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible())
-                        fsi = fsi->d_ptr->focusScopeItem;
-                    scene->setFocusItem(fsi);
+    if (scene) {
+        if (newVisible) {
+            // Item is shown
+            QGraphicsItem *p = parent;
+            bool done = false;
+            while (p) {
+                if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
+                    QGraphicsItem *fsi = p->d_ptr->focusScopeItem;
+                    if (q_ptr == fsi || q_ptr->isAncestorOf(fsi)) {
+                        done = true;
+                        while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible())
+                            fsi = fsi->d_ptr->focusScopeItem;
+                        fsi->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
+                                                   /* focusFromShow = */ true);
+                    }
+                    break;
                 }
-                break;
+                p = p->d_ptr->parent;
             }
-            p = p->d_ptr->parent;
-        }
-        if (!done) {
-            QGraphicsItem *fi = subFocusItem;
-            if (fi && fi != scene->focusItem()) {
-                scene->setFocusItem(fi);
+            if (!done) {
+                QGraphicsItem *fi = subFocusItem;
+                if (fi && fi != scene->focusItem()) {
+                    scene->setFocusItem(fi);
+                }
+            }
+        } else {
+            // Item is hidden
+            if (hasFocus) {
+                QGraphicsItem *p = parent;
+                while (p) {
+                    if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
+                        if (p->d_ptr->visible) {
+                            p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
+                                                     /* focusFromShow = */ true);
+                        }
+                        break;
+                    }
+                    p = p->d_ptr->parent;
+                }
             }
         }
@@ -3105,5 +3138,5 @@
 void QGraphicsItem::setFocus(Qt::FocusReason focusReason)
 {
-    d_ptr->setFocusHelper(focusReason, /* climb = */ true);
+    d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromShow = */ false);
 }
 
@@ -3111,5 +3144,5 @@
     \internal
 */
-void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb)
+void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow)
 {
     // Disabled / unfocusable items cannot accept focus.
@@ -3131,5 +3164,5 @@
         if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
             p->d_ptr->focusScopeItem = q_ptr;
-            if (!p->focusItem()) {
+            if (!p->focusItem() && !focusFromShow) {
                 // If you call setFocus on a child of a focus scope that
                 // doesn't currently have a focus item, then stop.
@@ -3172,22 +3205,33 @@
 void QGraphicsItem::clearFocus()
 {
-    // Pass focus to the closest parent focus scope.
-    if (!d_ptr->inDestructor) {
-        QGraphicsItem *p = d_ptr->parent;
-        while (p) {
-            if (p->flags() & ItemIsFocusScope) {
-                p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false);
-                return;
+    d_ptr->clearFocusHelper(/* giveFocusToParent = */ true);
+}
+
+/*!
+    \internal
+*/
+void QGraphicsItemPrivate::clearFocusHelper(bool giveFocusToParent)
+{
+    if (giveFocusToParent) {
+        // Pass focus to the closest parent focus scope
+        if (!inDestructor) {
+            QGraphicsItem *p = parent;
+            while (p) {
+                if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
+                    p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false,
+                                             /* focusFromShow = */ false);
+                    return;
+                }
+                p = p->d_ptr->parent;
             }
-            p = p->d_ptr->parent;
         }
     }
 
     // Invisible items with focus must explicitly clear subfocus.
-    d_ptr->clearSubFocus(this);
-
-    if (hasFocus()) {
+    clearSubFocus(q_ptr);
+
+    if (q_ptr->hasFocus()) {
         // If this item has the scene's input focus, clear it.
-        d_ptr->scene->setFocusItem(0);
+        scene->setFocusItem(0);
     }
 }
@@ -3535,4 +3579,6 @@
     if (!(d_ptr->flags & ItemSendsGeometryChanges)) {
         d_ptr->setPosHelper(pos);
+        if (d_ptr->isWidget)
+            static_cast<QGraphicsWidget *>(this)->d_func()->setGeometryFromSetPos();
         return;
     }
@@ -7257,5 +7303,7 @@
         QGraphicsScenePrivate *scenePrivate = d_ptr->scene->d_func();
         scenePrivate->index->prepareBoundingRectChange(this);
-        scenePrivate->markDirty(this, QRectF(), /*invalidateChildren=*/true);
+        scenePrivate->markDirty(this, QRectF(), /*invalidateChildren=*/true, /*force=*/false,
+                                /*ignoreOpacity=*/ false, /*removingItemFromScene=*/ false,
+                                /*updateBoundingRect=*/true);
 
         // For compatibility reasons, we have to update the item's old geometry
@@ -10802,4 +10850,5 @@
 }
 
+// sourceRect must be in the given coordinate system
 QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const
 {
@@ -10811,5 +10860,6 @@
     if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) {
         if (info) {
-            effectRectF = item->graphicsEffect()->boundingRectFor(boundingRect(Qt::DeviceCoordinates));
+            QRectF deviceRect = system == Qt::DeviceCoordinates ? sourceRect : info->painter->worldTransform().mapRect(sourceRect);
+            effectRectF = item->graphicsEffect()->boundingRectFor(deviceRect);
             if (unpadded)
                 *unpadded = (effectRectF.size() == sourceRect.size());
@@ -10860,28 +10910,4 @@
     }
 
-    if (deviceCoordinates) {
-        // Clip to viewport rect.
-        int left, top, right, bottom;
-        effectRect.getCoords(&left, &top, &right, &bottom);
-        if (left < 0) {
-            if (offset)
-                offset->rx() += -left;
-            effectRect.setX(0);
-        }
-        if (top < 0) {
-            if (offset)
-                offset->ry() += -top;
-            effectRect.setY(0);
-        }
-        // NB! We use +-1 for historical reasons (see QRect documentation).
-        QPaintDevice *device = info->painter->device();
-        const int deviceWidth = device->width();
-        const int deviceHeight = device->height();
-        if (right + 1 > deviceWidth)
-            effectRect.setRight(deviceWidth - 1);
-        if (bottom + 1 > deviceHeight)
-            effectRect.setBottom(deviceHeight -1);
-
-    }
     if (effectRect.isEmpty())
         return QPixmap();
Index: /trunk/src/gui/graphicsview/qgraphicsitem_p.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsitem_p.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsitem_p.h	(revision 769)
@@ -415,5 +415,6 @@
     inline void markParentDirty(bool updateBoundingRect = false);
 
-    void setFocusHelper(Qt::FocusReason focusReason, bool climb);
+    void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow);
+    void clearFocusHelper(bool giveFocusToParent);
     void setSubFocus(QGraphicsItem *rootItem = 0);
     void clearSubFocus(QGraphicsItem *rootItem = 0);
@@ -769,4 +770,11 @@
 {
     QGraphicsItemPrivate *parentp = this;
+#ifndef QT_NO_GRAPHICSEFFECT
+    if (updateBoundingRect && parentp->graphicsEffect && !parentp->inSetPosHelper) {
+        parentp->notifyInvalidated = 1;
+        static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
+                                                        ->source->d_func())->invalidateCache();
+    }
+#endif
     while (parentp->parent) {
         parentp = parentp->parent->d_ptr.data();
Index: /trunk/src/gui/graphicsview/qgraphicsproxywidget.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsproxywidget.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsproxywidget.cpp	(revision 769)
@@ -190,5 +190,5 @@
 
 extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);
-extern bool qt_tab_all_widgets;
+Q_GUI_EXPORT extern bool qt_tab_all_widgets;
 
 /*!
@@ -898,4 +898,27 @@
         break;
     }
+#ifndef QT_NO_TOOLTIP
+    case QEvent::GraphicsSceneHelp: {
+        // Propagate the help event (for tooltip) to the widget under mouse
+        if (d->lastWidgetUnderMouse) {
+            QGraphicsSceneHelpEvent *he = static_cast<QGraphicsSceneHelpEvent *>(event);
+            QPoint pos = d->mapToReceiver(mapFromScene(he->scenePos()), d->lastWidgetUnderMouse).toPoint();
+            QHelpEvent e(QEvent::ToolTip, pos, he->screenPos());
+            QApplication::sendEvent(d->lastWidgetUnderMouse, &e);
+            event->setAccepted(e.isAccepted());
+            return e.isAccepted();
+        }
+        break;
+    }
+    case QEvent::ToolTipChange: {
+        // Propagate tooltip change to the widget
+        if (!d->tooltipChangeMode) {
+            d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::ProxyToWidgetMode;
+            d->widget->setToolTip(toolTip());
+            d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
+        }
+        break;
+    }
+#endif
     default:
         break;
@@ -953,4 +976,12 @@
             }
             break;
+        case QEvent::ToolTipChange:
+            // Propagate tooltip change to the proxy.
+            if (!d->tooltipChangeMode) {
+                d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::WidgetToProxyMode;
+                setToolTip(d->widget->toolTip());
+                d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
+            }
+            break;
         default:
             break;
@@ -1316,4 +1347,6 @@
     }
 
+    d->proxyIsGivingFocus = true;
+
     switch (event->reason()) {
     case Qt::TabFocusReason: {
@@ -1329,8 +1362,9 @@
 	if (d->widget && d->widget->focusWidget()) {
 	    d->widget->focusWidget()->setFocus(event->reason());
-	    return;
-        }
-        break;
-    }
+        }
+        break;
+    }
+
+    d->proxyIsGivingFocus = false;
 }
 
@@ -1433,5 +1467,5 @@
 
     // Filter out repaints on the window frame.
-    const QRect exposedWidgetRect = (option->exposedRect & rect()).toRect();
+    const QRect exposedWidgetRect = (option->exposedRect & rect()).toAlignedRect();
     if (exposedWidgetRect.isEmpty())
         return;
Index: /trunk/src/gui/graphicsview/qgraphicsproxywidget_p.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsproxywidget_p.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsproxywidget_p.h	(revision 769)
@@ -73,4 +73,5 @@
           styleChangeMode(NoMode),
           paletteChangeMode(NoMode),
+          tooltipChangeMode(NoMode),
           focusFromWidgetToProxy(0)
     { }
@@ -118,5 +119,7 @@
     quint32 styleChangeMode : 2;
     quint32 paletteChangeMode : 2;
+    quint32 tooltipChangeMode : 2;
     quint32 focusFromWidgetToProxy : 1;
+    quint32 proxyIsGivingFocus : 1;
 };
 
Index: /trunk/src/gui/graphicsview/qgraphicsscene.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsscene.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsscene.cpp	(revision 769)
@@ -694,4 +694,12 @@
     if (!selectionChanging && selectedItems.size() != oldSelectedItemsSize)
         emit q->selectionChanged();
+
+    QHash<QGesture *, QGraphicsObject *>::iterator it;
+    for (it = gestureTargets.begin(); it != gestureTargets.end();) {
+        if (it.value() == item)
+            it = gestureTargets.erase(it);
+        else
+            ++it;
+    }
 }
 
@@ -802,5 +810,6 @@
             if (item) {
                 for (int i = 0; i < views.size(); ++i)
-                    views.at(i)->inputContext()->reset();
+                    if (views.at(i)->inputContext())
+                        views.at(i)->inputContext()->reset();
             }
         }
@@ -808,11 +817,11 @@
     }
 
+    if (item)
+        focusItem = item;
+    updateInputMethodSensitivityInViews();
     if (item) {
-        focusItem = item;
         QFocusEvent event(QEvent::FocusIn, focusReason);
         sendEvent(item, &event);
     }
-
-    updateInputMethodSensitivityInViews();
 }
 
@@ -3772,4 +3781,10 @@
     for (int i = 0; i < itemsAtPos.size(); ++i) {
         QGraphicsItem *tmp = itemsAtPos.at(i);
+        if (tmp->d_func()->isProxyWidget()) {
+            // if the item is a proxy widget, the event is forwarded to it
+            sendEvent(tmp, helpEvent);
+            if (helpEvent->isAccepted())
+                return;
+        }
         if (!tmp->toolTip().isEmpty()) {
             toolTipItem = tmp;
@@ -4285,4 +4300,5 @@
         // Blit the subpixmap into the main pixmap.
         pixmapPainter.begin(pix);
+        pixmapPainter.setCompositionMode(QPainter::CompositionMode_Source);
         pixmapPainter.setClipRegion(pixmapExposed);
         pixmapPainter.drawPixmap(br.topLeft(), subPix);
@@ -4450,4 +4466,6 @@
 
         // Create or reuse offscreen pixmap, possibly scroll/blit from the old one.
+        // If the world transform is rotated we always recreate the cache to avoid
+        // wrong blending.
         bool pixModified = false;
         QGraphicsItemCache::DeviceData *deviceData = &itemCache->deviceData[widget];
@@ -4457,5 +4475,7 @@
             diff *= painter->worldTransform();
         deviceData->lastTransform = painter->worldTransform();
-        if (!invertable || diff.type() > QTransform::TxTranslate) {
+        if (!invertable
+            || diff.type() > QTransform::TxTranslate
+            || painter->worldTransform().type() > QTransform::TxScale) {
             pixModified = true;
             itemCache->allExposed = true;
@@ -4679,5 +4699,6 @@
             item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect);
         viewBoundingRect.adjust(-1, -1, 1, 1);
-        drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect) : !viewBoundingRect.isEmpty();
+        drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect)
+                                 : !viewBoundingRect.normalized().isEmpty();
         if (!drawItem) {
             if (!itemHasChildren)
@@ -4713,29 +4734,16 @@
             && sourced->lastEffectTransform != painter->worldTransform())
         {
-            bool unclipped = false;
             if (sourced->lastEffectTransform.type() <= QTransform::TxTranslate
                 && painter->worldTransform().type() <= QTransform::TxTranslate)
             {
-                QRectF itemRect = item->boundingRect();
-                if (!item->d_ptr->children.isEmpty())
-                    itemRect |= item->childrenBoundingRect();
-
-                QRectF oldSourceRect = sourced->lastEffectTransform.mapRect(itemRect);
-                QRectF newSourceRect = painter->worldTransform().mapRect(itemRect);
-
-                QRect oldEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), oldSourceRect);
-                QRect newEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), newSourceRect);
-
-                QRect deviceRect(0, 0, painter->device()->width(), painter->device()->height());
-                if (deviceRect.contains(oldEffectRect) && deviceRect.contains(newEffectRect)) {
-                    sourced->setCachedOffset(newEffectRect.topLeft());
-                    unclipped = true;
-                }
+                QRectF sourceRect = sourced->boundingRect(Qt::DeviceCoordinates);
+                QRect effectRect = sourced->paddedEffectRect(Qt::DeviceCoordinates, sourced->currentCachedMode(), sourceRect);
+
+                sourced->setCachedOffset(effectRect.topLeft());
+            } else {
+                sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged);
             }
 
             sourced->lastEffectTransform = painter->worldTransform();
-
-            if (!unclipped)
-                sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged);
         }
 
@@ -4849,5 +4857,6 @@
 
 void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, bool invalidateChildren,
-                                      bool force, bool ignoreOpacity, bool removingItemFromScene)
+                                      bool force, bool ignoreOpacity, bool removingItemFromScene,
+                                      bool updateBoundingRect)
 {
     Q_ASSERT(item);
@@ -4920,5 +4929,6 @@
         item->d_ptr->ignoreOpacity = 1;
 
-    item->d_ptr->markParentDirty();
+    if (!updateBoundingRect)
+        item->d_ptr->markParentDirty();
 }
 
@@ -5131,4 +5141,6 @@
 
 /*!
+    \obsolete
+
     Paints the given \a items using the provided \a painter, after the
     background has been drawn, and before the foreground has been
@@ -5153,5 +5165,5 @@
     \snippet doc/src/snippets/graphicssceneadditemsnippet.cpp 0
 
-    \obsolete Since Qt 4.6, this function is not called anymore unless
+    Since Qt 4.6, this function is not called anymore unless
     the QGraphicsView::IndirectPainting flag is given as an Optimization
     flag.
@@ -5709,6 +5721,13 @@
             bool res = sendTouchBeginEvent(item, &touchEvent)
                        && touchEvent.isAccepted();
-            if (!res)
+            if (!res) {
+                // forget about these touch points, we didn't handle them
+                for (int i = 0; i < touchEvent.touchPoints().count(); ++i) {
+                    const QTouchEvent::TouchPoint &touchPoint = touchEvent.touchPoints().at(i);
+                    itemForTouchPointId.remove(touchPoint.id());
+                    sceneCurrentTouchPoints.remove(touchPoint.id());
+                }
                 ignoreSceneTouchEvent = false;
+            }
             break;
         }
@@ -5901,11 +5920,19 @@
             QList<QGraphicsObject *> result;
             for (int j = 0; j < items.size(); ++j) {
-                QGraphicsObject *item = items.at(j)->toGraphicsObject();
-                if (!item)
-                    continue;
-                QGraphicsItemPrivate *d = item->QGraphicsItem::d_func();
-                if (d->gestureContext.contains(gestureType)) {
-                    result.append(item);
+                QGraphicsItem *item = items.at(j);
+
+                // Check if the item is blocked by a modal panel and use it as
+                // a target instead of this item.
+                (void) item->isBlockedByModalPanel(&item);
+
+                if (QGraphicsObject *itemobj = item->toGraphicsObject()) {
+                    QGraphicsItemPrivate *d = item->d_func();
+                    if (d->gestureContext.contains(gestureType)) {
+                        result.append(itemobj);
+                    }
                 }
+                // Don't propagate through panels.
+                if (item->isPanel())
+                    break;
             }
             DEBUG() << "QGraphicsScenePrivate::getGestureTargets:"
Index: /trunk/src/gui/graphicsview/qgraphicsscene_p.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsscene_p.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsscene_p.h	(revision 769)
@@ -223,5 +223,6 @@
 
     void markDirty(QGraphicsItem *item, const QRectF &rect = QRectF(), bool invalidateChildren = false,
-                   bool force = false, bool ignoreOpacity = false, bool removingItemFromScene = false);
+                   bool force = false, bool ignoreOpacity = false, bool removingItemFromScene = false,
+                   bool updateBoundingRect = false);
     void processDirtyItemsRecursive(QGraphicsItem *item, bool dirtyAncestorContainsChildren = false,
                                     qreal parentOpacity = qreal(1.0));
Index: /trunk/src/gui/graphicsview/qgraphicssceneevent.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicssceneevent.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicssceneevent.h	(revision 769)
@@ -78,4 +78,6 @@
     QScopedPointer<QGraphicsSceneEventPrivate> d_ptr;
     Q_DECLARE_PRIVATE(QGraphicsSceneEvent)
+private:
+    Q_DISABLE_COPY(QGraphicsSceneEvent)
 };
 
@@ -125,4 +127,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneMouseEvent)
+    Q_DISABLE_COPY(QGraphicsSceneMouseEvent)
 };
 
@@ -157,4 +160,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneWheelEvent)
+    Q_DISABLE_COPY(QGraphicsSceneWheelEvent)
 };
 
@@ -185,4 +189,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneContextMenuEvent)
+    Q_DISABLE_COPY(QGraphicsSceneContextMenuEvent)
 };
 
@@ -217,4 +222,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneHoverEvent)
+    Q_DISABLE_COPY(QGraphicsSceneHoverEvent)
 };
 
@@ -234,4 +240,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneHelpEvent)
+    Q_DISABLE_COPY(QGraphicsSceneHelpEvent)
 };
 
@@ -276,4 +283,5 @@
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneDragDropEvent)
+    Q_DISABLE_COPY(QGraphicsSceneDragDropEvent)
 };
 
@@ -282,4 +290,5 @@
 {
     Q_DECLARE_PRIVATE(QGraphicsSceneResizeEvent)
+    Q_DISABLE_COPY(QGraphicsSceneResizeEvent)
 public:
     QGraphicsSceneResizeEvent();
@@ -297,4 +306,5 @@
 {
     Q_DECLARE_PRIVATE(QGraphicsSceneMoveEvent)
+    Q_DISABLE_COPY(QGraphicsSceneMoveEvent)
 public:
     QGraphicsSceneMoveEvent();
Index: /trunk/src/gui/graphicsview/qgraphicsview.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsview.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsview.cpp	(revision 769)
@@ -3361,10 +3361,4 @@
             if (viewTransformed)
                 backgroundPainter.setTransform(viewTransform);
-#ifdef Q_WS_X11
-#undef X11
-            if (backgroundPainter.paintEngine()->type() != QPaintEngine::X11)
-#define X11 qt_x11Data
-#endif
-                backgroundPainter.setCompositionMode(QPainter::CompositionMode_Source);
             QRectF backgroundExposedSceneRect = mapToScene(d->backgroundPixmapExposed.boundingRect()).boundingRect();
             drawBackground(&backgroundPainter, backgroundExposedSceneRect);
@@ -3401,4 +3395,11 @@
             painter.setWorldTransform(viewTransform);
     } else {
+        // Make sure we don't have unpolished items before we draw
+        if (!d->scene->d_func()->unpolishedItems.isEmpty())
+            d->scene->d_func()->_q_polishItems();
+        // We reset updateAll here (after we've issued polish events)
+        // so that we can discard update requests coming from polishEvent().
+        d->scene->d_func()->updateAll = false;
+
         // Find all exposed items
         bool allItems = false;
@@ -3409,7 +3410,23 @@
             QGraphicsItem **itemArray = &itemList[0]; // Relies on QList internals, but is perfectly valid.
             QStyleOptionGraphicsItem *styleOptionArray = d->allocStyleOptionsArray(numItems);
+            QTransform transform(Qt::Uninitialized);
             for (int i = 0; i < numItems; ++i) {
-                itemArray[i]->d_ptr->initStyleOption(&styleOptionArray[i], viewTransform,
-                                                     d->exposedRegion, allItems);
+                QGraphicsItem *item = itemArray[i];
+                QGraphicsItemPrivate *itemd = item->d_ptr.data();
+                itemd->initStyleOption(&styleOptionArray[i], viewTransform, d->exposedRegion, allItems);
+                // Cache the item's area in view coordinates.
+                // Note that we have to do this here in case the base class implementation
+                // (QGraphicsScene::drawItems) is not called. If it is, we'll do this
+                // operation twice, but that's the price one has to pay for using indirect
+                // painting :-/.
+                const QRectF brect = adjustedItemEffectiveBoundingRect(item);
+                if (!itemd->itemIsUntransformable()) {
+                    transform = item->sceneTransform();
+                    if (viewTransformed)
+                        transform *= viewTransform;
+                } else {
+                    transform = item->deviceTransform(viewTransform);
+                }
+                itemd->paintedViewBoundingRects.insert(d->viewport, transform.mapRect(brect).toRect());
             }
             // Draw the items.
@@ -3610,4 +3627,6 @@
 
 /*!
+    \obsolete 
+
     Draws the items \a items in the scene using \a painter, after the
     background and before the foreground are drawn. \a numItems is the number
@@ -3618,5 +3637,5 @@
     The default implementation calls the scene's drawItems() function.
 
-    \obsolete Since Qt 4.6, this function is not called anymore unless
+    Since Qt 4.6, this function is not called anymore unless
     the QGraphicsView::IndirectPainting flag is given as an Optimization
     flag.
Index: /trunk/src/gui/graphicsview/qgraphicsview_p.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicsview_p.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicsview_p.h	(revision 769)
@@ -184,6 +184,10 @@
             QCoreApplication::sendPostedEvents(viewport->window(), QEvent::UpdateRequest);
 #else
-        QCoreApplication::processEvents(QEventLoop::AllEvents | QEventLoop::ExcludeSocketNotifiers
-                                        | QEventLoop::ExcludeUserInputEvents);
+        // At this point either HIViewSetNeedsDisplay (Carbon) or setNeedsDisplay: YES (Cocoa)
+        // is called, which means there's a pending update request. We want to dispatch it
+        // now because otherwise graphics view updates would require two
+        // round-trips in the event loop before the item is painted.
+        extern void qt_mac_dispatchPendingUpdateRequests(QWidget *);
+        qt_mac_dispatchPendingUpdateRequests(viewport->window());
 #endif
     }
Index: /trunk/src/gui/graphicsview/qgraphicswidget.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicswidget.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicswidget.cpp	(revision 769)
@@ -335,5 +335,5 @@
     a move event and a resize event. Also, if the widget has a layout
     assigned, the layout will activate.
-    
+
     \sa geometry(), resize()
 */
@@ -563,5 +563,5 @@
 {
     Q_D(QGraphicsWidget);
-    if ((d->windowFlags & Qt::Window) && (d->windowFlags & Qt::WindowType_Mask) != Qt::Popup && 
+    if ((d->windowFlags & Qt::Window) && (d->windowFlags & Qt::WindowType_Mask) != Qt::Popup &&
          (d->windowFlags & Qt::WindowType_Mask) != Qt::ToolTip && !(d->windowFlags & Qt::FramelessWindowHint)) {
         QStyleOptionTitleBar bar;
@@ -1045,11 +1045,5 @@
         break;
     case ItemPositionHasChanged:
-        if (!d->inSetGeometry) {
-            d->inSetPos = 1;
-            // Ensure setGeometry is called (avoid recursion when setPos is
-            // called from within setGeometry).
-            setGeometry(QRectF(pos(), size()));
-            d->inSetPos = 0 ;
-        }
+        d->setGeometryFromSetPos();
         break;
     case ItemParentChange: {
@@ -1068,5 +1062,5 @@
         break;
     }
-    case ItemCursorChange: {
+    case ItemCursorHasChanged: {
         // Deliver CursorChange.
         QEvent event(QEvent::CursorChange);
@@ -1074,5 +1068,5 @@
         break;
     }
-    case ItemToolTipChange: {
+    case ItemToolTipHasChanged: {
         // Deliver ToolTipChange.
         QEvent event(QEvent::ToolTipChange);
@@ -1140,5 +1134,5 @@
     Returns true if \a event has been recognized and processed; otherwise,
     returns false.
-    
+
     \sa event()
 */
@@ -1197,5 +1191,5 @@
     if (!r.contains(pos))
         return Qt::NoSection;
-    
+
     const qreal left = r.left();
     const qreal top = r.top();
@@ -2323,4 +2317,4 @@
 
 QT_END_NAMESPACE
-        
+
 #endif //QT_NO_GRAPHICSVIEW
Index: /trunk/src/gui/graphicsview/qgraphicswidget_p.cpp
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicswidget_p.cpp	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicswidget_p.cpp	(revision 769)
@@ -826,4 +826,16 @@
 }
 
+void QGraphicsWidgetPrivate::setGeometryFromSetPos()
+{
+    if (inSetGeometry)
+        return;
+    Q_Q(QGraphicsWidget);
+    inSetPos = 1;
+    // Ensure setGeometry is called (avoid recursion when setPos is
+    // called from within setGeometry).
+    q->setGeometry(QRectF(pos, q->size()));
+    inSetPos = 0 ;
+}
+
 QT_END_NAMESPACE
 
Index: /trunk/src/gui/graphicsview/qgraphicswidget_p.h
===================================================================
--- /trunk/src/gui/graphicsview/qgraphicswidget_p.h	(revision 768)
+++ /trunk/src/gui/graphicsview/qgraphicswidget_p.h	(revision 769)
@@ -130,4 +130,6 @@
     void windowFrameHoverLeaveEvent(QGraphicsSceneHoverEvent *event);
     bool hasDecoration() const;
+
+    void setGeometryFromSetPos();
 
     // State
Index: /trunk/src/gui/gui.pro
===================================================================
--- /trunk/src/gui/gui.pro	(revision 768)
+++ /trunk/src/gui/gui.pro	(revision 769)
@@ -41,5 +41,5 @@
 include(effects/effects.pri)
 
-contains(QT_CONFIG, egl): include(egl/egl.pri)
+include(egl/egl.pri)
 
 embedded: QT += network
@@ -52,7 +52,25 @@
 
 DEFINES += Q_INTERNAL_QAPP_SRC
-symbian:TARGET.UID3=0x2001B2DD
+symbian: {
+    TARGET.UID3=0x2001B2DD
 
-# ro-section in gui can exceed default allocated space, so more rw-section little further
-symbian-sbsv2: QMAKE_LFLAGS.ARMCC += --rw-base 0x800000
-symbian: QMAKE_LFLAGS.GCCE += -Tdata 0xC00000
+    # ro-section in gui can exceed default allocated space, so move rw-section a little further
+    QMAKE_LFLAGS.ARMCC += --rw-base 0x800000
+    QMAKE_LFLAGS.GCCE += -Tdata 0xC00000
+
+    # Partial upgrade SIS file
+    vendorinfo = \
+        "; Localised Vendor name" \
+        "%{\"Nokia, Qt\"}" \
+        " " \
+        "; Unique Vendor name" \
+        ":\"Nokia, Qt\"" \
+        " "
+    pu_header = "; Partial upgrade package for testing QtGui changes without reinstalling everything" \
+                "$${LITERAL_HASH}{\"Qt gui\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
+    partial_upgrade.pkg_prerules = pu_header vendorinfo
+    partial_upgrade.sources = qtgui.dll
+    partial_upgrade.path = c:/sys/bin
+    DEPLOYMENT = partial_upgrade $$DEPLOYMENT
+}
+
Index: /trunk/src/gui/image/qicon.cpp
===================================================================
--- /trunk/src/gui/image/qicon.cpp	(revision 768)
+++ /trunk/src/gui/image/qicon.cpp	(revision 769)
@@ -105,4 +105,13 @@
 static QBasicAtomicInt serialNumCounter = Q_BASIC_ATOMIC_INITIALIZER(1);
 
+static void qt_cleanup_icon_cache();
+typedef QCache<QString, QIcon> IconCache;
+Q_GLOBAL_STATIC_WITH_INITIALIZER(IconCache, qtIconCache, qAddPostRoutine(qt_cleanup_icon_cache))
+
+static void qt_cleanup_icon_cache()
+{
+    qtIconCache()->clear();
+}
+
 QIconPrivate::QIconPrivate()
     : engine(0), ref(1),
@@ -964,17 +973,17 @@
 QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback)
 {
-    static QCache <QString, QIcon> iconCache;
-
     QIcon icon;
 
-    if (iconCache.contains(name)) {
-        icon = *iconCache.object(name);
+    if (qtIconCache()->contains(name)) {
+        icon = *qtIconCache()->object(name);
     } else {
         QIcon *cachedIcon  = new QIcon(new QIconLoaderEngine(name));
-        iconCache.insert(name, cachedIcon);
+        qtIconCache()->insert(name, cachedIcon);
         icon = *cachedIcon;
     }
 
-    if (icon.availableSizes().isEmpty())
+    // Note the qapp check is to allow lazy loading of static icons
+    // Supporting fallbacks will not work for this case.
+    if (qApp && icon.availableSizes().isEmpty())
         return fallback;
 
Index: /trunk/src/gui/image/qiconloader.cpp
===================================================================
--- /trunk/src/gui/image/qiconloader.cpp	(revision 768)
+++ /trunk/src/gui/image/qiconloader.cpp	(revision 769)
@@ -86,17 +86,28 @@
 
 QIconLoader::QIconLoader() :
-        m_themeKey(1), m_supportsSvg(false)
-{
-    m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName();
-    if (m_systemTheme.isEmpty())
-        m_systemTheme = fallbackTheme();
-
+        m_themeKey(1), m_supportsSvg(false), m_initialized(false)
+{
+}
+
+// We lazily initialize the loader to make static icons
+// work. Though we do not officially support this.
+void QIconLoader::ensureInitialized()
+{
+    if (!m_initialized) {
+        m_initialized = true;
+
+        Q_ASSERT(qApp);
+
+        m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName();
+        if (m_systemTheme.isEmpty())
+            m_systemTheme = fallbackTheme();
 #ifndef QT_NO_LIBRARY
-    QFactoryLoader iconFactoryLoader(QIconEngineFactoryInterfaceV2_iid,
-                                     QLatin1String("/iconengines"),
-                                     Qt::CaseInsensitive);
-    if (iconFactoryLoader.keys().contains(QLatin1String("svg")))
-        m_supportsSvg = true;
+        QFactoryLoader iconFactoryLoader(QIconEngineFactoryInterfaceV2_iid,
+                                         QLatin1String("/iconengines"),
+                                         Qt::CaseInsensitive);
+        if (iconFactoryLoader.keys().contains(QLatin1String("svg")))
+            m_supportsSvg = true;
 #endif //QT_NO_LIBRARY
+    }
 }
 
@@ -340,4 +351,7 @@
 void QIconLoaderEngine::ensureLoaded()
 {
+
+    iconLoaderInstance()->ensureInitialized();
+
     if (!(iconLoaderInstance()->themeKey() == m_key)) {
 
Index: /trunk/src/gui/image/qiconloader_p.h
===================================================================
--- /trunk/src/gui/image/qiconloader_p.h	(revision 768)
+++ /trunk/src/gui/image/qiconloader_p.h	(revision 769)
@@ -170,4 +170,5 @@
     void updateSystemTheme();
     void invalidateKey() { m_themeKey++; }
+    void ensureInitialized();
 
 private:
@@ -177,4 +178,5 @@
     uint m_themeKey;
     bool m_supportsSvg;
+    bool m_initialized;
 
     mutable QString m_userTheme;
Index: /trunk/src/gui/image/qimage.cpp
===================================================================
--- /trunk/src/gui/image/qimage.cpp	(revision 768)
+++ /trunk/src/gui/image/qimage.cpp	(revision 769)
@@ -119,6 +119,6 @@
 }
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 
 QBasicAtomicInt qimage_serial_number = Q_BASIC_ATOMIC_INITIALIZER(1);
@@ -5668,5 +5668,9 @@
     detach();
 
-    *this = convertToFormat(QImage::Format_ARGB32_Premultiplied);
+    QImage converted = convertToFormat(QImage::Format_ARGB32_Premultiplied);
+    if (!converted.isNull())
+        *this = converted;
+    else
+        return;
 
     // Slight optimization since alphachannels are returned as 8-bit grays.
Index: /trunk/src/gui/image/qimagepixmapcleanuphooks.cpp
===================================================================
--- /trunk/src/gui/image/qimagepixmapcleanuphooks.cpp	(revision 768)
+++ /trunk/src/gui/image/qimagepixmapcleanuphooks.cpp	(revision 769)
@@ -97,4 +97,9 @@
 {
     QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
+    // the global destructor for the pixmap and image hooks might have
+    // been called already if the app is "leaking" global
+    // pixmaps/images
+    if (!h)
+        return;
     for (int i = 0; i < h->pixmapModificationHooks.count(); ++i)
         h->pixmapModificationHooks[i](pmd);
@@ -107,4 +112,9 @@
 {
     QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
+    // the global destructor for the pixmap and image hooks might have
+    // been called already if the app is "leaking" global
+    // pixmaps/images
+    if (!h)
+        return;
     for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i)
         h->pixmapDestructionHooks[i](pmd);
@@ -123,12 +133,13 @@
 }
 
-void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
-{
-    enableCleanupHooks(const_cast<QPixmap &>(pixmap).data_ptr().data());
-}
 
 void QImagePixmapCleanupHooks::enableCleanupHooks(QPixmapData *pixmapData)
 {
     pixmapData->is_cached = true;
+}
+
+void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
+{
+    enableCleanupHooks(const_cast<QPixmap &>(pixmap).data_ptr().data());
 }
 
@@ -138,3 +149,15 @@
 }
 
+bool QImagePixmapCleanupHooks::isImageCached(const QImage &image)
+{
+    return const_cast<QImage &>(image).data_ptr()->is_cached;
+}
+
+bool QImagePixmapCleanupHooks::isPixmapCached(const QPixmap &pixmap)
+{
+    return const_cast<QPixmap&>(pixmap).data_ptr().data()->is_cached;
+}
+
+
+
 QT_END_NAMESPACE
Index: /trunk/src/gui/image/qimagepixmapcleanuphooks_p.h
===================================================================
--- /trunk/src/gui/image/qimagepixmapcleanuphooks_p.h	(revision 768)
+++ /trunk/src/gui/image/qimagepixmapcleanuphooks_p.h	(revision 769)
@@ -73,4 +73,7 @@
     static void enableCleanupHooks(QPixmapData *pixmapData);
 
+    static bool isImageCached(const QImage &image);
+    static bool isPixmapCached(const QPixmap &pixmap);
+
     // Gets called when a pixmap data is about to be modified:
     void addPixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd);
Index: /trunk/src/gui/image/qimagereader.cpp
===================================================================
--- /trunk/src/gui/image/qimagereader.cpp	(revision 768)
+++ /trunk/src/gui/image/qimagereader.cpp	(revision 769)
@@ -264,18 +264,29 @@
     }
 
-    if (!handler && !testFormat.isEmpty() && autoDetectImageFormat && !ignoresFormatAndExtension) {
+    if (!handler && !testFormat.isEmpty() && !ignoresFormatAndExtension) {
         // check if any plugin supports the format (they are not allowed to
         // read from the device yet).
         const qint64 pos = device ? device->pos() : 0;
-        for (int i = 0; i < keys.size(); ++i) {
-            if (i != suffixPluginIndex) {
-                QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(keys.at(i)));
-                if (plugin && plugin->capabilities(device, testFormat) & QImageIOPlugin::CanRead) {
+
+        if (autoDetectImageFormat) {
+            for (int i = 0; i < keys.size(); ++i) {
+                if (i != suffixPluginIndex) {
+                    QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(keys.at(i)));
+                    if (plugin && plugin->capabilities(device, testFormat) & QImageIOPlugin::CanRead) {
 #ifdef QIMAGEREADER_DEBUG
-                    qDebug() << "QImageReader::createReadHandler: the" << keys.at(i) << "plugin can read this format";
-#endif
-                    handler = plugin->create(device, testFormat);
-                    break;
+                        qDebug() << "QImageReader::createReadHandler: the" << keys.at(i) << "plugin can read this format";
+#endif
+                        handler = plugin->create(device, testFormat);
+                        break;
+                    }
                 }
+            }
+        } else {
+            QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(QLatin1String(testFormat)));
+            if (plugin && plugin->capabilities(device, testFormat) & QImageIOPlugin::CanRead) {
+#ifdef QIMAGEREADER_DEBUG
+                qDebug() << "QImageReader::createReadHandler: the" << testFormat << "plugin can read this format";
+#endif
+                handler = plugin->create(device, testFormat);
             }
         }
@@ -283,4 +294,5 @@
             device->seek(pos);
     }
+
 #endif // QT_NO_LIBRARY
 
Index: /trunk/src/gui/image/qimagewriter.cpp
===================================================================
--- /trunk/src/gui/image/qimagewriter.cpp	(revision 768)
+++ /trunk/src/gui/image/qimagewriter.cpp	(revision 769)
@@ -198,4 +198,5 @@
             QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(keys.at(i)));
             if (plugin && (plugin->capabilities(device, testFormat) & QImageIOPlugin::CanWrite)) {
+                delete handler;
                 handler = plugin->create(device, testFormat);
                 break;
Index: /trunk/src/gui/image/qnativeimage.cpp
===================================================================
--- /trunk/src/gui/image/qnativeimage.cpp	(revision 768)
+++ /trunk/src/gui/image/qnativeimage.cpp	(revision 769)
@@ -202,5 +202,5 @@
         ok = (xshminfo.shmaddr != (char*)-1);
         if (ok)
-            image = QImage((uchar *)xshmimg->data, width, height, systemFormat());
+            image = QImage((uchar *)xshmimg->data, width, height, format);
     }
     xshminfo.readOnly = false;
Index: /trunk/src/gui/image/qpaintengine_pic.cpp
===================================================================
--- /trunk/src/gui/image/qpaintengine_pic.cpp	(revision 768)
+++ /trunk/src/gui/image/qpaintengine_pic.cpp	(revision 769)
@@ -478,5 +478,5 @@
 }
 
-extern int qt_defaultDpi();
+Q_GUI_EXPORT extern int qt_defaultDpi();
 
 void QPicturePaintEngine::drawTextItem(const QPointF &p , const QTextItem &ti)
Index: /trunk/src/gui/image/qpicture.cpp
===================================================================
--- /trunk/src/gui/image/qpicture.cpp	(revision 768)
+++ /trunk/src/gui/image/qpicture.cpp	(revision 769)
@@ -109,6 +109,6 @@
 static const quint16 mfhdr_maj = 11; // major version #
 static const quint16 mfhdr_min = 0; // minor version #
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 
 /*!
Index: /trunk/src/gui/image/qpixmap.cpp
===================================================================
--- /trunk/src/gui/image/qpixmap.cpp	(revision 768)
+++ /trunk/src/gui/image/qpixmap.cpp	(revision 769)
@@ -832,19 +832,12 @@
         return true;
 
-    bool ok;
-
-    if (data) {
-        ok = data->fromFile(fileName, format, flags);
-    } else {
-        QScopedPointer<QPixmapData> tmp(QPixmapData::create(0, 0, QPixmapData::PixmapType));
-        ok = tmp->fromFile(fileName, format, flags);
-        if (ok)
-            data = tmp.take();
-    }
-
-    if (ok)
+    QScopedPointer<QPixmapData> tmp(QPixmapData::create(0, 0, data ? data->type : QPixmapData::PixmapType));
+    if (tmp->fromFile(fileName, format, flags)) {
+        data = tmp.take();
         QPixmapCache::insert(key, *this);
-
-    return ok;
+        return true;
+    }
+
+    return false;
 }
 
@@ -1671,8 +1664,7 @@
 
     The hasAlphaChannel() returns true if the pixmap has a format that
-    respects the alpha channel, otherwise returns false, while the
-    hasAlpha() function returns true if the pixmap has an alpha
-    channel \e or a mask (otherwise false). The mask() function returns
-    the mask as a QBitmap object, which can be set using setMask().
+    respects the alpha channel, otherwise returns false. The hasAlpha(),
+    setMask() and mask() functions are legacy and should not be used.
+    They are potentially very slow.
 
     The createHeuristicMask() function creates and returns a 1-bpp
@@ -1760,4 +1752,6 @@
     Returns true if this pixmap has an alpha channel, \e or has a
     mask, otherwise returns false.
+
+    \warning This is potentially an expensive operation.
 
     \sa hasAlphaChannel(), mask()
@@ -2028,5 +2022,5 @@
     too. The mouse cursor is generally not grabbed.
 
-    Note on X11that if the given \a window doesn't have the same depth
+    Note on X11 that if the given \a window doesn't have the same depth
     as the root window, and another window partially or entirely
     obscures the one you grab, you will \e not get pixels from the
@@ -2034,4 +2028,8 @@
     pixmap will be undefined and uninitialized.
 
+    On Windows Vista and above grabbing a layered window, which is
+    created by setting the Qt::WA_TranslucentBackground attribute, will
+    not work. Instead grabbing the desktop widget should work.
+
     \warning In general, grabbing an area outside the screen is not
     safe. This depends on the underlying window system.
Index: /trunk/src/gui/image/qpixmap_raster.cpp
===================================================================
--- /trunk/src/gui/image/qpixmap_raster.cpp	(revision 768)
+++ /trunk/src/gui/image/qpixmap_raster.cpp	(revision 769)
@@ -358,6 +358,6 @@
 }
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 
 int QRasterPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
Index: /trunk/src/gui/image/qpixmap_s60.cpp
===================================================================
--- /trunk/src/gui/image/qpixmap_s60.cpp	(revision 768)
+++ /trunk/src/gui/image/qpixmap_s60.cpp	(revision 769)
@@ -338,5 +338,5 @@
         return QPixmap();
 
-    QScopedPointer<QS60PixmapData> data(new QS60PixmapData(QPixmapData::PixmapType));
+    QScopedPointer<QPixmapData> data(QPixmapData::create(0,0, QPixmapData::PixmapType));
     data->fromNativeType(reinterpret_cast<void*>(bitmap), QPixmapData::FbsBitmap);
     QPixmap pixmap(data.take());
@@ -736,5 +736,5 @@
         return QPixmap();
 
-    QScopedPointer<QS60PixmapData> data(new QS60PixmapData(QPixmapData::PixmapType));
+    QScopedPointer<QPixmapData> data(QPixmapData::create(0,0, QPixmapData::PixmapType));
     data->fromNativeType(reinterpret_cast<void*>(sgImage), QPixmapData::SgImage);
     QPixmap pixmap(data.take());
Index: /trunk/src/gui/image/qpixmap_x11.cpp
===================================================================
--- /trunk/src/gui/image/qpixmap_x11.cpp	(revision 768)
+++ /trunk/src/gui/image/qpixmap_x11.cpp	(revision 769)
@@ -384,5 +384,5 @@
         // Will implicitly also check format and return quickly for opaque types...
         checked = true;
-        has = const_cast<QImage *>(image)->data_ptr()->checkForAlphaPixels();
+        has = image->isNull() ? false : const_cast<QImage *>(image)->data_ptr()->checkForAlphaPixels();
         return has;
     }
Index: /trunk/src/gui/image/qpixmapfilter.cpp
===================================================================
--- /trunk/src/gui/image/qpixmapfilter.cpp	(revision 768)
+++ /trunk/src/gui/image/qpixmapfilter.cpp	(revision 769)
@@ -423,4 +423,7 @@
         return;
 
+    if (src.isNull())
+        return;
+
     QPixmapFilter *filter = painter->paintEngine() && painter->paintEngine()->isExtended() ?
         static_cast<QPaintEngineEx *>(painter->paintEngine())->pixmapFilter(type(), this) : 0;
@@ -775,4 +778,7 @@
 Q_GUI_EXPORT QImage qt_halfScaled(const QImage &source)
 {
+    if (source.width() < 2 || source.height() < 2)
+        return QImage();
+
     QImage srcImage = source;
 
@@ -867,5 +873,5 @@
 
     qreal scale = 1;
-    if (radius >= 4) {
+    if (radius >= 4 && blurImage.width() >= 2 && blurImage.height() >= 2) {
         blurImage = qt_halfScaled(blurImage);
         scale = 2;
@@ -893,5 +899,5 @@
 }
 
-bool qt_scaleForTransform(const QTransform &transform, qreal *scale);
+Q_GUI_EXPORT bool qt_scaleForTransform(const QTransform &transform, qreal *scale);
 
 /*!
@@ -902,4 +908,7 @@
     Q_D(const QPixmapBlurFilter);
     if (!painter->isActive())
+        return;
+
+    if (src.isNull())
         return;
 
@@ -1084,4 +1093,8 @@
 {
     Q_D(const QPixmapColorizeFilter);
+
+    if (src.isNull())
+        return;
+
     QPixmapFilter *filter = painter->paintEngine() && painter->paintEngine()->isExtended() ?
         static_cast<QPaintEngineEx *>(painter->paintEngine())->pixmapFilter(type(), this) : 0;
@@ -1314,4 +1327,8 @@
 {
     Q_D(const QPixmapDropShadowFilter);
+
+    if (px.isNull())
+        return;
+
     QPixmapFilter *filter = p->paintEngine() && p->paintEngine()->isExtended() ?
         static_cast<QPaintEngineEx *>(p->paintEngine())->pixmapFilter(type(), this) : 0;
Index: /trunk/src/gui/inputmethod/inputmethod.pri
===================================================================
--- /trunk/src/gui/inputmethod/inputmethod.pri	(revision 768)
+++ /trunk/src/gui/inputmethod/inputmethod.pri	(revision 769)
@@ -27,5 +27,5 @@
     HEADERS += inputmethod/qcoefepinputcontext_p.h
     SOURCES += inputmethod/qcoefepinputcontext_s60.cpp
-    LIBS += -lfepbase
+    LIBS += -lfepbase -lakninputlanguage
 }
 
Index: /trunk/src/gui/inputmethod/qcoefepinputcontext_p.h
===================================================================
--- /trunk/src/gui/inputmethod/qcoefepinputcontext_p.h	(revision 768)
+++ /trunk/src/gui/inputmethod/qcoefepinputcontext_p.h	(revision 769)
@@ -97,5 +97,5 @@
 
 private:
-    void commitCurrentString(bool triggeredBySymbian);
+    void commitCurrentString(bool cancelFepTransaction);
     void updateHints(bool mustUpdateInputCapabilities);
     void applyHints(Qt::InputMethodHints hints);
@@ -128,5 +128,5 @@
     void DoCommitFepInlineEditL();
     MCoeFepAwareTextEditor_Extension1* Extension1(TBool& aSetToTrue);
-	void ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType);
+    void ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType);
 
     // From MCoeFepAwareTextEditor_Extension1
@@ -152,5 +152,4 @@
     MFepInlineTextFormatRetriever *m_formatRetriever;
     MFepPointerEventHandlerDuringInlineEdit *m_pointerHandler;
-    int m_longPress;
     int m_cursorPos;
     QBasicTimer m_tempPreeditStringTimeout;
Index: /trunk/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
===================================================================
--- /trunk/src/gui/inputmethod/qcoefepinputcontext_s60.cpp	(revision 768)
+++ /trunk/src/gui/inputmethod/qcoefepinputcontext_s60.cpp	(revision 769)
@@ -59,4 +59,9 @@
 #define QT_EAknActivatePenInputRequest MAknEdStateObserver::EAknEdwinStateEvent(7)
 
+// EAknEditorFlagSelectionVisible is only valid from 3.2 onwards.
+// Sym^3 AVKON FEP manager expects that this flag is used for FEP-aware editors
+// that support text selection.
+#define QT_EAknEditorFlagSelectionVisible 0x100000
+
 QT_BEGIN_NAMESPACE
 
@@ -72,14 +77,16 @@
       m_formatRetriever(0),
       m_pointerHandler(0),
-      m_longPress(0),
       m_cursorPos(0),
       m_hasTempPreeditString(false)
 {
     m_fepState->SetObjectProvider(this);
-    m_fepState->SetFlags(EAknEditorFlagDefault);
+    if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
+        m_fepState->SetFlags(EAknEditorFlagDefault | QT_EAknEditorFlagSelectionVisible);
+    else
+        m_fepState->SetFlags(EAknEditorFlagDefault);
     m_fepState->SetDefaultInputMode( EAknEditorTextInputMode );
     m_fepState->SetPermittedInputModes( EAknEditorAllInputModes );
     m_fepState->SetDefaultCase( EAknEditorLowerCase );
-    m_fepState->SetPermittedCases( EAknEditorLowerCase|EAknEditorUpperCase );
+    m_fepState->SetPermittedCases( EAknEditorAllCaseModes );
     m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG);
     m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap );
@@ -102,5 +109,5 @@
 void QCoeFepInputContext::reset()
 {
-    commitCurrentString(false);
+    commitCurrentString(true);
 }
 
@@ -115,5 +122,5 @@
 
     // For pre-5.0 SDKs, we don't do text updates on S60 side.
-    if (QSysInfo::s60Version() != QSysInfo::SV_S60_5_0) {
+    if (QSysInfo::s60Version() < QSysInfo::SV_S60_5_0) {
         return;
     }
@@ -127,5 +134,5 @@
 void QCoeFepInputContext::setFocusWidget(QWidget *w)
 {
-    commitCurrentString(false);
+    commitCurrentString(true);
 
     QInputContext::setFocusWidget(w);
@@ -220,5 +227,5 @@
         case Qt::Key_Select:
             if (!m_preeditString.isEmpty()) {
-                commitCurrentString(false);
+                commitCurrentString(true);
                 return true;
             }
@@ -232,8 +239,9 @@
             && !keyEvent->text().isEmpty()) {
             // Send some temporary preedit text in order to make text visible for a moment.
+            m_cursorPos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt();
             m_preeditString = keyEvent->text();
             QList<QInputMethodEvent::Attribute> attributes;
             QInputMethodEvent imEvent(m_preeditString, attributes);
-            QApplication::sendEvent(focusWidget(), &imEvent);
+            sendEvent(imEvent);
             m_tempPreeditStringTimeout.start(1000, this);
             m_hasTempPreeditString = true;
@@ -294,5 +302,5 @@
 
     if (event->type() == QEvent::MouseButtonPress && event->button() == Qt::LeftButton) {
-        commitCurrentString(false);
+        commitCurrentString(true);
         int pos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt();
 
@@ -433,5 +441,8 @@
     ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateCaseModeUpdate);
 
-    flags = 0;
+    if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
+        flags = QT_EAknEditorFlagSelectionVisible;
+    else 
+        flags = 0;
     if (hints & ImhUppercaseOnly && !(hints & ImhLowercaseOnly)
             || hints & ImhLowercaseOnly && !(hints & ImhUppercaseOnly)) {
@@ -474,7 +485,8 @@
 {
     TCharFormat cFormat;
-    QColor styleTextColor = QApplication::palette("QLineEdit").text().color();
-    TLogicalRgb tontColor(TRgb(styleTextColor.red(), styleTextColor.green(), styleTextColor.blue(), styleTextColor.alpha()));
-    cFormat.iFontPresentation.iTextColor = tontColor;
+    const QColor styleTextColor = focusWidget() ? focusWidget()->palette().text().color() : 
+        QApplication::palette("QLineEdit").text().color();
+    const TLogicalRgb fontColor(TRgb(styleTextColor.red(), styleTextColor.green(), styleTextColor.blue(), styleTextColor.alpha()));
+    cFormat.iFontPresentation.iTextColor = fontColor;
 
     TInt numChars = 0;
@@ -551,4 +563,19 @@
     m_formatRetriever = &aInlineTextFormatRetriever;
     m_pointerHandler = &aPointerEventHandlerDuringInlineEdit;
+
+    // With T9 aInitialInlineText is typically empty when StartFepInlineEditL is called,
+    // but FEP requires that selected text is always removed at StartFepInlineEditL.
+    // Let's remove the selected text if aInitialInlineText is empty and there is selected text
+    if (m_preeditString.isEmpty()) {
+        int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt();
+        int replacementLength = qAbs(m_cursorPos-anchor);
+        if (replacementLength > 0) {
+            int replacementStart = m_cursorPos < anchor ? 0 : -replacementLength;
+            QList<QInputMethodEvent::Attribute> clearSelectionAttributes;
+            QInputMethodEvent clearSelectionEvent(QLatin1String(""), clearSelectionAttributes);
+            clearSelectionEvent.setCommitString(QLatin1String(""), replacementStart, replacementLength);
+            sendEvent(clearSelectionEvent);
+        }
+    }
 
     applyFormat(&attributes);
@@ -740,29 +767,33 @@
 void QCoeFepInputContext::DoCommitFepInlineEditL()
 {
-    commitCurrentString(true);
-}
-
-void QCoeFepInputContext::commitCurrentString(bool triggeredBySymbian)
-{
+    commitCurrentString(false);
+    if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
+        ReportAknEdStateEvent(QT_EAknCursorPositionChanged);
+
+}
+
+void QCoeFepInputContext::commitCurrentString(bool cancelFepTransaction)
+{
+    int longPress = 0;
+
     if (m_preeditString.size() == 0) {
         QWidget *w = focusWidget();
-        if (triggeredBySymbian && w) {
+        if (!cancelFepTransaction && w) {
             // We must replace the last character only if the input box has already accepted one 
             if (w->inputMethodQuery(Qt::ImCursorPosition).toInt() != m_cursorPos)
-                m_longPress = 1;
-        }
-        return;
+                longPress = 1;
+        }
     }
 
     QList<QInputMethodEvent::Attribute> attributes;
     QInputMethodEvent event(QLatin1String(""), attributes);
-    event.setCommitString(m_preeditString, 0-m_longPress, m_longPress);
+    event.setCommitString(m_preeditString, 0-longPress, longPress);
     m_preeditString.clear();
     sendEvent(event);
 
     m_hasTempPreeditString = false;
-    m_longPress = 0;
-
-    if (!triggeredBySymbian) {
+    longPress = 0;
+
+    if (cancelFepTransaction) {
         CCoeFep* fep = CCoeEnv::Static()->Fep();
         if (fep)
Index: /trunk/src/gui/inputmethod/qinputcontextfactory.cpp
===================================================================
--- /trunk/src/gui/inputmethod/qinputcontextfactory.cpp	(revision 768)
+++ /trunk/src/gui/inputmethod/qinputcontextfactory.cpp	(revision 769)
@@ -74,4 +74,5 @@
 #ifdef Q_WS_S60
 #include "qcoefepinputcontext_p.h"
+#include "akninputlanguageinfo.h"
 #endif
 
@@ -199,4 +200,40 @@
 }
 
+#if defined(Q_WS_S60)
+/*!
+    \internal
+
+    This function contains pure Symbian exception handling code for
+    getting S60 language list.
+    Returned object ownership is transfered to caller.
+*/
+static CAknInputLanguageList* s60LangListL()
+{
+    CAknInputLanguageInfo *langInfo = AknInputLanguageInfoFactory::CreateInputLanguageInfoL();
+    CleanupStack::PushL(langInfo);
+    // In rare phone there is more than 7 languages installed -> use 7 as an array granularity
+    CAknInputLanguageList *langList = new (ELeave) CAknInputLanguageList(7);
+    CleanupStack::PushL(langList);
+    langInfo->AppendAvailableLanguagesL(langList);
+    CleanupStack::Pop(langList);
+    CleanupStack::PopAndDestroy(langInfo);
+    return langList;
+}
+
+/*!
+    \internal
+
+    This function utility function return S60 language list.
+    Returned object ownership is transfered to caller.
+*/
+static CAknInputLanguageList* s60LangList()
+{
+    CAknInputLanguageList *langList = NULL;
+    TRAP_IGNORE(langList = s60LangListL());
+    q_check_ptr(langList);
+    return langList;
+}
+#endif
+
 /*!
     Returns the languages supported by the QInputContext object
@@ -230,5 +267,13 @@
 #if defined(Q_WS_S60)
     if (key == QLatin1String("coefep"))
-        return QStringList(QString());
+        {
+        CAknInputLanguageList *langList = s60LangList();
+        int count = langList->Count();
+        for (int i = 0; i < count; ++i)
+            {
+            result.append(QString(qt_symbianLocaleName(langList->At(i)->LanguageCode())));
+            }
+        delete langList;
+        }
 #endif
 #if defined(QT_NO_LIBRARY) || defined(QT_NO_SETTINGS)
Index: /trunk/src/gui/itemviews/qabstractitemview.cpp
===================================================================
--- /trunk/src/gui/itemviews/qabstractitemview.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qabstractitemview.cpp	(revision 769)
@@ -1541,4 +1541,9 @@
         d->doDelayedItemsLayout(); // the size of the items will change
         break;
+#ifdef QT_SOFTKEYS_ENABLED
+    case QEvent::LanguageChange:
+        d->doneSoftKey->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::DoneSoftKey));
+        break;
+#endif
     default:
         break;
@@ -1781,5 +1786,8 @@
         if (edited)
             return;
-        if (style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))
+        QStyleOptionViewItemV4 option = d->viewOptionsV4();
+        if (d->pressedAlreadySelected)
+            option.state |= QStyle::State_Selected;
+        if (style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, &option, this))
             emit activated(index);
     }
@@ -2115,4 +2123,9 @@
     QAbstractScrollArea::focusOutEvent(event);
     d->viewport->update();
+
+#ifdef QT_SOFTKEYS_ENABLED
+    if(!hasEditFocus())
+        removeAction(d->doneSoftKey);
+#endif
 }
 
@@ -2140,5 +2153,10 @@
                 setEditFocus(true);
 #ifdef QT_SOFTKEYS_ENABLED
-                addAction(d->doneSoftKey);
+                // If we can't keypad navigate to any direction, there is no sense to add
+                // "Done" softkey, since it basically does nothing when there is
+                // only one widget in screen
+                if(QWidgetPrivate::canKeypadNavigate(Qt::Horizontal)
+                        || QWidgetPrivate::canKeypadNavigate(Qt::Vertical))
+                    addAction(d->doneSoftKey);
 #endif
                 return;
@@ -2156,4 +2174,24 @@
         }
         return;
+    case Qt::Key_Down:
+    case Qt::Key_Up:
+        // Let's ignore vertical navigation events, only if there is no other widget
+        // what can take the focus in vertical direction. This means widget can handle navigation events
+        // even the widget don't have edit focus, and there is no other widget in requested direction.
+        if(QApplication::keypadNavigationEnabled() && !hasEditFocus()
+                && QWidgetPrivate::canKeypadNavigate(Qt::Vertical)) {
+            event->ignore();
+            return;
+        }
+        break;
+    case Qt::Key_Left:
+    case Qt::Key_Right:
+        // Similar logic as in up and down events
+        if(QApplication::keypadNavigationEnabled() && !hasEditFocus()
+                && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this))) {
+            event->ignore();
+            return;
+        }
+        break;
     default:
         if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) {
@@ -2241,5 +2279,5 @@
     case Qt::Key_Up:
 #ifdef QT_KEYPAD_NAVIGATION
-        if (QApplication::keypadNavigationEnabled()) {
+        if (QApplication::keypadNavigationEnabled() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical)) {
             event->accept(); // don't change focus
             break;
@@ -2249,6 +2287,8 @@
     case Qt::Key_Right:
 #ifdef QT_KEYPAD_NAVIGATION
-        if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) {
-            event->accept(); // don't change horizontal focus in directional mode
+        if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional
+                && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal)
+                || (QWidgetPrivate::inTabWidget(this) && d->model->columnCount(d->root) > 1))) {
+            event->accept(); // don't change focus
             break;
         }
@@ -2532,4 +2572,5 @@
     QList<QEditorInfo>::iterator it = d->editors.begin();
     QWidgetList editorsToRelease;
+    QWidgetList editorsToHide;
     while (it != d->editors.end()) {
         QModelIndex index = it->index;
@@ -2543,5 +2584,5 @@
                     delegate->updateEditorGeometry(editor, option, index);
             } else {
-                editor->hide();
+                editorsToHide << editor;
             }
             ++it;
@@ -2552,6 +2593,9 @@
     }
 
-    //we release the editor outside of the loop because it might change the focus and try
+    //we hide and release the editor outside of the loop because it might change the focus and try
     //to change the d->editors list.
+    for (int i = 0; i < editorsToHide.count(); ++i) {
+        editorsToHide.at(i)->hide();
+    }
     for (int i = 0; i < editorsToRelease.count(); ++i) {
         d->releaseEditor(editorsToRelease.at(i));
@@ -3010,4 +3054,5 @@
         return;
     if (QWidget *oldWidget = indexWidget(index)) {
+        d->persistent.remove(oldWidget);
         d->removeEditor(oldWidget);
         oldWidget->deleteLater();
Index: /trunk/src/gui/itemviews/qabstractproxymodel.cpp
===================================================================
--- /trunk/src/gui/itemviews/qabstractproxymodel.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qabstractproxymodel.cpp	(revision 769)
@@ -128,4 +128,5 @@
         d->model = QAbstractItemModelPrivate::staticEmptyModel();
     }
+    d->roleNames = d->model->roleNames();
 }
 
Index: /trunk/src/gui/itemviews/qfileiconprovider.cpp
===================================================================
--- /trunk/src/gui/itemviews/qfileiconprovider.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qfileiconprovider.cpp	(revision 769)
@@ -69,4 +69,5 @@
 #ifndef SHGFI_ADDOVERLAYS
 #  define SHGFI_ADDOVERLAYS 0x000000020
+#  define SHGFI_OVERLAYINDEX 0x000000040
 #endif
 
@@ -254,10 +255,12 @@
 #ifndef Q_OS_WINCE
     val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info,
-                        sizeof(SHFILEINFO), SHGFI_ICON|SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_ADDOVERLAYS);
+                        sizeof(SHFILEINFO), SHGFI_ICON|SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_ADDOVERLAYS|SHGFI_OVERLAYINDEX);
 #else
     val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info,
                         sizeof(SHFILEINFO), SHGFI_SMALLICON|SHGFI_SYSICONINDEX);
 #endif
-    if (val) {
+
+    // Even if GetFileInfo returns a valid result, hIcon can be empty in some cases
+    if (val && info.hIcon) {
         if (fileInfo.isDir() && !fileInfo.isRoot()) {
             //using the unique icon index provided by windows save us from duplicate keys
@@ -293,10 +296,10 @@
 #ifndef Q_OS_WINCE
     val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info,
-                        sizeof(SHFILEINFO), SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SYSICONINDEX|SHGFI_ADDOVERLAYS);
+                        sizeof(SHFILEINFO), SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SYSICONINDEX|SHGFI_ADDOVERLAYS|SHGFI_OVERLAYINDEX);
 #else
     val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info,
                         sizeof(SHFILEINFO), SHGFI_LARGEICON|SHGFI_SYSICONINDEX);
 #endif
-    if (val) {
+    if (val && info.hIcon) {
         if (fileInfo.isDir() && !fileInfo.isRoot()) {
             //using the unique icon index provided by windows save us from duplicate keys
Index: /trunk/src/gui/itemviews/qitemdelegate.cpp
===================================================================
--- /trunk/src/gui/itemviews/qitemdelegate.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qitemdelegate.cpp	(revision 769)
@@ -1034,5 +1034,5 @@
     }
 
-    return QString::fromUtf16(ptr, int(&arr[sizeof(arr) / sizeof(ushort)] - ptr));
+    return QString((const QChar *)ptr, int(&arr[sizeof(arr) / sizeof(ushort)] - ptr));
 }
 
@@ -1298,12 +1298,6 @@
     }
 
-    Qt::CheckState state;
-    if ( flags & Qt::ItemIsTristate ) {
-        state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 );
-    } else {
-        state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+    Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
                             ? Qt::Unchecked : Qt::Checked);
-    }
-
     return model->setData(index, state, Qt::CheckStateRole);
 }
Index: /trunk/src/gui/itemviews/qlistview.cpp
===================================================================
--- /trunk/src/gui/itemviews/qlistview.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qlistview.cpp	(revision 769)
@@ -2161,5 +2161,5 @@
         if (flowPositions.isEmpty())
             return;
-        const int max = flowPositions.count() - 1;
+        const int max = scrollValueMap.count() - 1;
         if (vertical && flow() == QListView::TopToBottom && dy != 0) {
             int currentValue = qBound(0, verticalValue, max);
Index: /trunk/src/gui/itemviews/qstyleditemdelegate.cpp
===================================================================
--- /trunk/src/gui/itemviews/qstyleditemdelegate.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qstyleditemdelegate.cpp	(revision 769)
@@ -748,11 +748,6 @@
     }
 
-    Qt::CheckState state;
-    if ( flags & Qt::ItemIsTristate ) {
-        state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 );
-    } else {
-        state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+    Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
                             ? Qt::Unchecked : Qt::Checked);
-    }
     return model->setData(index, state, Qt::CheckStateRole);
 }
Index: /trunk/src/gui/itemviews/qtableview.cpp
===================================================================
--- /trunk/src/gui/itemviews/qtableview.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qtableview.cpp	(revision 769)
@@ -115,13 +115,12 @@
     } else if (old_height > span->height()) {
         //remove the span from all the subspans lists that intersect the columns not covered anymore
-        Index::iterator it_y = index.lowerBound(-span->bottom());
-        if (it_y == index.end())
-            it_y = index.find(-span->top());    // This is the only span remaining and we are deleting it.
+        Index::iterator it_y = index.lowerBound(-qMax(span->bottom(), span->top())); //qMax usefull if height is 0
         Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list
         while (-it_y.key() <= span->top() + old_height -1) {
             if (-it_y.key() > span->bottom()) {
-                (*it_y).remove(-span->left());
+                int removed = (*it_y).remove(-span->left());
+                Q_ASSERT(removed == 1); Q_UNUSED(removed);
                 if (it_y->isEmpty()) {
-                    it_y = index.erase(it_y) - 1;
+                    it_y = index.erase(it_y);
                 }
             }
@@ -1909,4 +1908,5 @@
         }
     } else { // nothing moved
+        const int gridAdjust = showGrid() ? 1 : 0;
         for (int i = 0; i < selection.count(); ++i) {
             QItemSelectionRange range = selection.at(i);
@@ -1917,7 +1917,14 @@
             const int rtop = rowViewportPosition(range.top());
             const int rbottom = rowViewportPosition(range.bottom()) + rowHeight(range.bottom());
-            const int rleft = columnViewportPosition(range.left());
-            const int rright = columnViewportPosition(range.right()) + columnWidth(range.right());
-            selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright, rbottom));
+            int rleft;
+            int rright;
+            if (isLeftToRight()) {
+                rleft = columnViewportPosition(range.left());
+                rright = columnViewportPosition(range.right()) + columnWidth(range.right());
+            } else {
+                rleft = columnViewportPosition(range.right());
+                rright = columnViewportPosition(range.left()) + columnWidth(range.left());
+            }
+            selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright - 1 - gridAdjust, rbottom - 1 - gridAdjust));
             if (d->hasSpans()) {
                 foreach (QSpanCollection::Span *s,
@@ -2547,5 +2554,5 @@
     if (!d->isIndexValid(index)
         || (d->model->parent(index) != d->root)
-        || isIndexHidden(index))
+        || isRowHidden(index.row()) || isColumnHidden(index.column()))
         return;
 
Index: /trunk/src/gui/itemviews/qtreeview.cpp
===================================================================
--- /trunk/src/gui/itemviews/qtreeview.cpp	(revision 768)
+++ /trunk/src/gui/itemviews/qtreeview.cpp	(revision 769)
@@ -2475,8 +2475,9 @@
         QVector<QTreeViewItem> insertedItems(delta);
         for (int i = 0; i < delta; ++i) {
-            insertedItems[i].index = d->model->index(i + start, 0, parent);
-            insertedItems[i].level = childLevel;
-            insertedItems[i].hasChildren = d->hasVisibleChildren(insertedItems[i].index);
-            insertedItems[i].hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
+            QTreeViewItem &item = insertedItems[i];
+            item.index = d->model->index(i + start, 0, parent);
+            item.level = childLevel;
+            item.hasChildren = d->hasVisibleChildren(item.index);
+            item.hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
         }
         if (d->viewItems.isEmpty())
@@ -3770,8 +3771,13 @@
             viewItems[previousSibiling].hasMoreSiblings = false;
 
-
-        updateChildCount(parentItem, -removedCount);
-        if (parentItem != -1 && viewItems.at(parentItem).total == 0)
-            viewItems[parentItem].hasChildren = false; //every children have been removed;
+        if (parentItem != -1) {
+            if (viewItems.at(parentItem).expanded) {
+                updateChildCount(parentItem, -removedCount);
+                if (viewItems.at(parentItem).total == 0)
+                    viewItems[parentItem].hasChildren = false; //every children have been removed;
+            } else if (viewItems[parentItem].hasChildren && !hasVisibleChildren(parent)) {
+                viewItems[parentItem].hasChildren = false;
+            }
+        }
         if (after) {
             q->updateGeometries();
Index: /trunk/src/gui/kernel/qapplication.cpp
===================================================================
--- /trunk/src/gui/kernel/qapplication.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qapplication.cpp	(revision 769)
@@ -139,5 +139,5 @@
 QT_BEGIN_NAMESPACE
 
-extern void qt_call_post_routines();
+Q_DECL_IMPORT extern void qt_call_post_routines();
 
 int QApplicationPrivate::app_compile_version = 0x040000; //we don't know exactly, but it's at least 4.0.0
@@ -895,4 +895,12 @@
     QWidgetPrivate::mapper = new QWidgetMapper;
     QWidgetPrivate::allWidgets = new QWidgetSet;
+
+#if !defined(Q_WS_X11) && !defined(Q_WS_QWS)
+    // initialize the graphics system - on X11 this is initialized inside
+    // qt_init() in qapplication_x11.cpp because of several reasons.
+    // On QWS, the graphics system is set by the QScreen plugin.
+    graphics_system = QGraphicsSystemFactory::create(graphics_system_name);
+#endif
+
     if (qt_appType != QApplication::Tty)
         (void) QApplication::style();  // trigger creation of application style
@@ -929,10 +937,4 @@
     qInitDrawhelperAsm();
 
-#if !defined(Q_WS_X11) && !defined(Q_WS_QWS)
-    // initialize the graphics system - on X11 this is initialized inside
-    // qt_init() in qapplication_x11.cpp because of several reasons.
-    // On QWS, the graphics system is set by the QScreen plugin.
-    graphics_system = QGraphicsSystemFactory::create(graphics_system_name);
-#endif
 #ifndef QT_NO_WHEELEVENT
     QApplicationPrivate::wheel_scroll_lines = 3;
Index: /trunk/src/gui/kernel/qapplication_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qapplication_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qapplication_mac.mm	(revision 769)
@@ -2144,4 +2144,5 @@
 
             if (wheel_deltaX || wheel_deltaY) {
+#ifndef QT_NO_WHEELEVENT
                 if (wheel_deltaX) {
                     QWheelEvent qwe(plocal, p, wheel_deltaX, buttons, modifiers, Qt::Horizontal);
@@ -2166,4 +2167,5 @@
                     }
                 }
+#endif // QT_NO_WHEELEVENT
             } else {
 #ifdef QMAC_SPEAK_TO_ME
@@ -2718,4 +2720,5 @@
 }
 
+#ifndef QT_NO_WHEELEVENT
 void QApplication::setWheelScrollLines(int n)
 {
@@ -2727,4 +2730,5 @@
     return QApplicationPrivate::wheel_scroll_lines;
 }
+#endif
 
 void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable)
@@ -2889,7 +2893,9 @@
         QApplication::setCursorFlashTime(num);
 
+#ifndef QT_NO_WHEELEVENT
         num = settings.value(QLatin1String("wheelScrollLines"),
                             QApplication::wheelScrollLines()).toInt();
         QApplication::setWheelScrollLines(num);
+#endif
 
         QString colorspec = settings.value(QLatin1String("colorSpec"),
Index: /trunk/src/gui/kernel/qapplication_p.h
===================================================================
--- /trunk/src/gui/kernel/qapplication_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qapplication_p.h	(revision 769)
@@ -429,5 +429,7 @@
     static int  mouse_double_click_time;
     static int  keyboard_input_time;
+#ifndef QT_NO_WHEELEVENT
     static int  wheel_scroll_lines;
+#endif
 
     static bool animate_ui;
@@ -533,4 +535,5 @@
 
 #if defined(Q_WS_WIN)
+    static bool HasTouchSupport;
     static PtrRegisterTouchWindow RegisterTouchWindow;
     static PtrGetTouchInputInfo GetTouchInputInfo;
@@ -568,5 +571,6 @@
 #endif
 
-#if defined(Q_WS_S60)
+#if defined(Q_OS_SYMBIAN)
+    int pressureSupported;
     int maxTouchPressure;
     QList<QTouchEvent::TouchPoint> appAllTouchPoints;
Index: /trunk/src/gui/kernel/qapplication_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qapplication_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qapplication_s60.cpp	(revision 769)
@@ -53,4 +53,5 @@
 #include "qdebug.h"
 #include "qimage.h"
+#include "qcombobox.h"
 #include "private/qkeymapper_p.h"
 #include "private/qfont_p.h"
@@ -64,5 +65,5 @@
 
 #include "apgwgnam.h" // For CApaWindowGroupName
-#include <MdaAudioTonePlayer.h>     // For CMdaAudioToneUtility
+#include <mdaaudiotoneplayer.h>     // For CMdaAudioToneUtility
 
 #if defined(Q_WS_S60)
@@ -73,4 +74,5 @@
 # include <private/qs60mainapplication_p.h>
 # include <centralrepository.h>
+# include "qs60mainappui.h"
 #endif
 
@@ -372,6 +374,11 @@
     if (S60->curWin == this)
         S60->curWin = 0;
-    if (!QApplicationPrivate::is_app_closing)
-        setFocusSafely(false);
+    if (!QApplicationPrivate::is_app_closing) {
+        QT_TRY {
+            setFocusSafely(false);
+        } QT_CATCH(const std::exception&) {
+            // ignore exceptions, nothing can be done
+        }
+    }
     S60->appUi()->RemoveFromStack(this);
     delete m_longTapDetector;
@@ -401,13 +408,20 @@
 {
     QApplicationPrivate *d = QApplicationPrivate::instance();
+    qreal pressure;
+    if(d->pressureSupported
+        && event->Pressure() > 0) //workaround for misconfigured HAL
+        pressure = event->Pressure() / qreal(d->maxTouchPressure);
+    else
+        pressure = qreal(1.0);
 
     QRect screenGeometry = qApp->desktop()->screenGeometry(qwidget);
 
-    while (d->appAllTouchPoints.count() <= event->PointerNumber())
-        d->appAllTouchPoints.append(QTouchEvent::TouchPoint(d->appAllTouchPoints.count()));
+    QList<QTouchEvent::TouchPoint> points = d->appAllTouchPoints;
+    while (points.count() <= event->PointerNumber())
+        points.append(QTouchEvent::TouchPoint(points.count()));
 
     Qt::TouchPointStates allStates = 0;
-    for (int i = 0; i < d->appAllTouchPoints.count(); ++i) {
-        QTouchEvent::TouchPoint &touchPoint = d->appAllTouchPoints[i];
+    for (int i = 0; i < points.count(); ++i) {
+        QTouchEvent::TouchPoint &touchPoint = points[i];
 
         if (touchPoint.id() == event->PointerNumber()) {
@@ -434,10 +448,10 @@
             touchPoint.setState(state);
 
-            QPointF screenPos = QPointF(event->iPosition.iX, event->iPosition.iY);
+            QPointF screenPos = qwidget->mapToGlobal(QPoint(event->iPosition.iX, event->iPosition.iY));
             touchPoint.setScreenPos(screenPos);
             touchPoint.setNormalizedPos(QPointF(screenPos.x() / screenGeometry.width(),
                                                 screenPos.y() / screenGeometry.height()));
 
-            touchPoint.setPressure(event->Pressure() / qreal(d->maxTouchPressure));
+            touchPoint.setPressure(pressure);
         } else if (touchPoint.state() != Qt::TouchPointReleased) {
             // all other active touch points should be marked as stationary
@@ -451,9 +465,11 @@
         // all touch points released
         d->appAllTouchPoints.clear();
+    } else {
+        d->appAllTouchPoints = points;
     }
 
     QApplicationPrivate::translateRawTouchEvent(qwidget,
                                                 QTouchEvent::TouchScreen,
-                                                d->appAllTouchPoints);
+                                                points);
 }
 #endif
@@ -533,4 +549,12 @@
     sendMouseEvent(receiver, type, globalPos, button, modifiers);
 }
+
+#ifdef Q_WS_S60
+void QSymbianControl::HandleStatusPaneSizeChange()
+{
+    QS60MainAppUi *s60AppUi = static_cast<QS60MainAppUi *>(S60->appUi());
+    s60AppUi->HandleStatusPaneSizeChange();
+}
+#endif
 
 void QSymbianControl::sendMouseEvent(
@@ -598,5 +622,7 @@
                 keyEvent.iCode);
         int keyCode;
-        if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) {
+        if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used
+            keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode);
+        } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) {
             // Normal characters keys.
             keyCode = s60Keysym;
@@ -626,8 +652,10 @@
                 QPoint pos = QCursor::pos();
                 TPointerEvent fakeEvent;
+                fakeEvent.iType = (TPointerEvent::TType)(-1);
                 TInt x = pos.x();
                 TInt y = pos.y();
                 if (type == EEventKeyUp) {
-                    if (keyCode == Qt::Key_Select)
+                    if (keyCode == Qt::Key_Select &&
+                        (S60->virtualMousePressedKeys & QS60Data::Select))
                         fakeEvent.iType = TPointerEvent::EButton1Up;
                     S60->virtualMouseAccel = 1;
@@ -678,6 +706,5 @@
                         // down messages for some keys. Therefore, make sure we have a clean slate
                         // of pressed keys before starting a new button press.
-                        if (S60->virtualMousePressedKeys != 0) {
-                            S60->virtualMousePressedKeys |= QS60Data::Select;
+                        if (S60->virtualMousePressedKeys & QS60Data::Select) {
                             return EKeyWasConsumed;
                         } else {
@@ -702,5 +729,6 @@
                 fakeEvent.iPosition = cpos;
                 fakeEvent.iParentPosition = epos;
-                HandlePointerEvent(fakeEvent);
+                if(fakeEvent.iType != -1)
+                    HandlePointerEvent(fakeEvent);
                 return EKeyWasConsumed;
             }
@@ -907,4 +935,7 @@
             if (!slowResize && tlwExtra)
                 tlwExtra->inTopLevelResize = false;
+        } else {
+            QResizeEvent *e = new QResizeEvent(newSize, oldSize);
+            QApplication::postEvent(qwidget, e);
         }
     }
@@ -965,14 +996,18 @@
 #ifdef Q_WS_S60
         // If widget is fullscreen/minimized, hide status pane and button container otherwise show them.
-        CEikStatusPane* statusPane = S60->statusPane();
-        CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer();
+        CEikStatusPane *statusPane = S60->statusPane();
+        CEikButtonGroupContainer *buttonGroup = S60->buttonGroupContainer();
         TBool visible = !(qwidget->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
         if (statusPane)
             statusPane->MakeVisible(visible);
-        if (buttonGroup)
-            buttonGroup->MakeVisible(visible);
+        if (buttonGroup) {
+            // Visibility
+            const TBool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen;
+            const TBool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+            buttonGroup->MakeVisible(visible || (isFullscreen && cbaVisibilityHint));
+        }
 #endif
     } else if (QApplication::activeWindow() == qwidget->window()) {
-        if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) {
+        if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog() || S60->menuBeingConstructed) {
             QWidget *fw = QApplication::focusWidget();
             if (fw) {
@@ -989,14 +1024,30 @@
 }
 
+void QSymbianControl::handleClientAreaChange()
+{
+    const bool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+    if (qwidget->isFullScreen() && !cbaVisibilityHint) {
+        SetExtentToWholeScreen();
+    } else if (qwidget->isMaximized() || (qwidget->isFullScreen() && cbaVisibilityHint)) {
+        TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+        SetExtent(r.iTl, r.Size());
+    } else if (!qwidget->isMinimized()) { // Normal geometry
+        if (!qwidget->testAttribute(Qt::WA_Resized)) {
+            qwidget->adjustSize();
+            qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize
+        }
+        if (!qwidget->testAttribute(Qt::WA_Moved) && qwidget->windowType() != Qt::Dialog) {
+            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+            SetPosition(r.iTl);
+            qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position
+        }
+    }
+}
+
 void QSymbianControl::HandleResourceChange(int resourceType)
 {
     switch (resourceType) {
     case KInternalStatusPaneChange:
-        if (qwidget->isFullScreen()) {
-            SetExtentToWholeScreen();
-        } else if (qwidget->isMaximized()) {
-            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
-            SetExtent(r.iTl, r.Size());
-        }
+        handleClientAreaChange();
         if (IsFocused() && IsVisible()) {
             qwidget->d_func()->setWindowIcon_sys(true);
@@ -1010,10 +1061,5 @@
     case KEikDynamicLayoutVariantSwitch:
     {
-        if (qwidget->isFullScreen()) {
-            SetExtentToWholeScreen();
-        } else if (qwidget->isMaximized()) {
-            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
-            SetExtent(r.iTl, r.Size());
-        }
+        handleClientAreaChange();
         break;
     }
@@ -1146,4 +1192,8 @@
 #endif
         S60->wsSession().SetAutoFlush(ETrue);
+
+#ifdef Q_SYMBIAN_WINDOW_SIZE_CACHE
+    TRAP_IGNORE(S60->wsSession().EnableWindowSizeCacheL());
+#endif
 
     S60->updateScreenSize();
@@ -1209,4 +1259,5 @@
 
     S60->avkonComponentsSupportTransparency = false;
+    S60->menuBeingConstructed = false;
 
 #ifdef Q_WS_S60
@@ -1224,5 +1275,5 @@
         }
     }
-#endif    
+#endif
 
     if (touch) {
@@ -1379,8 +1430,10 @@
 void QApplicationPrivate::openPopup(QWidget *popup)
 {
+    if (popup && qobject_cast<QComboBox *>(popup->parentWidget()))
+        static_cast<QSymbianControl *>(popup->effectiveWinId())->FadeBehindPopup(ETrue);
+
     if (!QApplicationPrivate::popupWidgets)
         QApplicationPrivate::popupWidgets = new QWidgetList;
     QApplicationPrivate::popupWidgets->append(popup);
-
 
     // Cancel focus widget pointer capture and long tap timer
@@ -1422,4 +1475,7 @@
 void QApplicationPrivate::closePopup(QWidget *popup)
 {
+    if (popup && qobject_cast<QComboBox *>(popup->parentWidget()))
+        static_cast<QSymbianControl *>(popup->effectiveWinId())->FadeBehindPopup(EFalse);
+
     if (!QApplicationPrivate::popupWidgets)
         return;
@@ -1445,4 +1501,7 @@
               : q_func()->focusWidget();
           if (fw) {
+              if(fw->window()->isModal()) // restore pointer capture for modal window
+                  fw->effectiveWinId()->SetPointerCapture(true);
+
               if (fw != q_func()->focusWidget()) {
                   fw->setFocus(Qt::PopupFocusReason);
@@ -1870,4 +1929,6 @@
 {
 #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+    if (HAL::Get(HALData::EPointer3DPressureSupported, pressureSupported) != KErrNone)
+        pressureSupported = 0;
     if (HAL::Get(HALData::EPointer3DMaxPressure, maxTouchPressure) != KErrNone)
         maxTouchPressure = KMaxTInt;
Index: /trunk/src/gui/kernel/qapplication_win.cpp
===================================================================
--- /trunk/src/gui/kernel/qapplication_win.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qapplication_win.cpp	(revision 769)
@@ -116,4 +116,6 @@
 #endif
 
+#include "private/qwinnativepangesturerecognizer_win_p.h"
+
 #ifndef WM_TOUCH
 #  define WM_TOUCH 0x0240
@@ -929,5 +931,9 @@
     bool icon;
     QString cname;
-    if (flags & Qt::MSWindowsOwnDC) {
+    if (qt_widget_private(w)->isGLWidget) {
+        cname = QLatin1String("QGLWidget");
+        style = CS_DBLCLKS;
+        icon  = true;
+    } else if (flags & Qt::MSWindowsOwnDC) {
         cname = QLatin1String("QWidgetOwnDC");
         style = CS_DBLCLKS;
@@ -1022,5 +1028,5 @@
     wc.hCursor      = 0;
 #ifndef Q_WS_WINCE
-    wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_WINDOW);
+    wc.hbrBackground = qt_widget_private(w)->isGLWidget ? 0 : (HBRUSH)GetSysColorBrush(COLOR_WINDOW);
 #else
     wc.hbrBackground = 0;
@@ -1902,6 +1908,11 @@
 
             if (!msg.wParam) {
+#ifdef Q_WS_WINCE
+                // On Windows CE, lParam parameter is a constant, not a char pointer.
+                if (msg.lParam == INI_INTL) {
+#else
                 QString area = QString::fromWCharArray((wchar_t*)msg.lParam);
                 if (area == QLatin1String("intl")) {
+#endif
                     QLocalePrivate::updateSystemPrivate();
                     if (!widget->testAttribute(Qt::WA_SetLocale))
@@ -2437,5 +2448,5 @@
             else
 #ifndef QT_NO_MENUBAR
-                QMenuBar::wceCommands(LOWORD(wParam), (HWND) lParam);
+                QMenuBar::wceCommands(LOWORD(wParam));
 #endif
             result = true;
@@ -2516,4 +2527,5 @@
             result = false;
             break;
+#if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES)
         case WM_GESTURE: {
             GESTUREINFO gi;
@@ -2548,4 +2560,5 @@
             break;
         }
+#endif // !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES)
         default:
             result = false;                        // event was not processed
@@ -3617,11 +3630,17 @@
 
     setAttribute(Qt::WA_PendingUpdate, false);
-    const QRegion dirtyInBackingStore(qt_dirtyRegion(this));
-    // Make sure the invalidated region contains the region we're about to repaint.
-    // BeginPaint will set the clip to the invalidated region and it is impossible
-    // to enlarge it afterwards (only shrink it). Using GetDCEx is not suffient
-    // as it may return an invalid context (especially on Windows Vista).
-    if (!dirtyInBackingStore.isEmpty())
-        InvalidateRgn(internalWinId(), dirtyInBackingStore.handle(), false);
+
+    if (d_func()->isGLWidget) {
+        if (d_func()->usesDoubleBufferedGLContext)
+            InvalidateRect(internalWinId(), 0, false);
+    } else {
+        const QRegion dirtyInBackingStore(qt_dirtyRegion(this));
+        // Make sure the invalidated region contains the region we're about to repaint.
+        // BeginPaint will set the clip to the invalidated region and it is impossible
+        // to enlarge it afterwards (only shrink it). Using GetDCEx is not suffient
+        // as it may return an invalid context (especially on Windows Vista).
+        if (!dirtyInBackingStore.isEmpty())
+            InvalidateRgn(internalWinId(), dirtyInBackingStore.handle(), false);
+    }
     PAINTSTRUCT ps;
     d_func()->hd = BeginPaint(internalWinId(), &ps);
@@ -3984,4 +4003,5 @@
 
 
+bool QApplicationPrivate::HasTouchSupport = false;
 PtrRegisterTouchWindow QApplicationPrivate::RegisterTouchWindow = 0;
 PtrGetTouchInputInfo QApplicationPrivate::GetTouchInputInfo = 0;
@@ -3990,4 +4010,36 @@
 void QApplicationPrivate::initializeMultitouch_sys()
 {
+    static const IID QT_IID_IInkTablets = {0x112086D9, 0x7779, 0x4535, {0xA6, 0x99, 0x86, 0x2B, 0x43, 0xAC, 0x18, 0x63} };
+    static const IID QT_IID_IInkTablet2 = {0x90c91ad2, 0xfa36, 0x49d6, {0x95, 0x16, 0xce, 0x8d, 0x57, 0x0f, 0x6f, 0x85} };
+    static const CLSID QT_CLSID_InkTablets = {0x6E4FCB12, 0x510A, 0x4d40, {0x93, 0x04, 0x1D, 0xA1, 0x0A, 0xE9, 0x14, 0x7C} };
+
+    IInkTablets *iInkTablets = 0;
+    HRESULT hr = CoCreateInstance(QT_CLSID_InkTablets, NULL, CLSCTX_ALL, QT_IID_IInkTablets, (void**)&iInkTablets);
+    if (SUCCEEDED(hr)) {
+        long count = 0;
+        iInkTablets->get_Count(&count);
+        for (long i = 0; i < count; ++i) {
+            IInkTablet *iInkTablet = 0;
+            hr = iInkTablets->Item(i, &iInkTablet);
+            if (FAILED(hr))
+                continue;
+            IInkTablet2 *iInkTablet2 = 0;
+            hr = iInkTablet->QueryInterface(QT_IID_IInkTablet2, (void**)&iInkTablet2);
+            iInkTablet->Release();
+            if (FAILED(hr))
+                continue;
+            TabletDeviceKind kind;
+            hr = iInkTablet2->get_DeviceKind(&kind);
+            iInkTablet2->Release();
+            if (FAILED(hr))
+                continue;
+            if (kind == TDK_Touch) {
+                QApplicationPrivate::HasTouchSupport = true;
+                break;
+            }
+        }
+        iInkTablets->Release();
+    }
+
     QLibrary library(QLatin1String("user32"));
     // MinGW (g++ 3.4.5) accepts only C casts.
Index: /trunk/src/gui/kernel/qapplication_x11.cpp
===================================================================
--- /trunk/src/gui/kernel/qapplication_x11.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qapplication_x11.cpp	(revision 769)
@@ -97,4 +97,9 @@
 #endif
 
+#ifndef QT_GUI_DOUBLE_CLICK_RADIUS
+#define QT_GUI_DOUBLE_CLICK_RADIUS 5
+#endif
+
+
 //#define ALIEN_DEBUG
 
@@ -316,7 +321,12 @@
     "_XEMBED_INFO\0"
 
+    // Wacom old. (before version 0.10)
     "Wacom Stylus\0"
     "Wacom Cursor\0"
     "Wacom Eraser\0"
+
+    // Tablet
+    "STYLUS\0"
+    "ERASER\0"
 };
 
@@ -945,8 +955,10 @@
     QApplication::setCursorFlashTime(num);
 
+#ifndef QT_NO_WHEELEVENT
     num =
         settings.value(QLatin1String("wheelScrollLines"),
                        QApplication::wheelScrollLines()).toInt();
     QApplication::setWheelScrollLines(num);
+#endif
 
     QString colorspec = settings.value(QLatin1String("colorSpec"),
@@ -2360,10 +2372,10 @@
                 }
 #else
-                if (devs->type == ATOM(XWacomStylus)) {
+                if (devs->type == ATOM(XWacomStylus) || devs->type == ATOM(XTabletStylus)) {
                     deviceType = QTabletEvent::Stylus;
                     if (wacomDeviceName()->isEmpty())
                         wacomDeviceName()->append(devs->name);
                     gotStylus = true;
-                } else if (devs->type == ATOM(XWacomEraser)) {
+                } else if (devs->type == ATOM(XWacomEraser) || devs->type == ATOM(XTabletEraser)) {
                     deviceType = QTabletEvent::XFreeEraser;
                     gotEraser = true;
@@ -4214,6 +4226,6 @@
                 (long)event->xbutton.time -(long)mouseButtonPressTime
                 < QApplication::doubleClickInterval() &&
-                qAbs(event->xbutton.x - mouseXPos) < 5 &&
-                qAbs(event->xbutton.y - mouseYPos) < 5) {
+                qAbs(event->xbutton.x - mouseXPos) < QT_GUI_DOUBLE_CLICK_RADIUS &&
+                qAbs(event->xbutton.y - mouseYPos) < QT_GUI_DOUBLE_CLICK_RADIUS) {
                 type = QEvent::MouseButtonDblClick;
                 mouseButtonPressTime -= 2000;        // no double-click next time
@@ -4402,6 +4414,8 @@
         if (popup && window() != popup)
             popup->close();
+#ifndef QT_NO_WHEELEVENT
         QWheelEvent e(pos, globalPos, delta, buttons, modifiers, orient);
         if (QApplication::sendSpontaneousEvent(widget, &e))
+#endif
             return true;
     }
@@ -4414,6 +4428,8 @@
         if (popup && widget != popup)
             popup->hide();
+#ifndef QT_NO_WHEELEVENT
         QWheelEvent e(pos, globalPos, delta, buttons, modifiers, orient);
         if (QApplication::sendSpontaneousEvent(widget, &e))
+#endif
             return true;
     }
@@ -5314,4 +5330,5 @@
 }
 
+#ifndef QT_NO_WHEELEVENT
 void QApplication::setWheelScrollLines(int n)
 {
@@ -5323,4 +5340,5 @@
     return QApplicationPrivate::wheel_scroll_lines;
 }
+#endif
 
 void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable)
Index: /trunk/src/gui/kernel/qclipboard_mac.cpp
===================================================================
--- /trunk/src/gui/kernel/qclipboard_mac.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qclipboard_mac.cpp	(revision 769)
@@ -389,4 +389,16 @@
         QStringList formats = mime_src->formats();
 
+#ifdef QT_MAC_USE_COCOA
+        // QMimeData sub classes reimplementing the formats() might not expose the
+        // temporary "application/x-qt-mime-type-name" mimetype. So check the existence
+        // of this mime type while doing drag and drop.
+        QString dummyMimeType(QLatin1String("application/x-qt-mime-type-name"));
+        if (!formats.contains(dummyMimeType)) {
+            QByteArray dummyType = mime_src->data(dummyMimeType);
+            if (!dummyType.isEmpty()) {
+                formats.append(dummyMimeType);
+            }
+        }
+#endif
         for(int f = 0; f < formats.size(); ++f) {
             QString mimeType = formats.at(f);
Index: /trunk/src/gui/kernel/qclipboard_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qclipboard_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qclipboard_s60.cpp	(revision 769)
@@ -165,5 +165,6 @@
         aStream >> mimeTypeSize;
         HBufC* mimeTypeBuf = HBufC::NewLC(aStream,mimeTypeSize);
-        QString mimeType = QString::fromUtf16(mimeTypeBuf->Des().Ptr(),mimeTypeBuf->Length());
+        QString mimeType = QString(reinterpret_cast<const QChar *>(mimeTypeBuf->Des().Ptr()),
+                                   mimeTypeBuf->Length());
         CleanupStack::PopAndDestroy(mimeTypeBuf);
         // mime data
Index: /trunk/src/gui/kernel/qcocoamenuloader_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qcocoamenuloader_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qcocoamenuloader_mac.mm	(revision 769)
@@ -111,4 +111,10 @@
 }
 
+- (void)removeActionsFromAppMenu
+{
+    for (NSMenuItem *item in [appMenu itemArray])
+        [item setTag:nil];
+}
+
 - (void)dealloc
 {
Index: /trunk/src/gui/kernel/qcocoamenuloader_mac_p.h
===================================================================
--- /trunk/src/gui/kernel/qcocoamenuloader_mac_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qcocoamenuloader_mac_p.h	(revision 769)
@@ -71,4 +71,5 @@
 }
 - (void)ensureAppMenuInMenu:(NSMenu *)menu;
+- (void)removeActionsFromAppMenu;
 - (NSMenu *)applicationMenu;
 - (NSMenu *)menu;
Index: /trunk/src/gui/kernel/qcocoapanel_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qcocoapanel_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qcocoapanel_mac.mm	(revision 769)
@@ -47,4 +47,7 @@
 #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>
Index: /trunk/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
===================================================================
--- /trunk/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h	(revision 769)
@@ -51,4 +51,7 @@
  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
@@ -186,2 +189,19 @@
 }
 
+- (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];
+}
+
+
Index: /trunk/src/gui/kernel/qcocoaview_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qcocoaview_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qcocoaview_mac.mm	(revision 769)
@@ -521,8 +521,9 @@
 {
     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];
@@ -645,4 +646,6 @@
 - (void)mouseEntered:(NSEvent *)event
 {
+    if (qwidgetprivate->data.in_destructor)
+        return;
     QEvent enterEvent(QEvent::Enter);
     NSPoint windowPoint = [event locationInWindow];
@@ -826,4 +829,5 @@
     }
 
+#ifndef QT_NO_WHEELEVENT
     if (deltaX != 0) {
         QWheelEvent qwe(qlocal, qglobal, deltaX, buttons, keyMods, Qt::Horizontal);
@@ -866,4 +870,6 @@
         }
     }
+#endif //QT_NO_WHEELEVENT
+
     if (!wheelOK) {
         return [super scrollWheel:theEvent];
@@ -1402,5 +1408,5 @@
     // setup the data
     QMacPasteboard dragBoard((CFStringRef) NSDragPboard, QMacPasteboardMime::MIME_DND);
-    dragPrivate()->data->setData(QLatin1String("application/x-qt-mime-type-name"), QByteArray());
+    dragPrivate()->data->setData(QLatin1String("application/x-qt-mime-type-name"), QByteArray("dummy"));
     dragBoard.setMimeData(dragPrivate()->data);
 
Index: /trunk/src/gui/kernel/qcocoawindow_mac_p.h
===================================================================
--- /trunk/src/gui/kernel/qcocoawindow_mac_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qcocoawindow_mac_p.h	(revision 769)
@@ -54,4 +54,7 @@
 #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
Index: /trunk/src/gui/kernel/qcursor.cpp
===================================================================
--- /trunk/src/gui/kernel/qcursor.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qcursor.cpp	(revision 769)
@@ -343,5 +343,6 @@
     \o B=0 and M=1 gives white.
     \o B=0 and M=0 gives transparent.
-    \o B=1 and M=0 gives an XOR'd result.
+    \o B=1 and M=0 gives an XOR'd result under Windows, undefined
+    results on all other platforms.
     \endlist
 
Index: /trunk/src/gui/kernel/qdesktopwidget_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qdesktopwidget_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qdesktopwidget_s60.cpp	(revision 769)
@@ -89,10 +89,13 @@
 void QDesktopWidgetPrivate::init(QDesktopWidget *that)
 {
-    int screenCount=0;
+    Q_UNUSED(that);
+//    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>();
@@ -101,10 +104,4 @@
     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());
 }
 
Index: /trunk/src/gui/kernel/qdnd_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qdnd_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qdnd_s60.cpp	(revision 769)
@@ -53,5 +53,5 @@
 #include "qt_s60_p.h"
 
-#include <COECNTRL.H>
+#include <coecntrl.h>
 // pointer cursor
 #include <w32std.h>
Index: /trunk/src/gui/kernel/qdnd_x11.cpp
===================================================================
--- /trunk/src/gui/kernel/qdnd_x11.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qdnd_x11.cpp	(revision 769)
@@ -618,5 +618,5 @@
             // to verify that it is utf16
             if (data.size() > 1 && data.at(1) == 0)
-                return QString::fromUtf16(reinterpret_cast<const ushort *>(data.constData()),
+                return QString::fromRawData((const QChar *)data.constData(),
                                 data.size() / 2).split(QLatin1Char('\n')).first().toLatin1();
         }
Index: /trunk/src/gui/kernel/qeventdispatcher_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qeventdispatcher_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qeventdispatcher_mac.mm	(revision 769)
@@ -493,4 +493,12 @@
         case NSOtherMouseUp:     
         case NSOtherMouseDragged:
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+        case NSEventTypeGesture: // touch events
+        case NSEventTypeMagnify:
+        case NSEventTypeSwipe:
+        case NSEventTypeRotate:
+        case NSEventTypeBeginGesture:
+        case NSEventTypeEndGesture:
+#endif
             result    = true;
         break;
Index: /trunk/src/gui/kernel/qgesturemanager.cpp
===================================================================
--- /trunk/src/gui/kernel/qgesturemanager.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qgesturemanager.cpp	(revision 769)
@@ -46,4 +46,5 @@
 #include "private/qgraphicsitem_p.h"
 #include "private/qevent_p.h"
+#include "private/qapplication_p.h"
 #include "qgesture.h"
 #include "qevent.h"
@@ -87,5 +88,6 @@
 #if defined(Q_OS_WIN)
   #if !defined(QT_NO_NATIVE_GESTURES)
-    registerGestureRecognizer(new QWinNativePanGestureRecognizer);
+    if (QApplicationPrivate::HasTouchSupport)
+        registerGestureRecognizer(new QWinNativePanGestureRecognizer);
   #endif
 #else
Index: /trunk/src/gui/kernel/qgridlayout.cpp
===================================================================
--- /trunk/src/gui/kernel/qgridlayout.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qgridlayout.cpp	(revision 769)
@@ -1853,5 +1853,5 @@
     \fn int QGridLayout::colSpacing(int col) const
 
-    Use columnSpacing() instead.
+    Use columnMinimumWidth() instead.
 */
 
Index: /trunk/src/gui/kernel/qguifunctions_wince.cpp
===================================================================
--- /trunk/src/gui/kernel/qguifunctions_wince.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qguifunctions_wince.cpp	(revision 769)
@@ -279,5 +279,12 @@
 bool qt_wince_is_windows_mobile_65()
 {
-    return ((qt_wince_get_version() == 52) && (qt_wince_get_build() > 2000));
+    const DWORD dwFirstWM65BuildNumber = 21139;
+    OSVERSIONINFO osvi;
+    osvi.dwOSVersionInfoSize = sizeof(osvi);
+    if (!GetVersionEx(&osvi))
+        return false;
+    return osvi.dwMajorVersion > 5
+        || (osvi.dwMajorVersion == 5 && (osvi.dwMinorVersion > 2 ||
+            (osvi.dwMinorVersion == 2 && osvi.dwBuildNumber >= dwFirstWM65BuildNumber)));
 }
 
Index: /trunk/src/gui/kernel/qkeymapper_p.h
===================================================================
--- /trunk/src/gui/kernel/qkeymapper_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qkeymapper_p.h	(revision 769)
@@ -217,10 +217,10 @@
 #elif defined(Q_WS_QWS)
 #elif defined(Q_OS_SYMBIAN)
-private:
-    QHash<TUint, int> s60ToQtKeyMap;
-    void fillKeyMap();
 public:
     QString translateKeyEvent(int keySym, Qt::KeyboardModifiers modifiers);
     int mapS60KeyToQt(TUint s60key);
+    int mapS60ScanCodesToQt(TUint s60key);
+    int mapQtToS60Key(int qtKey);
+    int mapQtToS60ScanCodes(int qtKey);
 #endif
 };
Index: /trunk/src/gui/kernel/qkeymapper_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qkeymapper_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qkeymapper_s60.cpp	(revision 769)
@@ -47,5 +47,4 @@
 QKeyMapperPrivate::QKeyMapperPrivate()
 {
-    fillKeyMap();
 }
 
@@ -75,173 +74,144 @@
 }
 
-void QKeyMapperPrivate::fillKeyMap()
-{
-    using namespace Qt;
-    static const struct {
-        TUint s60Key;
-        int qtKey;
-    } map[] = {
-        {EKeyBell, Key_unknown},
-        {EKeyBackspace, Key_Backspace},
-        {EKeyTab, Key_Tab},
-        {EKeyLineFeed, Key_unknown},
-        {EKeyVerticalTab, Key_unknown},
-        {EKeyFormFeed, Key_unknown},
-        {EKeyEnter, Key_Enter},
-        {EKeyEscape, Key_Escape},
-        {EKeySpace, Key_Space},
-        {EKeyDelete, Key_Delete},
-        {EKeyPrintScreen, Key_SysReq},
-        {EKeyPause, Key_Pause},
-        {EKeyHome, Key_Home},
-        {EKeyEnd, Key_End},
-        {EKeyPageUp, Key_PageUp},
-        {EKeyPageDown, Key_PageDown},
-        {EKeyInsert, Key_Insert},
-        {EKeyLeftArrow, Key_Left},
-        {EKeyRightArrow, Key_Right},
-        {EKeyUpArrow, Key_Up},
-        {EKeyDownArrow, Key_Down},
-        {EKeyLeftShift, Key_Shift},
-        {EKeyRightShift, Key_Shift},
-        {EKeyLeftAlt, Key_Alt},
-        {EKeyRightAlt, Key_AltGr},
-        {EKeyLeftCtrl, Key_Control},
-        {EKeyRightCtrl, Key_Control},
-        {EKeyLeftFunc, Key_Super_L},
-        {EKeyRightFunc, Key_Super_R},
-        {EKeyCapsLock, Key_CapsLock},
-        {EKeyNumLock, Key_NumLock},
-        {EKeyScrollLock, Key_ScrollLock},
-        {EKeyF1, Key_F1},
-        {EKeyF2, Key_F2},
-        {EKeyF3, Key_F3},
-        {EKeyF4, Key_F4},
-        {EKeyF5, Key_F5},
-        {EKeyF6, Key_F6},
-        {EKeyF7, Key_F7},
-        {EKeyF8, Key_F8},
-        {EKeyF9, Key_F9},
-        {EKeyF10, Key_F10},
-        {EKeyF11, Key_F11},
-        {EKeyF12, Key_F12},
-        {EKeyF13, Key_F13},
-        {EKeyF14, Key_F14},
-        {EKeyF15, Key_F15},
-        {EKeyF16, Key_F16},
-        {EKeyF17, Key_F17},
-        {EKeyF18, Key_F18},
-        {EKeyF19, Key_F19},
-        {EKeyF20, Key_F20},
-        {EKeyF21, Key_F21},
-        {EKeyF22, Key_F22},
-        {EKeyF23, Key_F23},
-        {EKeyF24, Key_F24},
-        {EKeyOff, Key_unknown},
-        {EKeyIncContrast, Key_unknown},
-        {EKeyDecContrast, Key_unknown},
-        {EKeyBacklightOn, Key_unknown},
-        {EKeyBacklightOff, Key_unknown},
-        {EKeyBacklightToggle, Key_unknown},
-        {EKeySliderDown, Key_unknown},
-        {EKeySliderUp, Key_unknown},
-        {EKeyMenu, Key_Menu},
-        {EKeyDictaphonePlay, Key_unknown},
-        {EKeyDictaphoneStop, Key_unknown},
-        {EKeyDictaphoneRecord, Key_unknown},
-        {EKeyHelp, Key_unknown},
-        {EKeyDial, Key_Call},
-        {EKeyScreenDimension0, Key_unknown},
-        {EKeyScreenDimension1, Key_unknown},
-        {EKeyScreenDimension2, Key_unknown},
-        {EKeyScreenDimension3, Key_unknown},
-        {EKeyIncVolume, Key_unknown},
-        {EKeyDecVolume, Key_unknown},
-        {EKeyDevice0, Key_Context1}, // Found by manual testing, left softkey.
-        {EKeyDevice1, Key_Context2}, // Found by manual testing.
-        {EKeyDevice2, Key_unknown},
-        {EKeyDevice3, Key_Select}, // Found by manual testing.
-        {EKeyDevice4, Key_unknown},
-        {EKeyDevice5, Key_unknown},
-        {EKeyDevice6, Key_unknown},
-        {EKeyDevice7, Key_unknown},
-        {EKeyDevice8, Key_unknown},
-        {EKeyDevice9, Key_unknown},
-        {EKeyDeviceA, Key_unknown},
-        {EKeyDeviceB, Key_unknown},
-        {EKeyDeviceC, Key_unknown},
-        {EKeyDeviceD, Key_unknown},
-        {EKeyDeviceE, Key_unknown},
-        {EKeyDeviceF, Key_unknown},
-        {EKeyApplication0, Key_Launch0},
-        {EKeyApplication1, Key_Launch1},
-        {EKeyApplication2, Key_Launch2},
-        {EKeyApplication3, Key_Launch3},
-        {EKeyApplication4, Key_Launch4},
-        {EKeyApplication5, Key_Launch5},
-        {EKeyApplication6, Key_Launch6},
-        {EKeyApplication7, Key_Launch7},
-        {EKeyApplication8, Key_Launch8},
-        {EKeyApplication9, Key_Launch9},
-        {EKeyApplicationA, Key_LaunchA},
-        {EKeyApplicationB, Key_LaunchB},
-        {EKeyApplicationC, Key_LaunchC},
-        {EKeyApplicationD, Key_LaunchD},
-        {EKeyApplicationE, Key_LaunchE},
-        {EKeyApplicationF, Key_LaunchF},
-        {EKeyYes, Key_Yes},
-        {EKeyNo, Key_No},
-        {EKeyIncBrightness, Key_unknown},
-        {EKeyDecBrightness, Key_unknown},
-        {EKeyKeyboardExtend, Key_unknown},
-        {EKeyDevice10, Key_unknown},
-        {EKeyDevice11, Key_unknown},
-        {EKeyDevice12, Key_unknown},
-        {EKeyDevice13, Key_unknown},
-        {EKeyDevice14, Key_unknown},
-        {EKeyDevice15, Key_unknown},
-        {EKeyDevice16, Key_unknown},
-        {EKeyDevice17, Key_unknown},
-        {EKeyDevice18, Key_unknown},
-        {EKeyDevice19, Key_unknown},
-        {EKeyDevice1A, Key_unknown},
-        {EKeyDevice1B, Key_unknown},
-        {EKeyDevice1C, Key_unknown},
-        {EKeyDevice1D, Key_unknown},
-        {EKeyDevice1E, Key_unknown},
-        {EKeyDevice1F, Key_unknown},
-        {EKeyApplication10, Key_unknown},
-        {EKeyApplication11, Key_unknown},
-        {EKeyApplication12, Key_unknown},
-        {EKeyApplication13, Key_unknown},
-        {EKeyApplication14, Key_unknown},
-        {EKeyApplication15, Key_unknown},
-        {EKeyApplication16, Key_unknown},
-        {EKeyApplication17, Key_unknown},
-        {EKeyApplication18, Key_unknown},
-        {EKeyApplication19, Key_unknown},
-        {EKeyApplication1A, Key_unknown},
-        {EKeyApplication1B, Key_unknown},
-        {EKeyApplication1C, Key_unknown},
-        {EKeyApplication1D, Key_unknown},
-        {EKeyApplication1E, Key_unknown},
-        {EKeyApplication1F, Key_unknown}
-    };
-    const int mapSize = int(sizeof(map)/sizeof(map[0]));
-    s60ToQtKeyMap.reserve(mapSize + 5); // +5? docs: Ideally, slightly more than number of items
-    for (int i = 0; i < mapSize; ++i)
-        s60ToQtKeyMap.insert(map[i].s60Key, map[i].qtKey);
-}
+#include <e32keys.h>
+struct KeyMapping{
+    TKeyCode s60KeyCode;
+    TStdScanCode s60ScanCode;
+    Qt::Key qtKey;
+};
+
+using namespace Qt;
+
+static const KeyMapping keyMapping[] = {
+    {EKeyBackspace, EStdKeyBackspace, Key_Backspace},
+    {EKeyTab, EStdKeyTab, Key_Tab},
+    {EKeyEnter, EStdKeyEnter, Key_Enter},
+    {EKeyEscape, EStdKeyEscape, Key_Escape},
+    {EKeySpace, EStdKeySpace, Key_Space},
+    {EKeyDelete, EStdKeyDelete, Key_Delete},
+    {EKeyPrintScreen, EStdKeyPrintScreen, Key_SysReq},
+    {EKeyPause, EStdKeyPause, Key_Pause},
+    {EKeyHome, EStdKeyHome, Key_Home},
+    {EKeyEnd, EStdKeyEnd, Key_End},
+    {EKeyPageUp, EStdKeyPageUp, Key_PageUp},
+    {EKeyPageDown, EStdKeyPageDown, Key_PageDown},
+    {EKeyInsert, EStdKeyInsert, Key_Insert},
+    {EKeyLeftArrow, EStdKeyLeftArrow, Key_Left},
+    {EKeyRightArrow, EStdKeyRightArrow, Key_Right},
+    {EKeyUpArrow, EStdKeyUpArrow, Key_Up},
+    {EKeyDownArrow, EStdKeyDownArrow, Key_Down},
+    {EKeyLeftShift, EStdKeyLeftShift, Key_Shift},
+    {EKeyRightShift, EStdKeyRightShift, Key_Shift},
+    {EKeyLeftAlt, EStdKeyLeftAlt, Key_Alt},
+    {EKeyRightAlt, EStdKeyRightAlt, Key_AltGr},
+    {EKeyLeftCtrl, EStdKeyLeftCtrl, Key_Control},
+    {EKeyRightCtrl, EStdKeyRightCtrl, Key_Control},
+    {EKeyLeftFunc, EStdKeyLeftFunc, Key_Super_L},
+    {EKeyRightFunc, EStdKeyRightFunc, Key_Super_R},
+    {EKeyCapsLock, EStdKeyCapsLock, Key_CapsLock},
+    {EKeyNumLock, EStdKeyNumLock, Key_NumLock},
+    {EKeyScrollLock, EStdKeyScrollLock, Key_ScrollLock},
+    {EKeyF1, EStdKeyF1, Key_F1},
+    {EKeyF2, EStdKeyF2, Key_F2},
+    {EKeyF3, EStdKeyF3, Key_F3},
+    {EKeyF4, EStdKeyF4, Key_F4},
+    {EKeyF5, EStdKeyF5, Key_F5},
+    {EKeyF6, EStdKeyF6, Key_F6},
+    {EKeyF7, EStdKeyF7, Key_F7},
+    {EKeyF8, EStdKeyF8, Key_F8},
+    {EKeyF9, EStdKeyF9, Key_F9},
+    {EKeyF10, EStdKeyF10, Key_F10},
+    {EKeyF11, EStdKeyF11, Key_F11},
+    {EKeyF12, EStdKeyF12, Key_F12},
+    {EKeyF13, EStdKeyF13, Key_F13},
+    {EKeyF14, EStdKeyF14, Key_F14},
+    {EKeyF15, EStdKeyF15, Key_F15},
+    {EKeyF16, EStdKeyF16, Key_F16},
+    {EKeyF17, EStdKeyF17, Key_F17},
+    {EKeyF18, EStdKeyF18, Key_F18},
+    {EKeyF19, EStdKeyF19, Key_F19},
+    {EKeyF20, EStdKeyF20, Key_F20},
+    {EKeyF21, EStdKeyF21, Key_F21},
+    {EKeyF22, EStdKeyF22, Key_F22},
+    {EKeyF23, EStdKeyF23, Key_F23},
+    {EKeyF24, EStdKeyF24, Key_F24},
+    {EKeyOff, EStdKeyOff, Key_PowerOff},
+//    {EKeyMenu, EStdKeyMenu, Key_Menu}, // Menu is EKeyApplication0
+    {EKeyHelp, EStdKeyHelp, Key_Help},
+    {EKeyDial, EStdKeyDial, Key_Call},
+    {EKeyIncVolume, EStdKeyIncVolume, Key_VolumeUp},
+    {EKeyDecVolume, EStdKeyDecVolume, Key_VolumeDown},
+    {EKeyDevice0, EStdKeyDevice0, Key_Context1}, // Found by manual testing.
+    {EKeyDevice1, EStdKeyDevice1, Key_Context2}, // Found by manual testing.
+    {EKeyDevice3, EStdKeyDevice3, Key_Select},
+//    {EKeyDevice7, EStdKeyDevice7, Key_Camera},  //not supported by qt yet
+    {EKeyApplication0, EStdKeyApplication0, Key_Menu}, // Found by manual testing.
+    {EKeyApplication1, EStdKeyApplication1, Key_Launch1}, // Found by manual testing.
+    {EKeyApplication2, EStdKeyApplication2, Key_MediaPlay}, // Found by manual testing.
+    {EKeyApplication3, EStdKeyApplication3, Key_MediaStop}, // Found by manual testing.
+    {EKeyApplication4, EStdKeyApplication4, Key_MediaNext}, // Found by manual testing.
+    {EKeyApplication5, EStdKeyApplication5, Key_MediaPrevious}, // Found by manual testing.
+    {EKeyApplication6, EStdKeyApplication6, Key_Launch6},
+    {EKeyApplication7, EStdKeyApplication7, Key_Launch7},
+    {EKeyApplication8, EStdKeyApplication8, Key_Launch8},
+    {EKeyApplication9, EStdKeyApplication9, Key_Launch9},
+    {EKeyApplicationA, EStdKeyApplicationA, Key_LaunchA},
+    {EKeyApplicationB, EStdKeyApplicationB, Key_LaunchB},
+    {EKeyApplicationC, EStdKeyApplicationC, Key_LaunchC},
+    {EKeyApplicationD, EStdKeyApplicationD, Key_LaunchD},
+    {EKeyApplicationE, EStdKeyApplicationE, Key_LaunchE},
+    {EKeyApplicationF, EStdKeyApplicationF, Key_LaunchF},
+//    {EKeyApplication19, EStdKeyApplication19, Key_CameraFocus},  //not supported by qt yet
+    {EKeyYes, EStdKeyYes, Key_Yes},
+    {EKeyNo, EStdKeyNo, Key_No},
+    {TKeyCode(0), TStdScanCode(0), Qt::Key(0)}
+};
 
 int QKeyMapperPrivate::mapS60KeyToQt(TUint s60key)
 {
-    QHash<TUint, int>::const_iterator mapping;
-    mapping = s60ToQtKeyMap.find(s60key);
-    if (mapping != s60ToQtKeyMap.end()) {
-        return *mapping;
-    } else {
-        return Qt::Key_unknown;
-    }
-}
-
+    int res = Qt::Key_unknown;
+    for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) {
+        if (keyMapping[i].s60KeyCode == s60key) {
+            res = keyMapping[i].qtKey;
+            break;
+        }
+    }
+    return res;
+}
+
+int QKeyMapperPrivate::mapS60ScanCodesToQt(TUint s60scanCode)
+{
+    int res = Qt::Key_unknown;
+    for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) {
+        if (keyMapping[i].s60ScanCode == s60scanCode) {
+            res = keyMapping[i].qtKey;
+            break;
+        }
+    }
+    return res;
+}
+
+int QKeyMapperPrivate::mapQtToS60Key(int qtKey)
+{
+    int res = KErrUnknown;
+    for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) {
+        if (keyMapping[i].qtKey == qtKey) {
+            res = keyMapping[i].s60KeyCode;
+            break;
+        }
+    }
+    return res;
+}
+
+int QKeyMapperPrivate::mapQtToS60ScanCodes(int qtKey)
+{
+    int res = KErrUnknown;
+    for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) {
+        if (keyMapping[i].qtKey == qtKey) {
+            res = keyMapping[i].s60ScanCode;
+            break;
+        }
+    }
+    return res;
+}
 QT_END_NAMESPACE
Index: /trunk/src/gui/kernel/qkeymapper_x11.cpp
===================================================================
--- /trunk/src/gui/kernel/qkeymapper_x11.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qkeymapper_x11.cpp	(revision 769)
@@ -361,4 +361,11 @@
         if (code && code < 0xfffe)
             code = QChar(code).toUpper().unicode();
+
+        if (code == Qt::Key_Tab && (baseModifiers & Qt::ShiftModifier)) {
+            // map shift+tab to shift+backtab
+            code = Qt::Key_Backtab;
+            text = QString();
+        }
+
         if (code == baseCode)
             continue;
@@ -449,4 +456,11 @@
         if (code && code < 0xfffe)
             code = QChar(code).toUpper().unicode();
+
+        if (code == Qt::Key_Tab && (baseModifiers & Qt::ShiftModifier)) {
+            // map shift+tab to shift+backtab
+            code = Qt::Key_Backtab;
+            text = QString();
+        }
+
         if (code == baseCode)
             continue;
@@ -1060,6 +1074,6 @@
     XF86XK_AudioRecord,         Qt::Key_MediaRecord,
     XF86XK_Mail,                Qt::Key_LaunchMail,
-    XF86XK_MyComputer,          Qt::Key_Launch0,
-    XF86XK_Calculator,          Qt::Key_Calculator,
+    XF86XK_MyComputer,          Qt::Key_Launch0,  // ### Qt 5: remap properly
+    XF86XK_Calculator,          Qt::Key_Launch1,
     XF86XK_Memo,                Qt::Key_Memo,
     XF86XK_ToDoList,            Qt::Key_ToDoList,
@@ -1159,5 +1173,5 @@
     XF86XK_Suspend,             Qt::Key_Suspend,
     XF86XK_Hibernate,           Qt::Key_Hibernate,
-    XF86XK_Launch0,             Qt::Key_Launch2,
+    XF86XK_Launch0,             Qt::Key_Launch2, // ### Qt 5: remap properly
     XF86XK_Launch1,             Qt::Key_Launch3,
     XF86XK_Launch2,             Qt::Key_Launch4,
Index: /trunk/src/gui/kernel/qmime_mac.cpp
===================================================================
--- /trunk/src/gui/kernel/qmime_mac.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qmime_mac.cpp	(revision 769)
@@ -432,6 +432,6 @@
         ret = QString(str);
     } else if (flavor == QLatin1String("public.utf16-plain-text")) {
-        ret = QString::fromUtf16(reinterpret_cast<const ushort *>(firstData.constData()),
-                                 firstData.size() / sizeof(ushort));
+        ret = QString(reinterpret_cast<const QChar *>(firstData.constData()),
+                      firstData.size() / sizeof(QChar));
     } else {
         qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype));
Index: /trunk/src/gui/kernel/qmime_win.cpp
===================================================================
--- /trunk/src/gui/kernel/qmime_win.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qmime_win.cpp	(revision 769)
@@ -641,6 +641,8 @@
             QList<QUrl> urls = mimeData->urls();
             QByteArray result;
-            QString url = urls.at(0).toString();
-            result = QByteArray((const char *)url.utf16(), url.length() * sizeof(ushort));
+            if (!urls.isEmpty()) {
+                QString url = urls.at(0).toString();
+                result = QByteArray((const char *)url.utf16(), url.length() * sizeof(ushort));
+            }
             result.append('\0');
             result.append('\0');
@@ -648,5 +650,7 @@
         } else if (getCf(formatetc) == CF_INETURL) {
             QList<QUrl> urls = mimeData->urls();
-            QByteArray result = urls.at(0).toString().toLocal8Bit();
+            QByteArray result;
+            if (!urls.isEmpty())
+                result = urls.at(0).toString().toLocal8Bit();
             return setData(result, pmedium);
         }
Index: /trunk/src/gui/kernel/qsoftkeymanager.cpp
===================================================================
--- /trunk/src/gui/kernel/qsoftkeymanager.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qsoftkeymanager.cpp	(revision 769)
@@ -56,22 +56,22 @@
 QSoftKeyManager *QSoftKeyManagerPrivate::self = 0;
 
-const char *QSoftKeyManager::standardSoftKeyText(StandardSoftKey standardKey)
-{
-    const char *softKeyText = 0;
+QString QSoftKeyManager::standardSoftKeyText(StandardSoftKey standardKey)
+{
+    QString softKeyText;
     switch (standardKey) {
     case OkSoftKey:
-        softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Ok");
+        softKeyText = QSoftKeyManager::tr("Ok");
         break;
     case SelectSoftKey:
-        softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Select");
+        softKeyText = QSoftKeyManager::tr("Select");
         break;
     case DoneSoftKey:
-        softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Done");
+        softKeyText = QSoftKeyManager::tr("Done");
         break;
     case MenuSoftKey:
-        softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Options");
+        softKeyText = QSoftKeyManager::tr("Options");
         break;
     case CancelSoftKey:
-        softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Cancel");
+        softKeyText = QSoftKeyManager::tr("Cancel");
         break;
     default:
@@ -101,6 +101,5 @@
 QAction *QSoftKeyManager::createAction(StandardSoftKey standardKey, QWidget *actionWidget)
 {
-    const char* text = standardSoftKeyText(standardKey);
-    QAction *action = new QAction(QSoftKeyManager::tr(text), actionWidget);
+    QAction *action = new QAction(standardSoftKeyText(standardKey), actionWidget);
     QAction::SoftKeyRole softKeyRole = QAction::NoSoftKey;
     switch (standardKey) {
@@ -117,4 +116,6 @@
     }
     action->setSoftKeyRole(softKeyRole);
+    action->setVisible(false);
+    setForceEnabledInSoftkeys(action);
     return action;
 }
@@ -170,12 +171,23 @@
     Q_D(QSoftKeyManager);
     bool ret = false;
-    QList<QAction*> actions = source.actions();
-    for (int i = 0; i < actions.count(); ++i) {
-        if (actions.at(i)->softKeyRole() != QAction::NoSoftKey) {
-            d->requestedSoftKeyActions.insert(level, actions.at(i));
+    foreach(QAction *action, source.actions()) {
+        if (action->softKeyRole() != QAction::NoSoftKey
+            && (action->isVisible() || isForceEnabledInSofkeys(action))) {
+            d->requestedSoftKeyActions.insert(level, action);
             ret = true;
         }
     }
     return ret;
+}
+
+
+static bool isChildOf(const QWidget *c, const QWidget *p)
+{
+    while (c) {
+        if (c == p)
+            return true;
+        c = c->parentWidget();
+    }
+    return false;
 }
 
@@ -186,7 +198,26 @@
     if (!previousSource) {
         // Initial source is primarily focuswidget and secondarily activeWindow
-        source = QApplication::focusWidget();
-        if (!source)
-            source = QApplication::activeWindow();
+        QWidget *focus = QApplication::focusWidget();
+        QWidget *popup = QApplication::activePopupWidget();
+        if (popup) {
+            if (isChildOf(focus, popup))
+                source = focus;
+            else
+                source = popup;
+        }
+        if (!source) {
+            QWidget *modal = QApplication::activeModalWidget();
+            if (modal) {
+                if (isChildOf(focus, modal))
+                    source = focus;
+                else
+                    source = modal;
+            }
+        }
+        if (!source) {
+            source = focus;
+            if (!source)
+                source = QApplication::activeWindow();
+        }
     } else {
         // Softkey merging is based on four criterias
@@ -212,14 +243,27 @@
     bool recursiveMerging = false;
     QWidget *source = softkeySource(NULL, recursiveMerging);
-    do {
-        if (source) {
-            bool added = appendSoftkeys(*source, level);
-            source = softkeySource(source, recursiveMerging);
-            level = added ? ++level : level;
-        }
-    } while (source);
+    d->initialSoftKeySource = source;
+    while (source) {
+        if (appendSoftkeys(*source, level))
+            ++level;
+        source = softkeySource(source, recursiveMerging);
+    }
 
     d->updateSoftKeys_sys();
     return true;
+}
+
+void QSoftKeyManager::setForceEnabledInSoftkeys(QAction *action)
+{
+    action->setProperty(FORCE_ENABLED_PROPERTY, QVariant(true));
+}
+
+bool QSoftKeyManager::isForceEnabledInSofkeys(QAction *action)
+{
+    bool ret = false;
+    QVariant property = action->property(FORCE_ENABLED_PROPERTY);
+    if (property.isValid() && property.toBool())
+        ret = true;
+    return ret;
 }
 
Index: /trunk/src/gui/kernel/qsoftkeymanager_common_p.h
===================================================================
--- /trunk/src/gui/kernel/qsoftkeymanager_common_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qsoftkeymanager_common_p.h	(revision 769)
@@ -71,4 +71,5 @@
     QHash<QAction*, Qt::Key> keyedActions;
     QMultiHash<int, QAction*> requestedSoftKeyActions;
+    QWidget *initialSoftKeySource;
 
 };
Index: /trunk/src/gui/kernel/qsoftkeymanager_p.h
===================================================================
--- /trunk/src/gui/kernel/qsoftkeymanager_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qsoftkeymanager_p.h	(revision 769)
@@ -64,5 +64,6 @@
 class QSoftKeyManagerPrivate;
 
-const char MENU_ACTION_PROPERTY[] = "_q_menuaction";
+const char MENU_ACTION_PROPERTY[] = "_q_menuAction";
+const char FORCE_ENABLED_PROPERTY[] = "_q_forceEnabledInSoftkeys";
 
 class Q_AUTOTEST_EXPORT QSoftKeyManager : public QObject
@@ -88,4 +89,7 @@
     static QAction *createAction(StandardSoftKey standardKey, QWidget *actionWidget);
     static QAction *createKeyedAction(StandardSoftKey standardKey, Qt::Key key, QWidget *actionWidget);
+    static QString standardSoftKeyText(StandardSoftKey standardKey);
+    static void setForceEnabledInSoftkeys(QAction *action);
+    static bool isForceEnabledInSofkeys(QAction *action);
 
 protected:
@@ -95,5 +99,4 @@
     QSoftKeyManager();
     static QSoftKeyManager *instance();
-    static const char *standardSoftKeyText(StandardSoftKey standardKey);
     bool appendSoftkeys(const QWidget &source, int level);
     QWidget *softkeySource(QWidget *previousSource, bool& recursiveMerging);
Index: /trunk/src/gui/kernel/qsoftkeymanager_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qsoftkeymanager_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qsoftkeymanager_s60.cpp	(revision 769)
@@ -61,5 +61,5 @@
 const int RSK_POSITION = 2;
 
-QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60()
+QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60() : cbaHasImage(4) // 4 since MSK position index is 3
 {
     cachedCbaIconSize[0] = QSize(0,0);
@@ -67,15 +67,28 @@
     cachedCbaIconSize[2] = QSize(0,0);
     cachedCbaIconSize[3] = QSize(0,0);
-    skipNextUpdate = false;
 }
 
 bool QSoftKeyManagerPrivateS60::skipCbaUpdate()
 {
-    // lets not update softkeys if
+    // Lets not update softkeys if
     // 1. We don't have application panes, i.e. cba
-    // 2. S60 native dialog or menu is shown
-    if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) ||
-        CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog() || skipNextUpdate) {
-        skipNextUpdate = false;
+    // 2. Our CBA is not active, i.e. S60 native dialog or menu with custom CBA is shown
+    //    2.1. Except if thre is no current CBA at all and WindowSoftkeysRespondHint is set
+
+    // Note: Cannot use IsDisplayingMenuOrDialog since CBA update can be triggered before
+    // menu/dialog CBA is actually displayed i.e. it is being costructed.
+    CEikButtonGroupContainer *appUiCba = S60->buttonGroupContainer();
+    if (!appUiCba)
+        return true;
+    // CEikButtonGroupContainer::Current returns 0 if CBA is not visible at all
+    CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current();
+    // Check if softkey need to be update even they are not visible
+    bool cbaRespondsWhenInvisible = false;
+    QWidget *window = QApplication::activeWindow();
+    if (window && (window->windowFlags() & Qt::WindowSoftkeysRespondHint))
+        cbaRespondsWhenInvisible = true;
+
+    if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)
+            || (appUiCba != currentCba && !cbaRespondsWhenInvisible)) {
         return true;
     }
@@ -255,8 +268,12 @@
 
             EikSoftkeyImage::SetImage(cba, *myimage, left); // Takes myimage ownership
+            cbaHasImage[position] = true;
             ret = true;
         } else {
             // Restore softkey to text based
-            EikSoftkeyImage::SetLabel(cba, left);
+            if (cbaHasImage[position]) {
+                EikSoftkeyImage::SetLabel(cba, left);
+                cbaHasImage[position] = false;
+            }
         }
     }
@@ -274,5 +291,6 @@
         int command = S60_COMMAND_START + position;
         setNativeSoftkey(cba, position, command, nativeText);
-        cba.DimCommand(command, !action->isEnabled());
+        const bool dimmed = !action->isEnabled() && !QSoftKeyManager::isForceEnabledInSofkeys(action);
+        cba.DimCommand(command, dimmed);
         realSoftKeyActions.insert(command, action);
         return true;
@@ -297,20 +315,15 @@
 {
     if (!setSoftkey(cba, QAction::NegativeSoftKey, RSK_POSITION)) {
-        Qt::WindowType windowType = Qt::Window;
-        QAction *action = requestedSoftKeyActions.value(0);
-        if (action) {
-            QWidget *actionParent = action->parentWidget();
-            Q_ASSERT_X(actionParent, Q_FUNC_INFO, "No parent set for softkey action!");
-
-            QWidget *actionWindow = actionParent->window();
-            Q_ASSERT_X(actionWindow, Q_FUNC_INFO, "Softkey action does not have window!");
-            windowType = actionWindow->windowType();
-        }
-
+        const Qt::WindowType windowType = initialSoftKeySource
+            ? initialSoftKeySource->window()->windowType() : Qt::Window;
         if (windowType != Qt::Dialog && windowType != Qt::Popup) {
             QString text(QSoftKeyManager::tr("Exit"));
             TPtrC nativeText = qt_QString2TPtrC(text);
-            EikSoftkeyImage::SetLabel(&cba, false);
+            if (cbaHasImage[RSK_POSITION]) {
+                EikSoftkeyImage::SetLabel(&cba, false);
+                cbaHasImage[RSK_POSITION] = false;
+            }
             setNativeSoftkey(cba, RSK_POSITION, EAknSoftkeyExit, nativeText);
+            cba.DimCommand(EAknSoftkeyExit, false);
             return true;
         }
@@ -355,4 +368,17 @@
 }
 
+static void resetMenuBeingConstructed(TAny* /*aAny*/)
+{
+    S60->menuBeingConstructed = false;
+}
+
+void QSoftKeyManagerPrivateS60::tryDisplayMenuBarL()
+{
+    CleanupStack::PushL(TCleanupItem(resetMenuBeingConstructed, NULL));
+    S60->menuBeingConstructed = true;
+    S60->menuBar()->TryDisplayMenuBarL();
+    CleanupStack::PopAndDestroy(); // Reset menuBeingConstructed to false in all cases
+}
+
 bool QSoftKeyManagerPrivateS60::handleCommand(int command)
 {
@@ -361,9 +387,9 @@
         QVariant property = action->property(MENU_ACTION_PROPERTY);
         if (property.isValid() && property.toBool()) {
-            QT_TRAP_THROWING(S60->menuBar()->TryDisplayMenuBarL());
+            QT_TRAP_THROWING(tryDisplayMenuBarL());
         } else if (action->menu()) {
             // TODO: This is hack, in order to use exising QMenuBar implementation for Symbian
             // menubar needs to have widget to which it is associated. Since we want to associate
-            // menubar to action (which is inherited from QObejct), we create and associate QWidget
+            // menubar to action (which is inherited from QObject), we create and associate QWidget
             // to action and pass that for QMenuBar. This associates the menubar to action, and we
             // can have own menubar for each action.
@@ -384,16 +410,13 @@
             }
             qt_symbian_next_menu_from_action(actionContainer);
-            QT_TRAP_THROWING(S60->menuBar()->TryDisplayMenuBarL());
-            // TODO: hack remove, it can happen that IsDisplayingMenuOrDialog return false
-            // in updateSoftKeys_sys, and we will override menu CBA with our own
-            skipNextUpdate = true;
-        } else {
-            Q_ASSERT(action->softKeyRole() != QAction::NoSoftKey);
-            QWidget *actionParent = action->parentWidget();
-            Q_ASSERT_X(actionParent, Q_FUNC_INFO, "No parent set for softkey action!");
-            if (actionParent->isEnabled()) {
-                action->activate(QAction::Trigger);
-                return true;
-            }
+            QT_TRAP_THROWING(tryDisplayMenuBarL());
+        }
+
+        Q_ASSERT(action->softKeyRole() != QAction::NoSoftKey);
+        QWidget *actionParent = action->parentWidget();
+        Q_ASSERT_X(actionParent, Q_FUNC_INFO, "No parent set for softkey action!");
+        if (actionParent->isEnabled()) {
+            action->activate(QAction::Trigger);
+            return true;
         }
     }
Index: /trunk/src/gui/kernel/qsoftkeymanager_s60_p.h
===================================================================
--- /trunk/src/gui/kernel/qsoftkeymanager_s60_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qsoftkeymanager_s60_p.h	(revision 769)
@@ -54,4 +54,5 @@
 //
 
+#include "qbitarray.h"
 #include "private/qobject_p.h"
 #include "private/qsoftkeymanager_common_p.h"
@@ -78,4 +79,5 @@
 
 private:
+    void tryDisplayMenuBarL();
     bool skipCbaUpdate();
     void ensureCbaVisibilityAndResponsiviness(CEikButtonGroupContainer &cba);
@@ -99,5 +101,5 @@
     QHash<int, QAction*> realSoftKeyActions;
     QSize cachedCbaIconSize[4];
-    bool skipNextUpdate;
+    QBitArray cbaHasImage;
 };
 
Index: /trunk/src/gui/kernel/qsound.cpp
===================================================================
--- /trunk/src/gui/kernel/qsound.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qsound.cpp	(revision 769)
@@ -155,4 +155,5 @@
     \o A built-in mixing sound server is used, accessing \c /dev/dsp
     directly. Only the WAVE format is supported.
+    \row
     \o Symbian
     \o CMdaAudioPlayerUtility is used. All formats that Symbian OS or devices support
Index: /trunk/src/gui/kernel/qsound_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qsound_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qsound_mac.mm	(revision 769)
@@ -175,4 +175,5 @@
     QMacSoundDelegate * const delegate = [[QMacSoundDelegate alloc] initWithQSound:qSound:this];
     [nsSound setDelegate:delegate];
+    [nsFileName release];
     return nsSound;
 }
Index: /trunk/src/gui/kernel/qsound_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qsound_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qsound_s60.cpp	(revision 769)
@@ -52,5 +52,5 @@
 
 #include <e32std.h>
-#include <MdaAudioSamplePlayer.h>
+#include <mdaaudiosampleplayer.h>
 
 QT_BEGIN_NAMESPACE
Index: /trunk/src/gui/kernel/qt_cocoa_helpers_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qt_cocoa_helpers_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qt_cocoa_helpers_mac.mm	(revision 769)
@@ -144,4 +144,7 @@
 void macWindowFade(void * /*OSWindowRef*/ window, float durationSeconds)
 {
+#ifdef QT_MAC_USE_COCOA
+    QMacCocoaAutoReleasePool pool;
+#endif
     OSWindowRef wnd = static_cast<OSWindowRef>(window);
     if (wnd) {
@@ -1160,7 +1163,18 @@
     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;
+}
+
+void qt_mac_dispatchPendingUpdateRequests(QWidget *widget)
+{
+    if (!widget)
+        return;
+#ifndef QT_MAC_USE_COCOA
+    HIViewRender(qt_mac_nativeview_for(widget));
+#else
+    [qt_mac_nativeview_for(widget) displayIfNeeded];
+#endif
 }
 
@@ -1279,3 +1293,16 @@
 #endif
 
+QMacCocoaAutoReleasePool::QMacCocoaAutoReleasePool()
+{
+#ifndef QT_MAC_USE_COCOA
+    NSApplicationLoad();
+#endif
+    pool = (void*)[[NSAutoreleasePool alloc] init];
+}
+
+QMacCocoaAutoReleasePool::~QMacCocoaAutoReleasePool()
+{
+    [(NSAutoreleasePool*)pool release];
+}
+
 QT_END_NAMESPACE
Index: /trunk/src/gui/kernel/qt_s60_p.h
===================================================================
--- /trunk/src/gui/kernel/qt_s60_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qt_s60_p.h	(revision 769)
@@ -69,10 +69,10 @@
 
 #ifdef Q_WS_S60
-#include <aknutils.h>               // AknLayoutUtils
+#include <AknUtils.h>               // AknLayoutUtils
 #include <avkon.hrh>                // EEikStatusPaneUidTitle
 #include <akntitle.h>               // CAknTitlePane
 #include <akncontext.h>             // CAknContextPane
 #include <eikspane.h>               // CEikStatusPane
-#include <aknpopupfader.h>          // MAknFadedComponent and TAknPopupFader
+#include <AknPopupFader.h>          // MAknFadedComponent and TAknPopupFader
 #endif
 
@@ -123,4 +123,5 @@
     int supportsPremultipliedAlpha : 1;
     int avkonComponentsSupportTransparency : 1;
+    int menuBeingConstructed : 1;
     QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type
     static inline void updateScreenSize();
@@ -155,5 +156,5 @@
 class QSymbianControl : public CCoeControl, public QAbstractLongTapObserver
 #ifdef Q_WS_S60
-, public MAknFadedComponent
+, public MAknFadedComponent, public MEikStatusPaneObserver
 #endif
 {
@@ -183,4 +184,5 @@
 #ifdef Q_WS_S60
     void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); }
+    void HandleStatusPaneSizeChange();
 
 protected: // from MAknFadedComponent
@@ -213,4 +215,5 @@
     void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event);
 #endif
+    void handleClientAreaChange();
 
 private:
Index: /trunk/src/gui/kernel/qt_x11_p.h
===================================================================
--- /trunk/src/gui/kernel/qt_x11_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qt_x11_p.h	(revision 769)
@@ -676,4 +676,7 @@
         XWacomEraser,
 
+        XTabletStylus,
+        XTabletEraser,
+
         NPredefinedAtoms,
 
Index: /trunk/src/gui/kernel/qtooltip.cpp
===================================================================
--- /trunk/src/gui/kernel/qtooltip.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qtooltip.cpp	(revision 769)
@@ -169,7 +169,7 @@
 QTipLabel::QTipLabel(const QString &text, QWidget *w)
 #ifndef QT_NO_STYLE_STYLESHEET
-    : QLabel(w, Qt::ToolTip), styleSheetParent(0), widget(0)
+    : QLabel(w, Qt::ToolTip | Qt::BypassGraphicsProxyWidget), styleSheetParent(0), widget(0)
 #else
-    : QLabel(w, Qt::ToolTip), widget(0)
+    : QLabel(w, Qt::ToolTip | Qt::BypassGraphicsProxyWidget), widget(0)
 #endif
 {
@@ -369,5 +369,14 @@
 
 #ifdef Q_WS_MAC
-    QRect screen = QApplication::desktop()->availableGeometry(getTipScreen(pos, w));
+    // When in full screen mode, there is no Dock nor Menu so we can use
+    // the whole screen for displaying the tooltip. However when not in
+    // full screen mode we need to save space for the dock, so we use
+    // availableGeometry instead.
+    extern bool qt_mac_app_fullscreen; //qapplication_mac.mm
+    QRect screen;
+    if(qt_mac_app_fullscreen)
+        screen = QApplication::desktop()->screenGeometry(getTipScreen(pos, w));
+    else
+        screen = QApplication::desktop()->availableGeometry(getTipScreen(pos, w));
 #else
     QRect screen = QApplication::desktop()->screenGeometry(getTipScreen(pos, w));
Index: /trunk/src/gui/kernel/qwhatsthis.cpp
===================================================================
--- /trunk/src/gui/kernel/qwhatsthis.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qwhatsthis.cpp	(revision 769)
@@ -144,5 +144,5 @@
 */
 
-extern void qDeleteInEventHandler(QObject *o);
+Q_DECL_IMPORT extern void qDeleteInEventHandler(QObject *o);
 
 class QWhatsThat : public QWidget
Index: /trunk/src/gui/kernel/qwidget.cpp
===================================================================
--- /trunk/src/gui/kernel/qwidget.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qwidget.cpp	(revision 769)
@@ -123,4 +123,8 @@
 #include "private/qgesturemanager_p.h"
 
+#ifdef QT_KEYPAD_NAVIGATION
+#include "qtabwidget.h" // Needed in inTabWidget()
+#endif // QT_KEYPAD_NAVIGATION
+
 // widget/widget data creation count
 //#define QWIDGET_EXTRA_DEBUG
@@ -197,4 +201,5 @@
       , isScrolled(0)
       , isMoved(0)
+      , isGLWidget(0)
       , usesDoubleBufferedGLContext(0)
 #if defined(Q_WS_X11)
@@ -207,5 +212,4 @@
 #elif defined(Q_WS_MAC)
       , needWindowChange(0)
-      , isGLWidget(0)
       , window_event(0)
       , qd_hd(0)
@@ -1446,4 +1450,5 @@
 #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
@@ -1455,5 +1460,7 @@
         delete d->extra->topextra->backingStore;
         d->extra->topextra->backingStore = 0;
-    } else if (QWidgetBackingStore *bs = d->maybeBackingStore()) {
+    }
+#endif
+    if (QWidgetBackingStore *bs = d->maybeBackingStore()) {
         bs->removeDirtyWidget(this);
         if (testAttribute(Qt::WA_StaticContents))
@@ -1487,6 +1494,10 @@
         QWidgetPrivate::allWidgets->remove(this);
 
-    QEvent e(QEvent::Destroy);
-    QCoreApplication::sendEvent(this, &e);
+    QT_TRY {
+        QEvent e(QEvent::Destroy);
+        QCoreApplication::sendEvent(this, &e);
+    } QT_CATCH(const std::exception&) {
+        // if this fails we can't do anything about it but at least we are not allowed to throw.
+    }
 }
 
@@ -1676,5 +1687,11 @@
         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
     }
 }
@@ -1684,6 +1701,13 @@
     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
+    }
 }
 
@@ -3368,5 +3392,5 @@
     appear on screen. This also applies to windows.
 
-    \sa pos, geometry, minimumSize, maximumSize, resizeEvent()
+    \sa pos, geometry, minimumSize, maximumSize, resizeEvent(), adjustSize()
 */
 
@@ -6110,4 +6134,6 @@
             if (previousProxyFocus && previousProxyFocus->focusProxy())
                 previousProxyFocus = previousProxyFocus->focusProxy();
+            if (previousProxyFocus == this && !topData->proxyWidget->d_func()->proxyIsGivingFocus)
+                return;
         }
     }
@@ -7522,4 +7548,21 @@
         if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden))
             continue;
+#ifdef QT_MAC_USE_COCOA
+        // Before doing anything we need to make sure that we don't leave anything in a non-consistent state.
+        // When hiding a widget we need to make sure that no mouse_down events are active, because
+        // the mouse_up event will never be received by a hidden widget or one of its descendants.
+        // The solution is simple, before going through with this we check if there are any mouse_down events in
+        // progress, if so we check if it is related to this widget or not. If so, we just reset the mouse_down and
+        // then we continue.
+        // In X11 and Windows we send a mouse_release event, however we don't do that here because we were already
+        // ignoring that from before. I.e. Carbon did not send the mouse release event, so we will not send the
+        // mouse release event. There are two ways to interpret this:
+        // 1. If we don't send the mouse release event, the widget might get into an inconsistent state, i.e. it
+        // might be waiting for a release event that will never arrive.
+        // 2. If we send the mouse release event, then the widget might decide to trigger an action that is not
+        // supposed to trigger because it is not visible.
+        if(widget == qt_button_down)
+            qt_button_down = 0;
+#endif // QT_MAC_USE_COCOA
         if (spontaneous)
             widget->setAttribute(Qt::WA_Mapped, false);
@@ -7916,11 +7959,14 @@
     if(w && w->isWindow() && w->isVisible() && w->isEnabled()) {
         LONG dwStyle = GetWindowLong(w->winId(), GWL_STYLE);
+        LONG newStyle = dwStyle;
         if (setStyle)
-            dwStyle |= WS_DISABLED;
+            newStyle |= WS_DISABLED;
         else
-            dwStyle &= ~WS_DISABLED;
-        SetWindowLong(w->winId(), GWL_STYLE, dwStyle);
-        // we might need to repaint in some situations (eg. menu)
-        w->repaint();
+            newStyle &= ~WS_DISABLED;
+        if (newStyle != dwStyle) {
+            SetWindowLong(w->winId(), GWL_STYLE, newStyle);
+            // we might need to repaint in some situations (eg. menu)
+            w->repaint();
+        }
     }
 }
@@ -8262,5 +8308,5 @@
 
 #ifdef QT_SOFTKEYS_ENABLED
-        if (isWindow() && isActiveWindow())
+        if (isWindow())
             QSoftKeyManager::updateSoftKeys();
 #endif
@@ -11731,4 +11777,43 @@
     return targetWidget;
 }
+
+/*!
+    \internal
+
+    Tells us if it there is currently a reachable widget by keypad navigation in
+    a certain \a orientation.
+    If no navigation is possible, occuring key events in that \a orientation may
+    be used to interact with the value in the focussed widget, even though it
+    currently has not the editFocus.
+
+    \sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus()
+*/
+bool QWidgetPrivate::canKeypadNavigate(Qt::Orientation orientation)
+{
+    return orientation == Qt::Horizontal?
+            (QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionEast)
+                    || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionWest))
+            :(QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionNorth)
+                    || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionSouth));
+}
+/*!
+    \internal
+
+    Checks, if the \a widget is inside a QTabWidget. If is is inside
+    one, left/right key events will be used to switch between tabs in keypad
+    navigation. If there is no QTabWidget, the horizontal key events can be used
+to
+    interact with the value in the focussed widget, even though it currently has
+    not the editFocus.
+
+    \sa QWidget::hasEditFocus()
+*/
+bool QWidgetPrivate::inTabWidget(QWidget *widget)
+{
+    for (QWidget *tabWidget = widget; tabWidget; tabWidget = tabWidget->parentWidget())
+        if (qobject_cast<const QTabWidget*>(tabWidget))
+            return true;
+    return false;
+}
 #endif
 
Index: /trunk/src/gui/kernel/qwidget_mac.mm
===================================================================
--- /trunk/src/gui/kernel/qwidget_mac.mm	(revision 768)
+++ /trunk/src/gui/kernel/qwidget_mac.mm	(revision 769)
@@ -153,4 +153,5 @@
 QWidget *mac_mouse_grabber = 0;
 QWidget *mac_keyboard_grabber = 0;
+extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
 
 #ifndef QT_MAC_USE_COCOA
@@ -563,4 +564,23 @@
     // below 'stays on top' windows. Add 1 to get above pure stay-on-top windows.
     qt_mac_set_window_group(window, Qt::Popup, qt_mac_get_group_level(kOverlayWindowClass)+1);
+}
+#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
@@ -848,5 +868,4 @@
                 QApplication::sendSpontaneousEvent(widget, &e);
             }
-            extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
             qt_button_down = 0;
         } else if(ekind == kEventWindowCollapsed) {
@@ -876,5 +895,4 @@
             QEvent e(QEvent::Hide);
             QApplication::sendSpontaneousEvent(widget, &e);
-            extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
             qt_button_down = 0;
         } else if(ekind == kEventWindowToolbarSwitchMode) {
@@ -1250,4 +1268,9 @@
                     if(widget->testAttribute(Qt::WA_WState_InPaintEvent))
                         qWarning("QWidget::repaint: Recursive repaint detected");
+                    if (widget->isWindow() && !widget->d_func()->isOpaque
+                        && !widget->testAttribute(Qt::WA_MacBrushedMetal)) {
+                        QRect qrgnRect = qrgn.boundingRect();
+                        CGContextClearRect(cg, CGRectMake(qrgnRect.x(), qrgnRect.y(), qrgnRect.width(), qrgnRect.height()));
+                    }
 
                     QPoint redirectionOffset(0, 0);
@@ -1299,11 +1322,4 @@
                             widget->d_func()->restoreRedirected();
                     }
-
-                    if (widget->isWindow() && !widget->d_func()->isOpaque
-                           && !widget->testAttribute(Qt::WA_MacBrushedMetal)) {
-                        QRect qrgnRect = qrgn.boundingRect();
-                        CGContextClearRect(cg, CGRectMake(qrgnRect.x(), qrgnRect.y(), qrgnRect.width(), qrgnRect.height()));
-                    }
-
 
                     if(!HIObjectIsOfClass((HIObjectRef)hiview, kObjectQWidget))
@@ -1503,5 +1519,4 @@
                 qt_event_request_window_change(widget);
                 if (!HIViewIsVisible(HIViewRef(widget->winId()))) {
-                    extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
                     if (widget == qt_button_down)
                         qt_button_down = 0;
@@ -1512,5 +1527,4 @@
     case kEventClassMouse: {
         bool send_to_app = false;
-        extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
         if(qt_button_down)
             send_to_app = true;
@@ -3389,5 +3403,4 @@
     if((q->windowType() == Qt::Desktop)) //you can't hide the desktop!
         return;
-
     QMacCocoaAutoReleasePool pool;
     if(q->isWindow()) {
@@ -3511,4 +3524,6 @@
     if (!QWidget::mouseGrabber()){
         QWidget *enterWidget = QApplication::widgetAt(QCursor::pos());
+        if (enterWidget && enterWidget->data->in_destructor)
+            enterWidget = 0;
         QApplicationPrivate::dispatchEnterLeave(enterWidget, qt_mouseover);
         qt_mouseover = enterWidget;
@@ -4455,6 +4470,18 @@
     }
 
+    // ### Scroll the dirty regions as well, the following is not correct.
+    QRegion displayRegion = r.isNull() ? dirtyOnWidget : (dirtyOnWidget & r);
+    const QVector<QRect> &rects = dirtyOnWidget.rects();
+    const QVector<QRect>::const_iterator end = rects.end();
+    QVector<QRect>::const_iterator it = rects.begin();
+    while (it != end) {
+	const QRect rect = *it;
+	const NSRect dirtyRect = NSMakeRect(rect.x() + dx, rect.y() + dy,
+		rect.width(), rect.height());
+	[view setNeedsDisplayInRect:dirtyRect];
+	++it;
+    }
+
     NSSize deltaSize = NSMakeSize(dx, dy);
-    [view translateRectsNeedingDisplayInRect:scrollRect by:deltaSize];
     [view scrollRect:scrollRect by:deltaSize];
     [view setNeedsDisplayInRect:deltaXRect];
@@ -4656,6 +4683,8 @@
         return;
 
-    if (extra->hasMask && extra->maskBits.size() != q->size()) {
-        extra->maskBits = QImage(q->size(), QImage::Format_Mono);
+    if (extra->hasMask) {
+        if(extra->maskBits.size() != q->size()) {
+            extra->maskBits = QImage(q->size(), QImage::Format_Mono);
+        }
         extra->maskBits.fill(QColor(Qt::color1).rgba());
         extra->maskBits.setNumColors(2);
Index: /trunk/src/gui/kernel/qwidget_p.h
===================================================================
--- /trunk/src/gui/kernel/qwidget_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qwidget_p.h	(revision 769)
@@ -242,4 +242,13 @@
 
     /**
+     * If this bit is set, each native widget receives the signals from the
+     * Symbian control immediately before and immediately after draw ops are
+     * sent to the window server for this control:
+     *      void beginNativePaintEvent(const QRect &paintRect);
+     *      void endNativePaintEvent(const QRect &paintRect);
+     */
+    uint receiveNativePaintEvents : 1;
+
+    /**
      * Defines the behaviour of QSymbianControl::Draw.
      */
@@ -266,14 +275,5 @@
     };
 
-    NativePaintMode nativePaintMode : 2;
-
-    /**
-     * If this bit is set, each native widget receives the signals from the
-     * Symbian control immediately before and immediately after draw ops are
-     * sent to the window server for this control:
-     *      void beginNativePaintEvent(const QRect &paintRect);
-     *      void endNativePaintEvent(const QRect &paintRect);
-     */
-    uint receiveNativePaintEvents : 1;
+    NativePaintMode nativePaintMode;
 
 #elif defined(Q_WS_PM) // <----------------------------------------------------- PM
@@ -483,4 +483,6 @@
     static bool navigateToDirection(Direction direction);
     static QWidget *widgetInNavigationDirection(Direction direction);
+    static bool canKeypadNavigate(Qt::Orientation orientation);
+    static bool inTabWidget(QWidget *widget);
 #endif
 
@@ -694,4 +696,5 @@
     uint isScrolled : 1;
     uint isMoved : 1;
+    uint isGLWidget : 1;
     uint usesDoubleBufferedGLContext : 1;
 
@@ -734,5 +737,4 @@
     // This is new stuff
     uint needWindowChange : 1;
-    uint isGLWidget : 1;
 
     // Each wiget keeps a list of all its child and grandchild OpenGL widgets.
Index: /trunk/src/gui/kernel/qwidget_s60.cpp
===================================================================
--- /trunk/src/gui/kernel/qwidget_s60.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qwidget_s60.cpp	(revision 769)
@@ -388,14 +388,4 @@
             drawableWindow->EnableVisibilityChangeEvents();
 
-            if (!isOpaque) {
-                RWindow *const window = static_cast<RWindow *>(drawableWindow);
-#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
-                window->SetSurfaceTransparency(true);
-#else
-                const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA));
-                if (window->SetTransparencyAlphaChannel() == KErrNone)
-                    window->SetBackgroundColor(TRgb(255, 255, 255, 0));
-#endif
-            }
         }
 
@@ -409,4 +399,7 @@
         // this generates a WinIdChanged event.
         setWinId(control.take());
+
+        if (!desktop)
+            s60UpdateIsOpaque(); // must be called after setWinId()
 
     } else if (q->testAttribute(Qt::WA_NativeWindow) || paintOnScreen()) { // create native child widget
@@ -488,4 +481,42 @@
 
          QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId());
+
+#ifdef Q_WS_S60
+        // Lazily initialize the S60 screen furniture when the first window is shown.
+        if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)
+                && !S60->buttonGroupContainer() && !S60->statusPane()) {
+
+            bool isFullscreen = q->windowState() & Qt::WindowFullScreen;
+
+            if (!q->testAttribute(Qt::WA_DontShowOnScreen)) {
+
+                // Create the status pane and CBA here
+                CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi());
+                MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory();
+                TRAP_IGNORE(factory->ReadAppInfoResourceL(0, ui));
+                if (S60->buttonGroupContainer())
+                    S60->buttonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+
+                if (S60->statusPane()) {
+                    // Use QDesktopWidget as the status pane observer to proxy for the AppUi.
+                    // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver.
+                    QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId());
+                    S60->statusPane()->SetObserver(desktopControl);
+
+                    // Hide the status pane if fullscreen OR
+                    // Fill client area if maximized OR
+                    // Put window below status pane unless the window has an explicit position.
+                    if (isFullscreen) {
+                        S60->statusPane()->MakeVisible(false);
+                    } else if (q->windowState() & Qt::WindowMaximized) {
+                        TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+                        id->SetExtent(r.iTl, r.Size());
+                    } else if (!q->testAttribute(Qt::WA_Moved)) {
+                        id->SetPosition(static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl);
+                    }
+                }
+            }
+        }
+#endif
 
         id->MakeVisible(true);
@@ -1038,4 +1069,15 @@
 }
 
+static Qt::WindowStates effectiveState(Qt::WindowStates state)
+{
+    if (state & Qt::WindowMinimized)
+        return Qt::WindowMinimized;
+    else if (state & Qt::WindowFullScreen)
+        return Qt::WindowFullScreen;
+    else if (state & Qt::WindowMaximized)
+        return Qt::WindowMaximized;
+    return Qt::WindowNoState;
+}
+
 void QWidget::setWindowState(Qt::WindowStates newstate)
 {
@@ -1043,8 +1085,19 @@
 
     Qt::WindowStates oldstate = windowState();
-    if (oldstate == newstate)
+
+    const TBool isFullscreen = newstate & Qt::WindowFullScreen;
+    const TBool cbaRequested = windowFlags() & Qt::WindowSoftkeysVisibleHint;
+    const TBool cbaVisible = CEikButtonGroupContainer::Current() ? true : false;
+    const TBool softkeyVisibilityChange = isFullscreen && (cbaRequested != cbaVisible);
+
+    if (oldstate == newstate && !softkeyVisibilityChange)
         return;
 
     if (isWindow()) {
+        createWinId();
+        Q_ASSERT(testAttribute(Qt::WA_WState_Created));
+
+        const bool wasResized = testAttribute(Qt::WA_Resized);
+        const bool wasMoved = testAttribute(Qt::WA_Moved);
 
         QSymbianControl *window = static_cast<QSymbianControl *>(effectiveWinId());
@@ -1059,34 +1112,56 @@
 #ifdef Q_WS_S60
         // Hide window decoration when switching to fullsccreen / minimized otherwise show decoration.
-        // The window decoration visibility has to be changed before doing actual window state 
-        // change since in that order the availableGeometry will return directly the right size and 
+        // The window decoration visibility has to be changed before doing actual window state
+        // change since in that order the availableGeometry will return directly the right size and
         // we will avoid unnecessarty redraws
-        CEikStatusPane* statusPane = S60->statusPane();
-        CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer();
-        TBool visible = !(newstate & (Qt::WindowFullScreen | Qt::WindowMinimized)); 
+        CEikStatusPane *statusPane = S60->statusPane();
+        CEikButtonGroupContainer *buttonGroup = S60->buttonGroupContainer();
+        TBool visible = !(newstate & (Qt::WindowFullScreen | Qt::WindowMinimized));
         if (statusPane)
             statusPane->MakeVisible(visible);
-        if (buttonGroup)
-            buttonGroup->MakeVisible(visible);
+        if (buttonGroup) {
+            // Visibility
+            buttonGroup->MakeVisible(visible || (isFullscreen && cbaRequested));
+        }
 #endif // Q_WS_S60
 
-        createWinId();
-        Q_ASSERT(testAttribute(Qt::WA_WState_Created));
         // Ensure the initial size is valid, since we store it as normalGeometry below.
-        if (!testAttribute(Qt::WA_Resized) && !isVisible())
+        if (!wasResized && !isVisible())
             adjustSize();
 
         QTLWExtra *top = d->topData();
-        const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry;
-
-        if (newstate & Qt::WindowFullScreen)
-            setGeometry(qApp->desktop()->screenGeometry(this));
-        else if (newstate & Qt::WindowMaximized)
-            setGeometry(qApp->desktop()->availableGeometry(this));
-        else
+        QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry;
+
+        const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint;
+        if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) {
+            window->SetExtentToWholeScreen();
+        } else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) {
+            TRect maxExtent = qt_QRect2TRect(qApp->desktop()->availableGeometry(this));
+            window->SetExtent(maxExtent.iTl, maxExtent.Size());
+        } else {
+#ifdef Q_WS_S60
+            // With delayed creation of S60 app panes, the normalGeometry calculated above is not
+            // accurate because it did not consider the status pane. This means that when returning
+            // normal mode after showing the status pane, the geometry would overlap so we should
+            // move it if it never had an explicit position.
+            if (!wasMoved && statusPane && visible) {
+                TPoint tl = static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl;
+                normalGeometry.setTopLeft(QPoint(tl.iX, tl.iY));
+            }
+#endif
             setGeometry(normalGeometry);
+        }
 
         //restore normal geometry
         top->normalGeometry = normalGeometry;
+
+        // FixMe QTBUG-8977
+        // In some platforms, WA_Resized and WA_Moved are also not set when application window state is
+        // anything else than normal. In Symbian we can restore them only for normal window state since
+        // restoring for other modes, will make fluidlauncher to be launched in wrong size (200x100)
+        if (effectiveState(newstate) == Qt::WindowNoState) {
+            setAttribute(Qt::WA_Resized, wasResized);
+            setAttribute(Qt::WA_Moved, wasMoved);
+        }
     }
 
@@ -1221,6 +1296,8 @@
     if (!qt_nograb() && QWidgetPrivate::mouseGrabber == this) {
         Q_ASSERT(testAttribute(Qt::WA_WState_Created));
-        WId id = effectiveWinId();
-        id->SetPointerCapture(false);
+        if(!window()->isModal()) {
+            WId id = effectiveWinId();
+            id->SetPointerCapture(false);
+        }
         QWidgetPrivate::mouseGrabber = 0;
 #ifndef QT_NO_CURSOR
Index: /trunk/src/gui/kernel/qwidget_win.cpp
===================================================================
--- /trunk/src/gui/kernel/qwidget_win.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qwidget_win.cpp	(revision 769)
@@ -2053,4 +2053,6 @@
         return;
 
+    if (!QApplicationPrivate::HasTouchSupport)
+        return;
     QApplicationPrivate *qAppPriv = QApplicationPrivate::instance();
     if (!qAppPriv->SetGestureConfig)
Index: /trunk/src/gui/kernel/qwidget_x11.cpp
===================================================================
--- /trunk/src/gui/kernel/qwidget_x11.cpp	(revision 768)
+++ /trunk/src/gui/kernel/qwidget_x11.cpp	(revision 769)
@@ -347,9 +347,4 @@
 }
 
-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)
 {
@@ -364,36 +359,40 @@
         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
-        }
-    }
-
-    while (!XCheckTypedWindowEvent(X11->display, w->effectiveWinId(), MapNotify, &ev)) {
+    WId winid = w->internalWinId();
+
+    // first deliver events that are already in the local queue
+    QApplication::sendPostedEvents();
+
+    // the normal sequence is:
+    //  ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose
+    // with X11BypassWindowManagerHint:
+    //  ConfigureNotify ... MapNotify ... Expose
+
+    enum State {
+        Initial, Mapped
+    } state = Initial;
+
+    do {
+        if (XEventsQueued(X11->display, QueuedAlready)) {
+            XNextEvent(X11->display, &ev);
+            qApp->x11ProcessEvent(&ev);
+
+            switch (state) {
+            case Initial:
+                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
-    }
-
-    qApp->x11ProcessEvent(&ev);
-
-    // 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)) {
-            qApp->x11ProcessEvent(&ev);
-            if (ev.type == Expose)
-                return;
-        }
-        if (t.elapsed() > maximumWaitTime)
-            return;
-        qApp->syncX(); // non-busy wait
-    }
+    } while(1);
 }
 
Index: /trunk/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h
===================================================================
--- /trunk/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h	(revision 768)
+++ /trunk/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h	(revision 769)
@@ -55,4 +55,36 @@
 
 #include <QGestureRecognizer>
+#include <objbase.h>
+
+class IInkRectangle;
+class TabletHardwareCapabilities;
+class TabletPropertyMetricUnit;
+DECLARE_INTERFACE_(IInkTablet, IDispatch)
+{
+	STDMETHOD(get_Name)(THIS_ BSTR *Name) PURE;
+	STDMETHOD(get_PlugAndPlayId)(THIS_ BSTR *Id) PURE;
+	STDMETHOD(get_MaximumInputRectangle)(THIS_ IInkRectangle **Rectangle) PURE;
+	STDMETHOD(get_HardwareCapabilities)(THIS_ TabletHardwareCapabilities *Capabilities) PURE;
+	STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName) PURE;
+	STDMETHOD(GetPropertyMetrics)(THIS_ BSTR propertyName, long *Minimum, long *Maximum, TabletPropertyMetricUnit *Units, float *Resolution) PURE;
+};
+enum TabletDeviceKind
+{
+	TDK_Mouse = 0,
+	TDK_Pen   = 1,
+	TDK_Touch = 2
+};
+DECLARE_INTERFACE_(IInkTablet2, IDispatch)
+{
+	STDMETHOD(get_DeviceKind)(THIS_ TabletDeviceKind *Kind) PURE;
+};
+DECLARE_INTERFACE_(IInkTablets, IDispatch)
+{
+	STDMETHOD(get_Count)(THIS_ long *Count) PURE;
+	STDMETHOD(get__NewEnum)(THIS_ IUnknown **_NewEnum) PURE;
+	STDMETHOD(get_DefaultTablet)(THIS_ IInkTablet **DefaultTablet) PURE;
+	STDMETHOD(Item)(THIS_ long Index, IInkTablet **Tablet) PURE;
+	STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE;
+};
 
 QT_BEGIN_NAMESPACE
Index: /trunk/src/gui/painting/qbackingstore.cpp
===================================================================
--- /trunk/src/gui/painting/qbackingstore.cpp	(revision 768)
+++ /trunk/src/gui/painting/qbackingstore.cpp	(revision 769)
@@ -353,4 +353,8 @@
     dirtyOnScreen += toClean;
 
+#ifdef Q_WS_QWS
+    toClean.translate(tlwOffset);
+#endif
+
 #ifdef QT_NO_PAINT_DEBUG
     windowSurface->beginPaint(toClean);
@@ -767,5 +771,10 @@
         return;
 
-    windowSurface->beginPaint(decorationRegion);
+    //### The QWS decorations do not always paint the pixels they promise to paint.
+    // This causes painting problems with QWSMemorySurface. Since none of the other
+    // window surfaces actually use the region, passing an empty region is a safe
+    // workaround.
+
+    windowSurface->beginPaint(QRegion());
 
     QPaintEngine *engine = windowSurface->paintDevice()->paintEngine();
Index: /trunk/src/gui/painting/qbrush.cpp
===================================================================
--- /trunk/src/gui/painting/qbrush.cpp	(revision 768)
+++ /trunk/src/gui/painting/qbrush.cpp	(revision 769)
@@ -161,6 +161,5 @@
 }
 
-Q_GUI_EXPORT
-QImage qt_imageForBrush(int brushStyle, bool invert)
+Q_GUI_EXPORT QImage qt_imageForBrush(int brushStyle, bool invert)
 {
     return qt_brushPatternImageCache()->getImage(brushStyle, invert);
@@ -990,5 +989,6 @@
      "RadialGradientPattern",
      "ConicalGradientPattern",
-     "TexturePattern"
+     0, 0, 0, 0, 0, 0,
+     "TexturePattern" // 24
     };
 
Index: /trunk/src/gui/painting/qcups.cpp
===================================================================
--- /trunk/src/gui/painting/qcups.cpp	(revision 768)
+++ /trunk/src/gui/painting/qcups.cpp	(revision 769)
@@ -378,7 +378,6 @@
         return false;
     const char *ppdFile = _cupsGetPPD(printerName);
-    if (ppdFile != 0)
-        unlink(ppdFile);
-    return ppdFile != 0;
+    unlink(ppdFile);
+    return (ppdFile != 0);
 }
 
Index: /trunk/src/gui/painting/qdrawhelper.cpp
===================================================================
--- /trunk/src/gui/painting/qdrawhelper.cpp	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper.cpp	(revision 769)
@@ -1268,30 +1268,26 @@
   d = d * cia
 */
+#define comp_func_Clear_impl(dest, length, const_alpha)\
+{\
+    if (const_alpha == 255) {\
+        QT_MEMFILL_UINT(dest, length, 0);\
+    } else {\
+        int ialpha = 255 - const_alpha;\
+        PRELOAD_INIT(dest)\
+        for (int i = 0; i < length; ++i) {\
+            PRELOAD_COND(dest)\
+            dest[i] = BYTE_MUL(dest[i], ialpha);\
+        }\
+    }\
+}
+
 static void QT_FASTCALL comp_func_solid_Clear(uint *dest, int length, uint, uint const_alpha)
 {
-    if (const_alpha == 255) {
-        QT_MEMFILL_UINT(dest, length, 0);
-    } else {
-        int ialpha = 255 - const_alpha;
-        PRELOAD_INIT(dest)
-        for (int i = 0; i < length; ++i) {
-            PRELOAD_COND(dest)
-            dest[i] = BYTE_MUL(dest[i], ialpha);
-        }
-    }
+    comp_func_Clear_impl(dest, length, const_alpha);
 }
 
 static void QT_FASTCALL comp_func_Clear(uint *dest, const uint *, int length, uint const_alpha)
 {
-    if (const_alpha == 255) {
-        QT_MEMFILL_UINT(dest, length, 0);
-    } else {
-        int ialpha = 255 - const_alpha;
-        PRELOAD_INIT(dest)
-        for (int i = 0; i < length; ++i) {
-            PRELOAD_COND(dest)
-            dest[i] = BYTE_MUL(dest[i], ialpha);
-        }
-    }
+    comp_func_Clear_impl(dest, length, const_alpha);
 }
 
@@ -2409,5 +2405,9 @@
         return (dst * sa * 255 + da * (src2 - sa) * ((((16 * dst_np - 12 * 255) * dst_np + 3 * 65025) * dst_np) / 65025) + temp) / 65025;
     else {
+#   ifdef Q_CC_RVCT // needed to avoid compiler crash in RVCT 2.2
+        return (dst * sa * 255 + da * (src2 - sa) * (qIntSqrtInt(dst_np * 255) - dst_np) + temp) / 65025;
+#   else
         return (dst * sa * 255 + da * (src2 - sa) * (int(sqrt(qreal(dst_np * 255))) - dst_np) + temp) / 65025;
+#   endif
     }
 }
@@ -7175,7 +7175,7 @@
 
         int a = qGray(coverage);
-        sr = qt_div_255(sr * a);
-        sg = qt_div_255(sg * a);
-        sb = qt_div_255(sb * a);
+        sr = qt_div_255(qt_pow_rgb_invgamma[sr] * a);
+        sg = qt_div_255(qt_pow_rgb_invgamma[sg] * a);
+        sb = qt_div_255(qt_pow_rgb_invgamma[sb] * a);
 
         int ia = 255 - a;
@@ -8093,18 +8093,41 @@
         }
 #endif // 3DNOW
-        extern void qt_blend_rgb32_on_rgb32_sse(uchar *destPixels, int dbpl,
-                                                const uchar *srcPixels, int sbpl,
-                                                int w, int h,
-                                                int const_alpha);
-        extern void qt_blend_argb32_on_argb32_sse(uchar *destPixels, int dbpl,
-                                                  const uchar *srcPixels, int sbpl,
-                                                  int w, int h,
-                                                  int const_alpha);
-
-        qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse;
-        qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse;
-        qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse;
-        qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse;
-    }
+
+
+#ifdef QT_HAVE_SSE2
+        if (features & SSE2) {
+            extern void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl,
+                                                     const uchar *srcPixels, int sbpl,
+                                                     int w, int h,
+                                                     int const_alpha);
+            extern void qt_blend_argb32_on_argb32_sse2(uchar *destPixels, int dbpl,
+                                                       const uchar *srcPixels, int sbpl,
+                                                       int w, int h,
+                                                       int const_alpha);
+
+
+            qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse2;
+            qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse2;
+            qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse2;
+            qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse2;
+        } else
+#endif
+        {
+            extern void qt_blend_rgb32_on_rgb32_sse(uchar *destPixels, int dbpl,
+                                                    const uchar *srcPixels, int sbpl,
+                                                    int w, int h,
+                                                    int const_alpha);
+            extern void qt_blend_argb32_on_argb32_sse(uchar *destPixels, int dbpl,
+                                                      const uchar *srcPixels, int sbpl,
+                                                      int w, int h,
+                                                      int const_alpha);
+
+
+            qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse;
+            qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse;
+            qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse;
+            qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse;
+        }
+}
 #endif // SSE
 
Index: /trunk/src/gui/painting/qdrawhelper_mmx_p.h
===================================================================
--- /trunk/src/gui/painting/qdrawhelper_mmx_p.h	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper_mmx_p.h	(revision 769)
@@ -147,20 +147,22 @@
   d = d * cia
 */
+#define comp_func_Clear_impl(dest, length, const_alpha)\
+{\
+    if (const_alpha == 255) {\
+        qt_memfill(static_cast<quint32*>(dest), quint32(0), length);\
+    } else {\
+        C_FF; C_80; C_00;\
+        m64 ia = MM::negate(MM::load_alpha(const_alpha));\
+        for (int i = 0; i < length; ++i) {\
+            dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), ia));\
+        }\
+        MM::end();\
+    }\
+}
+
 template <class MM>
 static void QT_FASTCALL comp_func_solid_Clear(uint *dest, int length, uint, uint const_alpha)
 {
-    if (!length)
-        return;
-
-    if (const_alpha == 255) {
-        qt_memfill(static_cast<quint32*>(dest), quint32(0), length);
-    } else {
-        C_FF; C_80; C_00;
-        m64 ia = MM::negate(MM::load_alpha(const_alpha));
-        for (int i = 0; i < length; ++i) {
-            dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), ia));
-        }
-    }
-    MM::end();
+    comp_func_Clear_impl(dest, length, const_alpha);
 }
 
@@ -168,13 +170,5 @@
 static void QT_FASTCALL comp_func_Clear(uint *dest, const uint *, int length, uint const_alpha)
 {
-    if (const_alpha == 255) {
-        qt_memfill(static_cast<quint32*>(dest), quint32(0), length);
-    } else {
-        C_FF; C_80; C_00;
-        m64 ia = MM::negate(MM::load_alpha(const_alpha));
-        for (int i = 0; i < length; ++i)
-            dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), ia));
-    }
-    MM::end();
+    comp_func_Clear_impl(dest, length, const_alpha);
 }
 
@@ -247,5 +241,8 @@
     if (const_alpha == 255) {
         for (int i = 0; i < length; ++i) {
-            if ((0xff000000 & src[i]) == 0xff000000) {
+            const uint alphaMaskedSource = 0xff000000 & src[i];
+            if (alphaMaskedSource == 0)
+                continue;
+            if (alphaMaskedSource == 0xff000000) {
                 dest[i] = src[i];
             } else {
@@ -258,4 +255,6 @@
         m64 ca = MM::load_alpha(const_alpha);
         for (int i = 0; i < length; ++i) {
+            if ((0xff000000 & src[i]) == 0)
+                continue;
             m64 s = MM::byte_mul(MM::load(src[i]), ca);
             m64 ia = MM::negate(MM::alpha(s));
Index: /trunk/src/gui/painting/qdrawhelper_neon.cpp
===================================================================
--- /trunk/src/gui/painting/qdrawhelper_neon.cpp	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper_neon.cpp	(revision 769)
@@ -49,41 +49,41 @@
 QT_BEGIN_NAMESPACE
 
-static inline int16x8_t qvdiv_255_s16(int16x8_t x, int16x8_t half)
+static inline uint16x8_t qvdiv_255_u16(uint16x8_t x, uint16x8_t half)
 {
     // result = (x + (x >> 8) + 0x80) >> 8
 
-    const int16x8_t temp = vshrq_n_s16(x, 8); // x >> 8
-    const int16x8_t sum_part = vaddq_s16(x, half); // x + 0x80
-    const int16x8_t sum = vaddq_s16(temp, sum_part);
-
-    return vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(sum), 8));
-}
-
-static inline int16x8_t qvbyte_mul_s16(int16x8_t x, int16x8_t alpha, int16x8_t half)
+    const uint16x8_t temp = vshrq_n_u16(x, 8); // x >> 8
+    const uint16x8_t sum_part = vaddq_u16(x, half); // x + 0x80
+    const uint16x8_t sum = vaddq_u16(temp, sum_part);
+
+    return vshrq_n_u16(sum, 8);
+}
+
+static inline uint16x8_t qvbyte_mul_u16(uint16x8_t x, uint16x8_t alpha, uint16x8_t half)
 {
     // t = qRound(x * alpha / 255.0)
 
-    const int16x8_t t = vmulq_s16(x, alpha); // t
-    return qvdiv_255_s16(t, half);
-}
-
-static inline int16x8_t qvinterpolate_pixel_255(int16x8_t x, int16x8_t a, int16x8_t y, int16x8_t b, int16x8_t half)
+    const uint16x8_t t = vmulq_u16(x, alpha); // t
+    return qvdiv_255_u16(t, half);
+}
+
+static inline uint16x8_t qvinterpolate_pixel_255(uint16x8_t x, uint16x8_t a, uint16x8_t y, uint16x8_t b, uint16x8_t half)
 {
     // t = x * a + y * b
 
-    const int16x8_t ta = vmulq_s16(x, a);
-    const int16x8_t tb = vmulq_s16(y, b);
-
-    return qvdiv_255_s16(vaddq_s16(ta, tb), half);
-}
-
-static inline int16x8_t qvsource_over_s16(int16x8_t src16, int16x8_t dst16, int16x8_t half, int16x8_t full)
-{
-    const int16x4_t alpha16_high = vdup_lane_s16(vget_high_s16(src16), 3);
-    const int16x4_t alpha16_low = vdup_lane_s16(vget_low_s16(src16), 3);
-
-    const int16x8_t alpha16 = vsubq_s16(full, vcombine_s16(alpha16_low, alpha16_high));
-
-    return vaddq_s16(src16, qvbyte_mul_s16(dst16, alpha16, half));
+    const uint16x8_t ta = vmulq_u16(x, a);
+    const uint16x8_t tb = vmulq_u16(y, b);
+
+    return qvdiv_255_u16(vaddq_u16(ta, tb), half);
+}
+
+static inline uint16x8_t qvsource_over_u16(uint16x8_t src16, uint16x8_t dst16, uint16x8_t half, uint16x8_t full)
+{
+    const uint16x4_t alpha16_high = vdup_lane_u16(vget_high_u16(src16), 3);
+    const uint16x4_t alpha16_low = vdup_lane_u16(vget_low_u16(src16), 3);
+
+    const uint16x8_t alpha16 = vsubq_u16(full, vcombine_u16(alpha16_low, alpha16_high));
+
+    return vaddq_u16(src16, qvbyte_mul_u16(dst16, alpha16, half));
 }
 
@@ -95,19 +95,19 @@
     const uint *src = (const uint *) srcPixels;
     uint *dst = (uint *) destPixels;
-    int16x8_t half = vdupq_n_s16(0x80);
-    int16x8_t full = vdupq_n_s16(0xff);
+    uint16x8_t half = vdupq_n_u16(0x80);
+    uint16x8_t full = vdupq_n_u16(0xff);
     if (const_alpha == 256) {
         for (int y = 0; y < h; ++y) {
             int x = 0;
             for (; x < w-3; x += 4) {
-                int32x4_t src32 = vld1q_s32((int32_t *)&src[x]);
+                uint32x4_t src32 = vld1q_u32((uint32_t *)&src[x]);
                 if ((src[x] & src[x+1] & src[x+2] & src[x+3]) >= 0xff000000) {
                     // all opaque
-                    vst1q_s32((int32_t *)&dst[x], src32);
+                    vst1q_u32((uint32_t *)&dst[x], src32);
                 } else if (src[x] | src[x+1] | src[x+2] | src[x+3]) {
-                    int32x4_t dst32 = vld1q_s32((int32_t *)&dst[x]);
-
-                    const uint8x16_t src8 = vreinterpretq_u8_s32(src32);
-                    const uint8x16_t dst8 = vreinterpretq_u8_s32(dst32);
+                    uint32x4_t dst32 = vld1q_u32((uint32_t *)&dst[x]);
+
+                    const uint8x16_t src8 = vreinterpretq_u8_u32(src32);
+                    const uint8x16_t dst8 = vreinterpretq_u8_u32(dst32);
 
                     const uint8x8_t src8_low = vget_low_u8(src8);
@@ -117,17 +117,17 @@
                     const uint8x8_t dst8_high = vget_high_u8(dst8);
 
-                    const int16x8_t src16_low = vreinterpretq_s16_u16(vmovl_u8(src8_low));
-                    const int16x8_t dst16_low = vreinterpretq_s16_u16(vmovl_u8(dst8_low));
-
-                    const int16x8_t src16_high = vreinterpretq_s16_u16(vmovl_u8(src8_high));
-                    const int16x8_t dst16_high = vreinterpretq_s16_u16(vmovl_u8(dst8_high));
-
-                    const int16x8_t result16_low = qvsource_over_s16(src16_low, dst16_low, half, full);
-                    const int16x8_t result16_high = qvsource_over_s16(src16_high, dst16_high, half, full);
-
-                    const int32x2_t result32_low = vreinterpret_s32_s8(vmovn_s16(result16_low));
-                    const int32x2_t result32_high = vreinterpret_s32_s8(vmovn_s16(result16_high));
-
-                    vst1q_s32((int32_t *)&dst[x], vcombine_s32(result32_low, result32_high));
+                    const uint16x8_t src16_low = vmovl_u8(src8_low);
+                    const uint16x8_t dst16_low = vmovl_u8(dst8_low);
+
+                    const uint16x8_t src16_high = vmovl_u8(src8_high);
+                    const uint16x8_t dst16_high = vmovl_u8(dst8_high);
+
+                    const uint16x8_t result16_low = qvsource_over_u16(src16_low, dst16_low, half, full);
+                    const uint16x8_t result16_high = qvsource_over_u16(src16_high, dst16_high, half, full);
+
+                    const uint32x2_t result32_low = vreinterpret_u32_u8(vmovn_u16(result16_low));
+                    const uint32x2_t result32_high = vreinterpret_u32_u8(vmovn_u16(result16_high));
+
+                    vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high));
                 }
             }
@@ -144,14 +144,14 @@
     } else if (const_alpha != 0) {
         const_alpha = (const_alpha * 255) >> 8;
-        int16x8_t const_alpha16 = vdupq_n_s16(const_alpha);
+        uint16x8_t const_alpha16 = vdupq_n_u16(const_alpha);
         for (int y = 0; y < h; ++y) {
             int x = 0;
             for (; x < w-3; x += 4) {
                 if (src[x] | src[x+1] | src[x+2] | src[x+3]) {
-                    int32x4_t src32 = vld1q_s32((int32_t *)&src[x]);
-                    int32x4_t dst32 = vld1q_s32((int32_t *)&dst[x]);
-
-                    const uint8x16_t src8 = vreinterpretq_u8_s32(src32);
-                    const uint8x16_t dst8 = vreinterpretq_u8_s32(dst32);
+                    uint32x4_t src32 = vld1q_u32((uint32_t *)&src[x]);
+                    uint32x4_t dst32 = vld1q_u32((uint32_t *)&dst[x]);
+
+                    const uint8x16_t src8 = vreinterpretq_u8_u32(src32);
+                    const uint8x16_t dst8 = vreinterpretq_u8_u32(dst32);
 
                     const uint8x8_t src8_low = vget_low_u8(src8);
@@ -161,20 +161,20 @@
                     const uint8x8_t dst8_high = vget_high_u8(dst8);
 
-                    const int16x8_t src16_low = vreinterpretq_s16_u16(vmovl_u8(src8_low));
-                    const int16x8_t dst16_low = vreinterpretq_s16_u16(vmovl_u8(dst8_low));
-
-                    const int16x8_t src16_high = vreinterpretq_s16_u16(vmovl_u8(src8_high));
-                    const int16x8_t dst16_high = vreinterpretq_s16_u16(vmovl_u8(dst8_high));
-
-                    const int16x8_t srcalpha16_low = qvbyte_mul_s16(src16_low, const_alpha16, half);
-                    const int16x8_t srcalpha16_high = qvbyte_mul_s16(src16_high, const_alpha16, half);
-
-                    const int16x8_t result16_low = qvsource_over_s16(srcalpha16_low, dst16_low, half, full);
-                    const int16x8_t result16_high = qvsource_over_s16(srcalpha16_high, dst16_high, half, full);
-
-                    const int32x2_t result32_low = vreinterpret_s32_s8(vmovn_s16(result16_low));
-                    const int32x2_t result32_high = vreinterpret_s32_s8(vmovn_s16(result16_high));
-
-                    vst1q_s32((int32_t *)&dst[x], vcombine_s32(result32_low, result32_high));
+                    const uint16x8_t src16_low = vmovl_u8(src8_low);
+                    const uint16x8_t dst16_low = vmovl_u8(dst8_low);
+
+                    const uint16x8_t src16_high = vmovl_u8(src8_high);
+                    const uint16x8_t dst16_high = vmovl_u8(dst8_high);
+
+                    const uint16x8_t srcalpha16_low = qvbyte_mul_u16(src16_low, const_alpha16, half);
+                    const uint16x8_t srcalpha16_high = qvbyte_mul_u16(src16_high, const_alpha16, half);
+
+                    const uint16x8_t result16_low = qvsource_over_u16(srcalpha16_low, dst16_low, half, full);
+                    const uint16x8_t result16_high = qvsource_over_u16(srcalpha16_high, dst16_high, half, full);
+
+                    const uint32x2_t result32_low = vreinterpret_u32_u8(vmovn_u16(result16_low));
+                    const uint32x2_t result32_high = vreinterpret_u32_u8(vmovn_u16(result16_high));
+
+                    vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high));
                 }
             }
@@ -207,17 +207,17 @@
             const uint *src = (const uint *) srcPixels;
             uint *dst = (uint *) destPixels;
-            int16x8_t half = vdupq_n_s16(0x80);
+            uint16x8_t half = vdupq_n_u16(0x80);
             const_alpha = (const_alpha * 255) >> 8;
             int one_minus_const_alpha = 255 - const_alpha;
-            int16x8_t const_alpha16 = vdupq_n_s16(const_alpha);
-            int16x8_t one_minus_const_alpha16 = vdupq_n_s16(255 - const_alpha);
+            uint16x8_t const_alpha16 = vdupq_n_u16(const_alpha);
+            uint16x8_t one_minus_const_alpha16 = vdupq_n_u16(255 - const_alpha);
             for (int y = 0; y < h; ++y) {
                 int x = 0;
                 for (; x < w-3; x += 4) {
-                    int32x4_t src32 = vld1q_s32((int32_t *)&src[x]);
-                    int32x4_t dst32 = vld1q_s32((int32_t *)&dst[x]);
-
-                    const uint8x16_t src8 = vreinterpretq_u8_s32(src32);
-                    const uint8x16_t dst8 = vreinterpretq_u8_s32(dst32);
+                    uint32x4_t src32 = vld1q_u32((uint32_t *)&src[x]);
+                    uint32x4_t dst32 = vld1q_u32((uint32_t *)&dst[x]);
+
+                    const uint8x16_t src8 = vreinterpretq_u8_u32(src32);
+                    const uint8x16_t dst8 = vreinterpretq_u8_u32(dst32);
 
                     const uint8x8_t src8_low = vget_low_u8(src8);
@@ -227,17 +227,17 @@
                     const uint8x8_t dst8_high = vget_high_u8(dst8);
 
-                    const int16x8_t src16_low = vreinterpretq_s16_u16(vmovl_u8(src8_low));
-                    const int16x8_t dst16_low = vreinterpretq_s16_u16(vmovl_u8(dst8_low));
-
-                    const int16x8_t src16_high = vreinterpretq_s16_u16(vmovl_u8(src8_high));
-                    const int16x8_t dst16_high = vreinterpretq_s16_u16(vmovl_u8(dst8_high));
-
-                    const int16x8_t result16_low = qvinterpolate_pixel_255(src16_low, const_alpha16, dst16_low, one_minus_const_alpha16, half);
-                    const int16x8_t result16_high = qvinterpolate_pixel_255(src16_high, const_alpha16, dst16_high, one_minus_const_alpha16, half);
-
-                    const int32x2_t result32_low = vreinterpret_s32_s8(vmovn_s16(result16_low));
-                    const int32x2_t result32_high = vreinterpret_s32_s8(vmovn_s16(result16_high));
-
-                    vst1q_s32((int32_t *)&dst[x], vcombine_s32(result32_low, result32_high));
+                    const uint16x8_t src16_low = vmovl_u8(src8_low);
+                    const uint16x8_t dst16_low = vmovl_u8(dst8_low);
+
+                    const uint16x8_t src16_high = vmovl_u8(src8_high);
+                    const uint16x8_t dst16_high = vmovl_u8(dst8_high);
+
+                    const uint16x8_t result16_low = qvinterpolate_pixel_255(src16_low, const_alpha16, dst16_low, one_minus_const_alpha16, half);
+                    const uint16x8_t result16_high = qvinterpolate_pixel_255(src16_high, const_alpha16, dst16_high, one_minus_const_alpha16, half);
+
+                    const uint32x2_t result32_low = vreinterpret_u32_u8(vmovn_u16(result16_low));
+                    const uint32x2_t result32_high = vreinterpret_u32_u8(vmovn_u16(result16_high));
+
+                    vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high));
                 }
                 for (; x<w; ++x) {
Index: /trunk/src/gui/painting/qdrawhelper_p.h
===================================================================
--- /trunk/src/gui/painting/qdrawhelper_p.h	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper_p.h	(revision 769)
@@ -1550,4 +1550,7 @@
 inline void qt_memfill(T *dest, T value, int count)
 {
+    if (!count)
+        return;
+
     int n = (count + 7) / 8;
     switch (count & 0x07)
Index: /trunk/src/gui/painting/qdrawhelper_sse2.cpp
===================================================================
--- /trunk/src/gui/painting/qdrawhelper_sse2.cpp	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper_sse2.cpp	(revision 769)
@@ -57,4 +57,215 @@
 
 QT_BEGIN_NAMESPACE
+
+/*
+ * Multiply the components of pixelVector by alphaChannel
+ * Each 32bits components of alphaChannel must be in the form 0x00AA00AA
+ * colorMask must have 0x00ff00ff on each 32 bits component
+ * half must have the value 128 (0x80) for each 32 bits compnent
+ */
+#define BYTE_MUL_SSE2(result, pixelVector, alphaChannel, colorMask, half) \
+{ \
+    /* 1. separate the colors in 2 vectors so each color is on 16 bits \
+       (in order to be multiplied by the alpha \
+       each 32 bit of dstVectorAG are in the form 0x00AA00GG \
+       each 32 bit of dstVectorRB are in the form 0x00RR00BB */\
+    __m128i pixelVectorAG = _mm_srli_epi16(pixelVector, 8); \
+    __m128i pixelVectorRB = _mm_and_si128(pixelVector, colorMask); \
+ \
+    /* 2. multiply the vectors by the alpha channel */\
+    pixelVectorAG = _mm_mullo_epi16(pixelVectorAG, alphaChannel); \
+    pixelVectorRB = _mm_mullo_epi16(pixelVectorRB, alphaChannel); \
+ \
+    /* 3. devide by 255, that's the tricky part. \
+       we do it like for BYTE_MUL(), with bit shift: X/255 ~= (X + X/256 + rounding)/256 */ \
+    /** so first (X + X/256 + rounding) */\
+    pixelVectorRB = _mm_add_epi16(pixelVectorRB, _mm_srli_epi16(pixelVectorRB, 8)); \
+    pixelVectorRB = _mm_add_epi16(pixelVectorRB, half); \
+    pixelVectorAG = _mm_add_epi16(pixelVectorAG, _mm_srli_epi16(pixelVectorAG, 8)); \
+    pixelVectorAG = _mm_add_epi16(pixelVectorAG, half); \
+ \
+    /** second devide by 256 */\
+    pixelVectorRB = _mm_srli_epi16(pixelVectorRB, 8); \
+    /** for AG, we could >> 8 to divide followed by << 8 to put the \
+        bytes in the correct position. By masking instead, we execute \
+        only one instruction */\
+    pixelVectorAG = _mm_andnot_si128(colorMask, pixelVectorAG); \
+ \
+    /* 4. combine the 2 pairs of colors */ \
+    result = _mm_or_si128(pixelVectorAG, pixelVectorRB); \
+}
+
+/*
+ * Each 32bits components of alphaChannel must be in the form 0x00AA00AA
+ * oneMinusAlphaChannel must be 255 - alpha for each 32 bits component
+ * colorMask must have 0x00ff00ff on each 32 bits component
+ * half must have the value 128 (0x80) for each 32 bits compnent
+ */
+#define INTERPOLATE_PIXEL_255_SSE2(result, srcVector, dstVector, alphaChannel, oneMinusAlphaChannel, colorMask, half) { \
+    /* interpolate AG */\
+    __m128i srcVectorAG = _mm_srli_epi16(srcVector, 8); \
+    __m128i dstVectorAG = _mm_srli_epi16(dstVector, 8); \
+    __m128i srcVectorAGalpha = _mm_mullo_epi16(srcVectorAG, alphaChannel); \
+    __m128i dstVectorAGoneMinusAlphalpha = _mm_mullo_epi16(dstVectorAG, oneMinusAlphaChannel); \
+    __m128i finalAG = _mm_add_epi16(srcVectorAGalpha, dstVectorAGoneMinusAlphalpha); \
+    finalAG = _mm_add_epi16(finalAG, _mm_srli_epi16(finalAG, 8)); \
+    finalAG = _mm_add_epi16(finalAG, half); \
+    finalAG = _mm_andnot_si128(colorMask, finalAG); \
+ \
+    /* interpolate RB */\
+    __m128i srcVectorRB = _mm_and_si128(srcVector, colorMask); \
+    __m128i dstVectorRB = _mm_and_si128(dstVector, colorMask); \
+    __m128i srcVectorRBalpha = _mm_mullo_epi16(srcVectorRB, alphaChannel); \
+    __m128i dstVectorRBoneMinusAlphalpha = _mm_mullo_epi16(dstVectorRB, oneMinusAlphaChannel); \
+    __m128i finalRB = _mm_add_epi16(srcVectorRBalpha, dstVectorRBoneMinusAlphalpha); \
+    finalRB = _mm_add_epi16(finalRB, _mm_srli_epi16(finalRB, 8)); \
+    finalRB = _mm_add_epi16(finalRB, half); \
+    finalRB = _mm_srli_epi16(finalRB, 8); \
+ \
+    /* combine */\
+    result = _mm_or_si128(finalAG, finalRB); \
+}
+
+void qt_blend_argb32_on_argb32_sse2(uchar *destPixels, int dbpl,
+                                    const uchar *srcPixels, int sbpl,
+                                    int w, int h,
+                                    int const_alpha)
+{
+    const quint32 *src = (const quint32 *) srcPixels;
+    quint32 *dst = (uint *) destPixels;
+    if (const_alpha == 256) {
+        const __m128i alphaMask = _mm_set1_epi32(0xff000000);
+        const __m128i nullVector = _mm_set1_epi32(0);
+        const __m128i half = _mm_set1_epi16(0x80);
+        const __m128i one = _mm_set1_epi16(0xff);
+        const __m128i colorMask = _mm_set1_epi32(0x00ff00ff);
+        for (int y = 0; y < h; ++y) {
+            int x = 0;
+            for (; x < w-3; x += 4) {
+                const __m128i srcVector = _mm_loadu_si128((__m128i *)&src[x]);
+                const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask);
+                if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) {
+                    // all opaque
+                    _mm_storeu_si128((__m128i *)&dst[x], srcVector);
+                } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffff) {
+                    // not fully transparent
+                    // result = s + d * (1-alpha)
+
+                    // extract the alpha channel on 2 x 16 bits
+                    // so we have room for the multiplication
+                    // each 32 bits will be in the form 0x00AA00AA
+                    // with A being the 1 - alpha
+                    __m128i alphaChannel = _mm_srli_epi32(srcVector, 24);
+                    alphaChannel = _mm_or_si128(alphaChannel, _mm_slli_epi32(alphaChannel, 16));
+                    alphaChannel = _mm_sub_epi16(one, alphaChannel);
+
+                    const __m128i dstVector = _mm_loadu_si128((__m128i *)&dst[x]);
+                    __m128i destMultipliedByOneMinusAlpha;
+                    BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half);
+
+                    // result = s + d * (1-alpha)
+                    const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha);
+                    _mm_storeu_si128((__m128i *)&dst[x], result);
+                }
+            }
+            for (; x<w; ++x) {
+                uint s = src[x];
+                if (s >= 0xff000000)
+                    dst[x] = s;
+                else if (s != 0)
+                    dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
+            }
+            dst = (quint32 *)(((uchar *) dst) + dbpl);
+            src = (const quint32 *)(((const uchar *) src) + sbpl);
+        }
+    } else if (const_alpha != 0) {
+        // dest = (s + d * sia) * ca + d * cia
+        //      = s * ca + d * (sia * ca + cia)
+        //      = s * ca + d * (1 - sa*ca)
+        const_alpha = (const_alpha * 255) >> 8;
+        const __m128i nullVector = _mm_set1_epi32(0);
+        const __m128i half = _mm_set1_epi16(0x80);
+        const __m128i one = _mm_set1_epi16(0xff);
+        const __m128i colorMask = _mm_set1_epi32(0x00ff00ff);
+        const __m128i constAlphaVector = _mm_set1_epi16(const_alpha);
+        for (int y = 0; y < h; ++y) {
+            int x = 0;
+            for (; x < w-3; x += 4) {
+                __m128i srcVector = _mm_loadu_si128((__m128i *)&src[x]);
+                if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVector, nullVector)) != 0xffff) {
+                    BYTE_MUL_SSE2(srcVector, srcVector, constAlphaVector, colorMask, half);
+
+                    __m128i alphaChannel = _mm_srli_epi32(srcVector, 24);
+                    alphaChannel = _mm_or_si128(alphaChannel, _mm_slli_epi32(alphaChannel, 16));
+                    alphaChannel = _mm_sub_epi16(one, alphaChannel);
+
+                    const __m128i dstVector = _mm_loadu_si128((__m128i *)&dst[x]);
+                    __m128i destMultipliedByOneMinusAlpha;
+                    BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half);
+
+                    const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha);
+                    _mm_storeu_si128((__m128i *)&dst[x], result);
+                }
+            }
+            for (; x<w; ++x) {
+                quint32 s = src[x];
+                if (s != 0) {
+                    s = BYTE_MUL(s, const_alpha);
+                    dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
+                }
+            }
+            dst = (quint32 *)(((uchar *) dst) + dbpl);
+            src = (const quint32 *)(((const uchar *) src) + sbpl);
+        }
+    }
+}
+
+// qblendfunctions.cpp
+void qt_blend_rgb32_on_rgb32(uchar *destPixels, int dbpl,
+                             const uchar *srcPixels, int sbpl,
+                             int w, int h,
+                             int const_alpha);
+
+void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl,
+                                 const uchar *srcPixels, int sbpl,
+                                 int w, int h,
+                                 int const_alpha)
+{
+    const quint32 *src = (const quint32 *) srcPixels;
+    quint32 *dst = (uint *) destPixels;
+    if (const_alpha != 256) {
+        if (const_alpha != 0) {
+            const __m128i nullVector = _mm_set1_epi32(0);
+            const __m128i half = _mm_set1_epi16(0x80);
+            const __m128i colorMask = _mm_set1_epi32(0x00ff00ff);
+
+            const_alpha = (const_alpha * 255) >> 8;
+            int one_minus_const_alpha = 255 - const_alpha;
+            const __m128i constAlphaVector = _mm_set1_epi16(const_alpha);
+            const __m128i oneMinusConstAlpha =  _mm_set1_epi16(one_minus_const_alpha);
+            for (int y = 0; y < h; ++y) {
+                int x = 0;
+                for (; x < w-3; x += 4) {
+                    __m128i srcVector = _mm_loadu_si128((__m128i *)&src[x]);
+                    if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVector, nullVector)) != 0xffff) {
+                        const __m128i dstVector = _mm_loadu_si128((__m128i *)&dst[x]);
+                        __m128i result;
+                        INTERPOLATE_PIXEL_255_SSE2(result, srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half);
+                        _mm_storeu_si128((__m128i *)&dst[x], result);
+                    }
+                }
+                for (; x<w; ++x) {
+                    quint32 s = src[x];
+                    s = BYTE_MUL(s, const_alpha);
+                    dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], one_minus_const_alpha);
+                }
+                dst = (quint32 *)(((uchar *) dst) + dbpl);
+                src = (const quint32 *)(((const uchar *) src) + sbpl);
+            }
+        }
+    } else {
+        qt_blend_rgb32_on_rgb32(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
+    }
+}
 
 void qt_memfill32_sse2(quint32 *dest, quint32 value, int count)
Index: /trunk/src/gui/painting/qdrawhelper_x86_p.h
===================================================================
--- /trunk/src/gui/painting/qdrawhelper_x86_p.h	(revision 768)
+++ /trunk/src/gui/painting/qdrawhelper_x86_p.h	(revision 769)
@@ -115,4 +115,12 @@
                           quint32 color,
                           const uchar *src, int width, int height, int stride);
+void qt_blend_argb32_on_argb32_sse2(uchar *destPixels, int dbpl,
+                                    const uchar *srcPixels, int sbpl,
+                                    int w, int h,
+                                    int const_alpha);
+void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl,
+                                 const uchar *srcPixels, int sbpl,
+                                 int w, int h,
+                                 int const_alpha);
 #endif // QT_HAVE_SSE2
 
Index: /trunk/src/gui/painting/qdrawutil.cpp
===================================================================
--- /trunk/src/gui/painting/qdrawutil.cpp	(revision 768)
+++ /trunk/src/gui/painting/qdrawutil.cpp	(revision 769)
@@ -1362,12 +1362,19 @@
         for (int i = 0; i < dataCount; ++i) {
             QTransform transform = oldTransform;
-            transform.translate(drawingData[i].point.x(), drawingData[i].point.y());
-            transform.rotate(drawingData[i].rotation);
+            qreal xOffset = 0;
+            qreal yOffset = 0;
+            if (drawingData[i].rotation == 0) {
+                xOffset = drawingData[i].point.x();
+                yOffset = drawingData[i].point.y();
+            } else {
+                transform.translate(drawingData[i].point.x(), drawingData[i].point.y());
+                transform.rotate(drawingData[i].rotation);
+            }
+            painter->setTransform(transform);
             painter->setOpacity(oldOpacity * drawingData[i].opacity);
-            painter->setTransform(transform);
 
             qreal w = drawingData[i].scaleX * drawingData[i].source.width();
             qreal h = drawingData[i].scaleY * drawingData[i].source.height();
-            painter->drawPixmap(QRectF(-0.5 * w, -0.5 * h, w, h), pixmap, drawingData[i].source);
+            painter->drawPixmap(QRectF(-0.5 * w + xOffset, -0.5 * h + yOffset, w, h), pixmap, drawingData[i].source);
         }
 
Index: /trunk/src/gui/painting/qgraphicssystem_raster.cpp
===================================================================
--- /trunk/src/gui/painting/qgraphicssystem_raster.cpp	(revision 768)
+++ /trunk/src/gui/painting/qgraphicssystem_raster.cpp	(revision 769)
@@ -42,6 +42,11 @@
 #include "qgraphicssystem_raster_p.h"
 
+#ifdef Q_OS_SYMBIAN
+#include "private/qpixmap_s60_p.h"
+#include "private/qwindowsurface_s60_p.h"
+#else
 #include "private/qpixmap_raster_p.h"
 #include "private/qwindowsurface_raster_p.h"
+#endif
 
 QT_BEGIN_NAMESPACE
@@ -49,10 +54,18 @@
 QPixmapData *QRasterGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
 {
+#ifdef Q_OS_SYMBIAN
+    return new QS60PixmapData(type);
+#else
     return new QRasterPixmapData(type);
+#endif
 }
 
 QWindowSurface *QRasterGraphicsSystem::createWindowSurface(QWidget *widget) const
 {
+#ifdef Q_OS_SYMBIAN
+    return new QS60WindowSurface(widget);
+#else
     return new QRasterWindowSurface(widget);
+#endif
 }
 
Index: /trunk/src/gui/painting/qmath_p.h
===================================================================
--- /trunk/src/gui/painting/qmath_p.h	(revision 768)
+++ /trunk/src/gui/painting/qmath_p.h	(revision 769)
@@ -55,4 +55,5 @@
 
 #include <math.h>
+#include <qmath.h>
 
 QT_BEGIN_NAMESPACE
@@ -62,4 +63,9 @@
 static const qreal Q_PI2  = qreal(1.57079632679489661923);   // pi/2
 
+inline int qIntSqrtInt(int v)
+{
+    return static_cast<int>(qSqrt(static_cast<qreal>(v)));
+}
+
 QT_END_NAMESPACE
 
Index: /trunk/src/gui/painting/qpaintbuffer.cpp
===================================================================
--- /trunk/src/gui/painting/qpaintbuffer.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpaintbuffer.cpp	(revision 769)
@@ -53,6 +53,6 @@
 QT_BEGIN_NAMESPACE
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 extern void qt_format_text(const QFont &font,
                            const QRectF &_r, int tf, const QTextOption *option, const QString& str, QRectF *brect,
Index: /trunk/src/gui/painting/qpaintengine_alpha.cpp
===================================================================
--- /trunk/src/gui/painting/qpaintengine_alpha.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpaintengine_alpha.cpp	(revision 769)
@@ -94,6 +94,6 @@
 }
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 
 bool QAlphaPaintEngine::end()
Index: /trunk/src/gui/painting/qpaintengine_raster.cpp
===================================================================
--- /trunk/src/gui/painting/qpaintengine_raster.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpaintengine_raster.cpp	(revision 769)
@@ -101,11 +101,7 @@
 #include <limits.h>
 
-#if defined(QT_NO_FPU) || (_MSC_VER >= 1300 && _MSC_VER < 1400)
-#  define FLOATING_POINT_BUGGY_OR_NO_FPU
-#endif
-
 QT_BEGIN_NAMESPACE
 
-extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
+Q_GUI_EXPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
 
 #define qreal_to_fixed_26_6(f) (int(f * 64))
@@ -3680,7 +3676,4 @@
          || (qpen_style(s->lastPen) == Qt::NoPen && !s->flags.antialiased))
         && qMax(rect.width(), rect.height()) < QT_RASTER_COORD_LIMIT
-#ifdef FLOATING_POINT_BUGGY_OR_NO_FPU
-        && qMax(rect.width(), rect.height()) < 128 // integer math breakdown
-#endif
         && s->matrix.type() <= QTransform::TxScale) // no shear
     {
@@ -4985,5 +4978,5 @@
 }
 
-extern QImage qt_imageForBrush(int brushStyle, bool invert);
+Q_GUI_EXPORT extern QImage qt_imageForBrush(int brushStyle, bool invert);
 
 void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode)
@@ -6055,13 +6048,7 @@
                                    QSpanData *pen_data, QSpanData *brush_data)
 {
-#ifdef FLOATING_POINT_BUGGY_OR_NO_FPU // no fpu, so use fixed point
-    const QFixed a = QFixed(rect.width()) >> 1;
-    const QFixed b = QFixed(rect.height()) >> 1;
-    QFixed d = b*b - (a*a*b) + ((a*a) >> 2);
-#else
     const qreal a = qreal(rect.width()) / 2;
     const qreal b = qreal(rect.height()) / 2;
     qreal d = b*b - (a*a*b) + 0.25*a*a;
-#endif
 
     int x = 0;
@@ -6086,10 +6073,5 @@
 
     // region 2
-#ifdef FLOATING_POINT_BUGGY_OR_NO_FPU
-    d = b*b*(x + (QFixed(1) >> 1))*(x + (QFixed(1) >> 1))
-        + a*a*((y - 1)*(y - 1) - b*b);
-#else
     d = b*b*(x + 0.5)*(x + 0.5) + a*a*((y - 1)*(y - 1) - b*b);
-#endif
     const int miny = rect.height() & 0x1;
     while (y > miny) {
Index: /trunk/src/gui/painting/qpaintengine_x11.cpp
===================================================================
--- /trunk/src/gui/painting/qpaintengine_x11.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpaintengine_x11.cpp	(revision 769)
@@ -1990,4 +1990,7 @@
         XFillRectangle(d->dpy, d->hd, d->gc, x, y, sw, sh);
         restore_clip = true;
+    } else if (mono_dst && !mono_src) {
+        QBitmap bitmap(pixmap);
+        XCopyArea(d->dpy, bitmap.handle(), d->hd, d->gc, sx, sy, sw, sh, x, y);
     } else {
         XCopyArea(d->dpy, pixmap.handle(), d->hd, d->gc, sx, sy, sw, sh, x, y);
Index: /trunk/src/gui/painting/qpaintengineex.cpp
===================================================================
--- /trunk/src/gui/painting/qpaintengineex.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpaintengineex.cpp	(revision 769)
@@ -381,5 +381,5 @@
 }
 
-extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
+Q_GUI_EXPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
 
 void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
Index: /trunk/src/gui/painting/qpainter.cpp
===================================================================
--- /trunk/src/gui/painting/qpainter.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpainter.cpp	(revision 769)
@@ -709,11 +709,12 @@
         if (penBrush.style() == Qt::TexturePattern)
             penTextureAlpha = qHasPixmapTexture(penBrush)
-                              ? penBrush.texture().hasAlpha()
+                              ? (penBrush.texture().depth() > 1) && penBrush.texture().hasAlpha()
                               : penBrush.textureImage().hasAlphaChannel();
         bool brushTextureAlpha = false;
-        if (s->brush.style() == Qt::TexturePattern)
+        if (s->brush.style() == Qt::TexturePattern) {
             brushTextureAlpha = qHasPixmapTexture(s->brush)
-                                ? s->brush.texture().hasAlpha()
+                                ? (s->brush.texture().depth() > 1) && s->brush.texture().hasAlpha()
                                 : s->brush.textureImage().hasAlphaChannel();
+        }
         if (((penBrush.style() == Qt::TexturePattern && penTextureAlpha)
              || (s->brush.style() == Qt::TexturePattern && brushTextureAlpha))
@@ -1987,10 +1988,23 @@
 
     Note that only the states the underlying paint engine changes will be reset
-    to their respective default states. If, for example, the OpenGL polygon
-    mode is changed by the user inside a beginNativePaint()/endNativePainting()
-    block, it will not be reset to the default state by endNativePainting().
-
-    Here is an example that shows intermixing of painter commands
-    and raw OpenGL commands:
+    to their respective default states. The states we reset may change from
+    release to release. The following states are currently reset in the OpenGL
+    2 engine:
+
+    \list
+    \i blending is disabled
+    \i the depth, stencil and scissor tests are disabled
+    \i the active texture unit is reset to 0
+    \i the depth mask, depth function and the clear depth are reset to their
+    default values
+    \i the stencil mask, stencil operation and stencil function are reset to
+    their default values
+     \i the current color is reset to solid white
+    \endlist
+
+    If, for example, the OpenGL polygon mode is changed by the user inside a
+    beginNativePaint()/endNativePainting() block, it will not be reset to the
+    default state by endNativePainting(). Here is an example that shows
+    intermixing of painter commands and raw OpenGL commands:
 
     \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 21
@@ -5760,10 +5774,15 @@
         gf.chars = engine.layoutData->string.unicode() + si.position;
         gf.num_chars = engine.length(item);
-        gf.width = si.width;
+        if (engine.forceJustification) {
+            for (int j=0; j<gf.glyphs.numGlyphs; ++j)
+                gf.width += gf.glyphs.effectiveAdvance(j);
+        } else {
+            gf.width = si.width;
+        }
         gf.logClusters = engine.logClusters(&si);
 
         drawTextItem(QPointF(x.toReal(), p.y()), gf);
 
-        x += si.width;
+        x += gf.width;
     }
 }
@@ -7788,8 +7807,9 @@
             QTextLine line = textLayout.lineAt(i);
 
+            qreal advance = textLayout.engine()->lines[i].textAdvance.toReal();
             if (tf & Qt::AlignRight)
-                xoff = r.width() - line.naturalTextWidth();
+                xoff = r.width() - advance;
             else if (tf & Qt::AlignHCenter)
-                xoff = (r.width() - line.naturalTextWidth())/2;
+                xoff = (r.width() - advance)/2;
 
             line.draw(painter, QPointF(r.x() + xoff + line.x(), r.y() + yoff));
Index: /trunk/src/gui/painting/qpathclipper.cpp
===================================================================
--- /trunk/src/gui/painting/qpathclipper.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpathclipper.cpp	(revision 769)
@@ -1692,5 +1692,5 @@
 
     if (rect)
-        *rect = QRectF(QPointF(x1, y1), QPointF(x2, y2));
+        rect->setCoords(x1, y1, x2, y2);
 
     return true;
Index: /trunk/src/gui/painting/qpdf.cpp
===================================================================
--- /trunk/src/gui/painting/qpdf.cpp	(revision 768)
+++ /trunk/src/gui/painting/qpdf.cpp	(revision 769)
@@ -55,5 +55,5 @@
 QT_BEGIN_NAMESPACE
 
-extern int qt_defaultDpi();
+Q_GUI_EXPORT extern int qt_defaultDpi();
 
 #ifndef QT_NO_PRINTER
@@ -972,4 +972,5 @@
         return;
 
+    Q_D(QPdfBaseEngine);
     QPainterPath p;
     for (int i=0; i!=pointCount;++i) {
@@ -977,5 +978,9 @@
         p.lineTo(points[i] + QPointF(0, 0.001));
     }
+
+    bool hadBrush = d->hasBrush;
+    d->hasBrush = false;
     drawPath(p);
+    d->hasBrush = hadBrush;
 }
 
@@ -985,4 +990,5 @@
         return;
 
+    Q_D(QPdfBaseEngine);
     QPainterPath p;
     for (int i=0; i!=lineCount;++i) {
@@ -990,5 +996,8 @@
         p.lineTo(lines[i].p2());
     }
+    bool hadBrush = d->hasBrush;
+    d->hasBrush = false;
     drawPath(p);
+    d->hasBrush = hadBrush;
 }
 
Index: /trunk/src/gui/painting/qprintengine_ps.cpp
===================================================================
--- /trunk/src/gui/painting/qprintengine_ps.cpp	(revision 768)
+++ /trunk/src/gui/painting/qprintengine_ps.cpp	(revision 769)
@@ -486,5 +486,4 @@
     QByteArray header;
     QPdf::ByteStream s(&header);
-    s << "%!PS-Adobe-1.0";
 
     qreal scale = 72. / ((qreal) q->metric(QPaintDevice::PdmDpiY));
@@ -498,6 +497,9 @@
     int height = pageRect.height();
     if (finished && pageCount == 1 && copies == 1 &&
-        ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps"))))
-       ) {
+        ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps")))))
+    {
+        // According to the EPSF 3.0 spec it is required that the PS
+        // version is PS-Adobe-3.0
+        s << "%!PS-Adobe-3.0";
         if (!boundingBox.isValid())
             boundingBox.setRect(0, 0, width, height);
@@ -506,18 +508,19 @@
                 boundingBox.translate(-mleft, -mtop);
             s << " EPSF-3.0\n%%BoundingBox: "
-              << (int)(printer->height() - boundingBox.bottom())*scale // llx
-              << (int)(printer->width() - boundingBox.right())*scale - 1 // lly
-              << (int)(printer->height() - boundingBox.top())*scale + 1 // urx
-              << (int)(printer->width() - boundingBox.left())*scale; // ury
+              << int((printer->height() - boundingBox.bottom())*scale) // llx
+              << int((printer->width() - boundingBox.right())*scale - 1) // lly
+              << int((printer->height() - boundingBox.top())*scale + 1) // urx
+              << int((printer->width() - boundingBox.left())*scale); // ury
         } else {
             if (!fullPage)
                 boundingBox.translate(mleft, -mtop);
             s << " EPSF-3.0\n%%BoundingBox: "
-              << (int)(boundingBox.left())*scale
-              << (int)(printer->height() - boundingBox.bottom())*scale - 1
-              << (int)(boundingBox.right())*scale + 1
-              << (int)(printer->height() - boundingBox.top())*scale;
+              << int((boundingBox.left())*scale)
+              << int((printer->height() - boundingBox.bottom())*scale - 1)
+              << int((boundingBox.right())*scale + 1)
+              << int((printer->height() - boundingBox.top())*scale);
         }
     } else {
+        s << "%!PS-Adobe-1.0";
         int w = width + (fullPage ? 0 : mleft + mright);
         int h = height + (fullPage ? 0 : mtop + mbottom);
Index: /trunk/src/gui/painting/qprintengine_win.cpp
===================================================================
--- /trunk/src/gui/painting/qprintengine_win.cpp	(revision 768)
+++ /trunk/src/gui/painting/qprintengine_win.cpp	(revision 769)
@@ -965,10 +965,11 @@
 
     QStringList info = output.split(QLatin1Char(','));
-    if (info.size() > 0) {
+    int infoSize = info.size();
+    if (infoSize > 0) {
         if (name.isEmpty())
             name = info.at(0);
-        if (program.isEmpty())
+        if (program.isEmpty() && infoSize > 1)
             program = info.at(1);
-        if (port.isEmpty())
+        if (port.isEmpty() && infoSize > 2)
             port = info.at(2);
     }
Index: /trunk/src/gui/painting/qregion.cpp
===================================================================
--- /trunk/src/gui/painting/qregion.cpp	(revision 768)
+++ /trunk/src/gui/painting/qregion.cpp	(revision 769)
@@ -3146,6 +3146,6 @@
 /* $XFree86: xc/lib/X11/PolyReg.c,v 1.1.1.2.8.2 1998/10/04 15:22:49 hohndel Exp $ */
 
-#define LARGE_COORDINATE 1000000
-#define SMALL_COORDINATE -LARGE_COORDINATE
+#define LARGE_COORDINATE INT_MAX
+#define SMALL_COORDINATE INT_MIN
 
 /*
Index: /trunk/src/gui/painting/qstroker.cpp
===================================================================
--- /trunk/src/gui/painting/qstroker.cpp	(revision 768)
+++ /trunk/src/gui/painting/qstroker.cpp	(revision 769)
@@ -826,5 +826,5 @@
 }
 
-void qt_find_ellipse_coords(const QRectF &r, qreal angle, qreal length,
+Q_GUI_EXPORT void qt_find_ellipse_coords(const QRectF &r, qreal angle, qreal length,
                             QPointF* startPoint, QPointF *endPoint);
 
Index: /trunk/src/gui/painting/qtransform.h
===================================================================
--- /trunk/src/gui/painting/qtransform.h	(revision 768)
+++ /trunk/src/gui/painting/qtransform.h	(revision 769)
@@ -294,5 +294,6 @@
     affine._dy  *= num;
     m_33        *= num;
-    m_dirty     |= TxScale;
+    if (m_dirty < TxScale)
+        m_dirty = TxScale;
     return *this;
 }
@@ -317,5 +318,5 @@
     affine._dy  += num;
     m_33        += num;
-    m_dirty     |= TxProject;
+    m_dirty     = TxProject;
     return *this;
 }
@@ -333,5 +334,5 @@
     affine._dy  -= num;
     m_33        -= num;
-    m_dirty     |= TxProject;
+    m_dirty     = TxProject;
     return *this;
 }
Index: /trunk/src/gui/painting/qwindowsurface_qws.cpp
===================================================================
--- /trunk/src/gui/painting/qwindowsurface_qws.cpp	(revision 768)
+++ /trunk/src/gui/painting/qwindowsurface_qws.cpp	(revision 769)
@@ -81,5 +81,5 @@
 inline bool isWidgetOpaque(const QWidget *w)
 {
-    return w->d_func()->isOpaque;
+    return w->d_func()->isOpaque && !w->testAttribute(Qt::WA_TranslucentBackground);
 }
 
@@ -874,4 +874,19 @@
 }
 
+// ### copied from qwindowsurface_raster.cpp -- should be cross-platform
+void QWSMemorySurface::beginPaint(const QRegion &rgn)
+{
+    if (!isWidgetOpaque(window())) {
+        QPainter p(&img);
+        p.setCompositionMode(QPainter::CompositionMode_Source);
+        const QVector<QRect> rects = rgn.rects();
+        const QColor blank = Qt::transparent;
+        for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
+            p.fillRect(*it, blank);
+        }
+    }
+    QWSWindowSurface::beginPaint(rgn);
+}
+
 // from qwindowsurface.cpp
 extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset);
Index: /trunk/src/gui/painting/qwindowsurface_qws_p.h
===================================================================
--- /trunk/src/gui/painting/qwindowsurface_qws_p.h	(revision 768)
+++ /trunk/src/gui/painting/qwindowsurface_qws_p.h	(revision 769)
@@ -177,4 +177,6 @@
     QPoint painterOffset() const;
 
+    void beginPaint(const QRegion &rgn);
+
     bool lock(int timeout = -1);
     void unlock();
Index: /trunk/src/gui/painting/qwindowsurface_raster.cpp
===================================================================
--- /trunk/src/gui/painting/qwindowsurface_raster.cpp	(revision 768)
+++ /trunk/src/gui/painting/qwindowsurface_raster.cpp	(revision 769)
@@ -560,8 +560,6 @@
 #ifndef QT_MAC_USE_COCOA
     QDEndCGContext(port, &context);
-#else
-    CGContextFlush(context);
-#endif
-#endif
+#endif
+#endif // Q_WS_MAC
 
 #ifdef Q_OS_SYMBIAN
Index: /trunk/src/gui/painting/qwindowsurface_s60.cpp
===================================================================
--- /trunk/src/gui/painting/qwindowsurface_s60.cpp	(revision 768)
+++ /trunk/src/gui/painting/qwindowsurface_s60.cpp	(revision 769)
@@ -71,5 +71,5 @@
     CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap);	// CBase derived object needs check on new
     qt_symbian_throwIfError( bitmap->Create( TSize(0, 0), mode ) );
-	
+
     QS60PixmapData *data = new QS60PixmapData(QPixmapData::PixmapType);
     if (data) {
@@ -77,5 +77,5 @@
         d_ptr->device = QPixmap(data);
     }
-        
+
     setStaticContentsSupport(true);
 }
@@ -90,22 +90,13 @@
         QS60PixmapData *pixmapData = static_cast<QS60PixmapData *>(d_ptr->device.data_ptr().data());
         pixmapData->beginDataAccess();
-        QImage &image = pixmapData->image;
-        QRgb *data = reinterpret_cast<QRgb *>(image.bits());
-        const int row_stride = image.bytesPerLine() / 4;
 
+        QPainter p(&pixmapData->image);
+        p.setCompositionMode(QPainter::CompositionMode_Source);
         const QVector<QRect> rects = rgn.rects();
+        const QColor blank = Qt::transparent;
         for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
-            const int x_start = it->x();
-            const int width = it->width();
+            p.fillRect(*it, blank);
+        }
 
-            const int y_start = it->y();
-            const int height = it->height();
-
-            QRgb *row = data + row_stride * y_start;
-            for (int y = 0; y < height; ++y) {
-                qt_memfill(row + x_start, 0U, width);
-                row += row_stride;
-            }
-        }
         pixmapData->endDataAccess();
     }
@@ -129,5 +120,5 @@
     const QPoint off = offset(widget);
     QImage *img = &(static_cast<QS60PixmapData *>(d_ptr->device.data_ptr().data())->image);
-    
+
     QRect rect(off, widget->size());
     rect &= QRect(QPoint(), img->size());
@@ -150,9 +141,17 @@
     QTLWExtra *topExtra = window->d_func()->maybeTopData();
     Q_ASSERT(topExtra);
+    QRect qr = region.boundingRect();
     if (!topExtra->inExpose) {
         topExtra->inExpose = true; // Prevent DrawNow() from calling syncBackingStore() again
-        TRect tr = qt_QRect2TRect(region.boundingRect());
+        TRect tr = qt_QRect2TRect(qr);
         widget->winId()->DrawNow(tr);
         topExtra->inExpose = false;
+    } else {
+        // This handles the case when syncBackingStore updates content outside of the
+        // original drawing rectangle. This might happen if there are pending update()
+        // events at the same time as we get a Draw() from Symbian.
+        QRect drawRect = qt_TRect2QRect(widget->winId()->DrawableWindow()->GetDrawRect());
+        if (!drawRect.contains(qr))
+            widget->winId()->DrawDeferred();
     }
 }
Index: /trunk/src/gui/s60framework/qs60mainapplication.cpp
===================================================================
--- /trunk/src/gui/s60framework/qs60mainapplication.cpp	(revision 768)
+++ /trunk/src/gui/s60framework/qs60mainapplication.cpp	(revision 769)
@@ -42,4 +42,5 @@
 // INCLUDE FILES
 #include <exception>
+#include <private/qcore_symbian_p.h>
 #include "qs60maindocument.h"
 #include "qs60mainapplication_p.h"
@@ -58,5 +59,5 @@
 }
 
-_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main.rsc");
+_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main" QT_LIBINFIX_UNICODE L".rsc");
 
 /*!
@@ -64,9 +65,9 @@
   \since 4.6
   \brief The QS60MainApplication class provides support for migration from S60.
- 
+
   \warning This class is provided only to get access to S60 specific
   functionality in the application framework classes. It is not
   portable. We strongly recommend against using it in new applications.
- 
+
   The QS60MainApplication provides a helper class for use in migrating
   from existing S60 based applications to Qt based applications. It is
Index: /trunk/src/gui/s60framework/qs60mainappui.cpp
===================================================================
--- /trunk/src/gui/s60framework/qs60mainappui.cpp	(revision 768)
+++ /trunk/src/gui/s60framework/qs60mainappui.cpp	(revision 769)
@@ -46,5 +46,13 @@
 #include <eikmenup.h>
 #include <barsread.h>
-#include <s60main.rsg>
+#include <qconfig.h>
+#if defined(QT_LIBINFIX_UNQUOTED)
+// Two level macro needed for proper expansion of libinfix
+#  define QT_S60MAIN_RSG_2(x) <s60main##x##.rsg>
+#  define QT_S60MAIN_RSG(x) QT_S60MAIN_RSG_2(x)
+#  include QT_S60MAIN_RSG(QT_LIBINFIX_UNQUOTED)
+#else
+#  include <s60main.rsg>
+#endif
 #include <avkon.rsg>
 
@@ -57,4 +65,7 @@
 #include <qdebug.h>
 
+//Animated wallpapers in Qt applications are not supported.
+const TInt KAknDisableAnimationBackground = 0x02000000;
+
 QT_BEGIN_NAMESPACE
 
@@ -105,14 +116,13 @@
     // resource files in most SDKs. S60 3rd FP1 public seems to require resource file
     // even these flags are defined
-    TInt flags = CAknAppUi::EAknEnableSkin;
-    if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) {
-        flags |= CAknAppUi::ENoScreenFurniture | CAknAppUi::ENonStandardResourceFile;
-    }
+    TInt flags = CAknAppUi::EAknEnableSkin
+                 | CAknAppUi::ENoScreenFurniture
+                 | CAknAppUi::ENonStandardResourceFile;
+    // After 5th Edition S60, native side supports animated wallpapers.
+	// However, there is no support for that feature on Qt side, so indicate to
+	// native UI framework that this application will not support background animations.
+    if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
+        flags |= KAknDisableAnimationBackground;
     BaseConstructL(flags);
-
-    if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) {
-        CEikButtonGroupContainer* nativeContainer = Cba();
-        nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
-    }
 }
 
Index: /trunk/src/gui/s60framework/qs60maindocument.h
===================================================================
--- /trunk/src/gui/s60framework/qs60maindocument.h	(revision 768)
+++ /trunk/src/gui/s60framework/qs60maindocument.h	(revision 769)
@@ -47,5 +47,5 @@
 #ifdef Q_WS_S60
 
-#include <akndoc.h>
+#include <AknDoc.h>
 
 class CEikApplication;
Index: /trunk/src/gui/s60framework/s60framework.pri
===================================================================
--- /trunk/src/gui/s60framework/s60framework.pri	(revision 768)
+++ /trunk/src/gui/s60framework/s60framework.pri	(revision 769)
@@ -5,6 +5,7 @@
     "SOURCEPATH s60framework" \
     "START RESOURCE s60main.rss" \
+    "TARGET s60main$${QT_LIBINFIX}" \
     "HEADER" \
-    "TARGETPATH resource\apps" \
+    "TARGETPATH /resource/apps" \
     "END"
 MMP_RULES += minimalAppResource31
@@ -18,2 +19,4 @@
            s60framework/qs60mainappui.h \
            s60framework/qs60maindocument.h
+
+!isEmpty(QT_LIBINFIX): DEFINES += QT_LIBINFIX_UNQUOTED=$$QT_LIBINFIX
Index: /trunk/src/gui/styles/qcommonstyle.cpp
===================================================================
--- /trunk/src/gui/styles/qcommonstyle.cpp	(revision 768)
+++ /trunk/src/gui/styles/qcommonstyle.cpp	(revision 769)
@@ -1154,8 +1154,8 @@
     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);
     }
@@ -1613,5 +1613,5 @@
                     if (toolbutton->toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
                         pr.setHeight(pmSize.height() + 6);
-                        tr.adjust(0, pr.height() - 1, 0, -3);
+                        tr.adjust(0, pr.height() - 1, 0, -2);
                         pr.translate(shiftX, shiftY);
                         if (!hasArrow) {
Index: /trunk/src/gui/styles/qgtkstyle.cpp
===================================================================
--- /trunk/src/gui/styles/qgtkstyle.cpp	(revision 768)
+++ /trunk/src/gui/styles/qgtkstyle.cpp	(revision 769)
@@ -3399,4 +3399,7 @@
 
     QRect r = QCleanlooksStyle::subElementRect(element, option, widget);
+    if (!d->isThemeAvailable())
+        return r;
+
     switch (element) {
     case SE_ProgressBarLabel:
Index: /trunk/src/gui/styles/qgtkstyle_p.cpp
===================================================================
--- /trunk/src/gui/styles/qgtkstyle_p.cpp	(revision 768)
+++ /trunk/src/gui/styles/qgtkstyle_p.cpp	(revision 769)
@@ -92,6 +92,6 @@
 Ptr_gtk_widget_modify_color QGtkStylePrivate::gtk_widget_modify_bg = 0;
 Ptr_gtk_arrow_new QGtkStylePrivate::gtk_arrow_new = 0;
-Ptr_gtk_menu_item_new QGtkStylePrivate::gtk_menu_item_new = 0;
-Ptr_gtk_check_menu_item_new QGtkStylePrivate::gtk_check_menu_item_new = 0;
+Ptr_gtk_menu_item_new_with_label QGtkStylePrivate::gtk_menu_item_new_with_label = 0;
+Ptr_gtk_check_menu_item_new_with_label QGtkStylePrivate::gtk_check_menu_item_new_with_label = 0;
 Ptr_gtk_menu_bar_new QGtkStylePrivate::gtk_menu_bar_new = 0;
 Ptr_gtk_menu_new QGtkStylePrivate::gtk_menu_new = 0;
@@ -348,6 +348,6 @@
     gtk_widget_modify_bg = (Ptr_gtk_widget_modify_color)libgtk.resolve("gtk_widget_modify_bg");
     gtk_arrow_new = (Ptr_gtk_arrow_new)libgtk.resolve("gtk_arrow_new");
-    gtk_menu_item_new = (Ptr_gtk_menu_item_new)libgtk.resolve("gtk_menu_item_new");
-    gtk_check_menu_item_new = (Ptr_gtk_check_menu_item_new)libgtk.resolve("gtk_check_menu_item_new");
+    gtk_menu_item_new_with_label = (Ptr_gtk_menu_item_new_with_label)libgtk.resolve("gtk_menu_item_new_with_label");
+    gtk_check_menu_item_new_with_label = (Ptr_gtk_check_menu_item_new_with_label)libgtk.resolve("gtk_check_menu_item_new_with_label");
     gtk_menu_bar_new = (Ptr_gtk_menu_bar_new)libgtk.resolve("gtk_menu_bar_new");
     gtk_menu_new = (Ptr_gtk_menu_new)libgtk.resolve("gtk_menu_new");
@@ -440,5 +440,5 @@
     setupGtkWidget(gtkMenuBar);
 
-    GtkWidget *gtkMenuBarItem = QGtkStylePrivate::gtk_menu_item_new();
+    GtkWidget *gtkMenuBarItem = QGtkStylePrivate::gtk_menu_item_new_with_label("X");
     gtk_menu_shell_append((GtkMenuShell*)(gtkMenuBar), gtkMenuBarItem);
     gtk_widget_realize(gtkMenuBarItem);
@@ -449,12 +449,9 @@
     gtk_widget_realize(gtkMenu);
 
-    GtkWidget *gtkMenuItem = QGtkStylePrivate::gtk_menu_item_new();
-    g_object_set(gtkMenuItem, "label", "X", NULL);
-
+    GtkWidget *gtkMenuItem = QGtkStylePrivate::gtk_menu_item_new_with_label("X");
     gtk_menu_shell_append((GtkMenuShell*)gtkMenu, gtkMenuItem);
     gtk_widget_realize(gtkMenuItem);
 
-    GtkWidget *gtkCheckMenuItem = QGtkStylePrivate::gtk_check_menu_item_new();
-    g_object_set(gtkCheckMenuItem, "label", "X", NULL);
+    GtkWidget *gtkCheckMenuItem = QGtkStylePrivate::gtk_check_menu_item_new_with_label("X");
     gtk_menu_shell_append((GtkMenuShell*)gtkMenu, gtkCheckMenuItem);
     gtk_widget_realize(gtkCheckMenuItem);
@@ -534,5 +531,5 @@
             addWidget(gtkButton);
             g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), 0);
-            addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, NULL));
+            addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, "Qt"));
             addWidget(QGtkStylePrivate::gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE));
             addWidget(QGtkStylePrivate::gtk_hbutton_box_new());
Index: /trunk/src/gui/styles/qgtkstyle_p.h
===================================================================
--- /trunk/src/gui/styles/qgtkstyle_p.h	(revision 768)
+++ /trunk/src/gui/styles/qgtkstyle_p.h	(revision 769)
@@ -88,7 +88,7 @@
 typedef void (*Ptr_gtk_widget_modify_color)(GtkWidget *widget, GtkStateType state, const GdkColor *color);
 typedef GtkWidget* (*Ptr_gtk_arrow_new)(GtkArrowType, GtkShadowType);
-typedef GtkWidget* (*Ptr_gtk_menu_item_new)(void);
+typedef GtkWidget* (*Ptr_gtk_menu_item_new_with_label)(const gchar *);
 typedef GtkWidget* (*Ptr_gtk_separator_menu_item_new)(void);
-typedef GtkWidget* (*Ptr_gtk_check_menu_item_new)(void);
+typedef GtkWidget* (*Ptr_gtk_check_menu_item_new_with_label)(const gchar *);
 typedef GtkWidget* (*Ptr_gtk_menu_bar_new)(void);
 typedef GtkWidget* (*Ptr_gtk_menu_new)(void);
@@ -307,7 +307,7 @@
     static Ptr_gtk_widget_modify_color gtk_widget_modify_fg;
     static Ptr_gtk_widget_modify_color gtk_widget_modify_bg;
-    static Ptr_gtk_menu_item_new gtk_menu_item_new;
+    static Ptr_gtk_menu_item_new_with_label gtk_menu_item_new_with_label;
     static Ptr_gtk_arrow_new gtk_arrow_new;
-    static Ptr_gtk_check_menu_item_new gtk_check_menu_item_new;
+    static Ptr_gtk_check_menu_item_new_with_label gtk_check_menu_item_new_with_label;
     static Ptr_gtk_menu_bar_new gtk_menu_bar_new;
     static Ptr_gtk_menu_new gtk_menu_new;
Index: /trunk/src/gui/styles/qmacstyle_mac.mm
===================================================================
--- /trunk/src/gui/styles/qmacstyle_mac.mm	(revision 768)
+++ /trunk/src/gui/styles/qmacstyle_mac.mm	(revision 769)
@@ -3381,6 +3381,12 @@
                             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 {
@@ -3744,5 +3750,5 @@
                     np.setColor(QPalette::WindowText, QColor(255, 255, 255, 75));
                     QRect nr = subElementRect(SE_TabBarTabText, opt, w);
-                    nr.moveTop(+1);
+                    nr.moveTop(-1);
                     int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextHideMnemonic;
                     proxy()->drawItemText(p, nr, alignment, np, tab->state & State_Enabled,
Index: /trunk/src/gui/styles/qs60style.cpp
===================================================================
--- /trunk/src/gui/styles/qs60style.cpp	(revision 768)
+++ /trunk/src/gui/styles/qs60style.cpp	(revision 769)
@@ -51,4 +51,5 @@
 #include "qdial.h"
 #include "qdialog.h"
+#include "qmessagebox.h"
 #include "qgroupbox.h"
 #include "qheaderview.h"
@@ -62,5 +63,4 @@
 #include "qscrollbar.h"
 #include "qtabbar.h"
-#include "qtablewidget.h"
 #include "qtableview.h"
 #include "qtextedit.h"
@@ -93,8 +93,8 @@
 const layoutHeader QS60StylePrivate::m_layoutHeaders[] = {
 // *** generated layout data ***
-{240,320,1,15,"QVGA Landscape"},
-{320,240,1,15,"QVGA Portrait"},
-{360,640,1,15,"NHD Landscape"},
-{640,360,1,15,"NHD Portrait"},
+{240,320,1,19,"QVGA Landscape"},
+{320,240,1,19,"QVGA Portrait"},
+{360,640,1,19,"NHD Landscape"},
+{640,360,1,19,"NHD Portrait"},
 {352,800,1,12,"E90 Landscape"}
 // *** End of generated data ***
@@ -105,9 +105,9 @@
 const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = {
 // *** generated pixel metrics ***
-{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,-909,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,3,3,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1},
-{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,-909,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,4,4,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1},
-{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,-909,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,5,5,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1},
-{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,-909,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,5,5,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1},
-{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,-909,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1}
+{5,0,-909,0,0,2,0,0,-1,7,12,22,15,15,7,198,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1,106},
+{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1,106},
+{7,0,-909,0,0,2,0,0,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
+{7,0,-909,0,0,2,0,0,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
+{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1,106}
 // *** End of generated data ***
 };
@@ -120,4 +120,8 @@
 // theme palette
 QPalette *QS60StylePrivate::m_themePalette = 0;
+
+qint64 QS60StylePrivate::m_webPaletteKey = 0;
+
+QPointer<QWidget> QS60StylePrivate::m_pressedWidget = 0;
 
 const struct QS60StylePrivate::frameElementCenter QS60StylePrivate::m_frameElementsData[] = {
@@ -126,5 +130,5 @@
     {SE_FrameLineEdit,          QS60StyleEnums::SP_QsnFrInputCenter},
     {SE_ListHighlight,          QS60StyleEnums::SP_QsnFrListCenter},
-    {SE_OptionsMenu,            QS60StyleEnums::SP_QsnFrPopupCenter},
+    {SE_PopupBackground,        QS60StyleEnums::SP_QsnFrPopupCenter},
     {SE_SettingsList,           QS60StyleEnums::SP_QsnFrSetOptCenter},
     {SE_TableItem,              QS60StyleEnums::SP_QsnFrCaleCenter},
@@ -137,4 +141,6 @@
     {SE_ButtonInactive,         QS60StyleEnums::SP_QsnFrButtonCenterInactive},
     {SE_Editor,                 QS60StyleEnums::SP_QsnFrInputCenter},
+    {SE_TableItemPressed,       QS60StyleEnums::SP_QsnFrGridCenterPressed},
+    {SE_ListItemPressed,        QS60StyleEnums::SP_QsnFrListPressed},
 };
 
@@ -249,6 +255,6 @@
         drawFrame(SF_ListHighlight, painter, rect, flags | SF_PointNorth);
         break;
-    case SE_OptionsMenu:
-        drawFrame(SF_OptionsMenu, painter, rect, flags | SF_PointNorth);
+    case SE_PopupBackground:
+        drawFrame(SF_PopupBackground, painter, rect, flags | SF_PointNorth);
         break;
     case SE_SettingsList:
@@ -290,4 +296,13 @@
         drawFrame(SF_FrameLineEdit, painter, rect, flags | SF_PointNorth);
         break;
+    case SE_DropArea:
+        drawPart(QS60StyleEnums::SP_QgnGrafOrgBgGrid, painter, rect, flags | SF_PointNorth);
+        break;
+    case SE_TableItemPressed:
+        drawFrame(SF_TableItemPressed, painter, rect, flags | SF_PointNorth);
+        break;
+    case SE_ListItemPressed:
+        drawFrame(SF_ListItemPressed, painter, rect, flags | SF_PointNorth);
+        break;
     default:
         break;
@@ -303,4 +318,11 @@
 short QS60StylePrivate::pixelMetric(int metric)
 {
+    //If it is a custom value, need to strip away the base to map to internal
+    //pixel metric value table
+    if (metric & QStyle::PM_CustomBase) {
+        metric -= QStyle::PM_CustomBase;
+        metric += MAX_NON_CUSTOM_PIXELMETRICS - 1;
+    }
+
     Q_ASSERT(metric < MAX_PIXELMETRICS);
     const short returnValue = m_pmPointer[metric];
@@ -403,6 +425,6 @@
     const bool cachedColorExists = m_colorCache.contains(frame);
     if (!cachedColorExists) {
-        const int frameCornerWidth = pixelMetric(PM_Custom_FrameCornerWidth);
-        const int frameCornerHeight = pixelMetric(PM_Custom_FrameCornerHeight);
+        const int frameCornerWidth = pixelMetric(PM_FrameCornerWidth);
+        const int frameCornerHeight = pixelMetric(PM_FrameCornerHeight);
         Q_ASSERT(2 * frameCornerWidth < 32);
         Q_ASSERT(2 * frameCornerHeight < 32);
@@ -531,4 +553,5 @@
 
     if (orientation == Qt::Horizontal) {
+        startRect.setHeight(rect.height());
         startRect.setWidth(qMin((rect.width() >> 1) - 1, startRect.width()));
         endRect = startRect.translated(rect.width() - startRect.width(), 0);
@@ -540,4 +563,5 @@
         }
     } else {
+        startRect.setWidth(rect.width());
         startRect.setHeight(qMin((rect.height() >> 1) - 1, startRect.height()));
         endRect = startRect.translated(0, rect.height() - startRect.height());
@@ -626,4 +650,10 @@
     } else if (qobject_cast<QGroupBox *>(widget)){
         fontCategory = QS60StyleEnums::FC_Title;
+    } else if (qobject_cast<QMessageBox *>(widget)){
+        fontCategory = QS60StyleEnums::FC_Primary;
+    } else if (qobject_cast<QMenu *>(widget)){
+        fontCategory = QS60StyleEnums::FC_Primary;
+    } else if (qobject_cast<QCalendarWidget *>(widget)){
+        fontCategory = QS60StyleEnums::FC_Secondary;
     }
     if (fontCategory != QS60StyleEnums::FC_Undefined) {
@@ -755,11 +785,27 @@
     widgetPalette = *palette;
 
+    widgetPalette.setColor(QPalette::Text,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 22, 0));
+    widgetPalette.setColor(QPalette::HighlightedText,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0));
+    QApplication::setPalette(widgetPalette, "QMenu");
+    widgetPalette = *palette;
+
     widgetPalette.setColor(QPalette::WindowText,
         s60Color(QS60StyleEnums::CL_QsnTextColors, 4, 0));
+    widgetPalette.setColor(QPalette::HighlightedText,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 3, 0));
     QApplication::setPalette(widgetPalette, "QTabBar");
     widgetPalette = *palette;
 
+    widgetPalette.setColor(QPalette::HighlightedText,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 10, 0));
+    QApplication::setPalette(widgetPalette, "QListView");
+    widgetPalette = *palette;
+
     widgetPalette.setColor(QPalette::Text,
         s60Color(QS60StyleEnums::CL_QsnTextColors, 22, 0));
+    widgetPalette.setColor(QPalette::HighlightedText,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0));
     QApplication::setPalette(widgetPalette, "QTableView");
     widgetPalette = *palette;
@@ -770,10 +816,4 @@
         s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
     QApplication::setPalette(widgetPalette, "QLineEdit");
-    widgetPalette = *palette;
-
-    widgetPalette.setColor(QPalette::Text,
-        s60Color(QS60StyleEnums::CL_QsnTextColors, 27, 0));
-    widgetPalette.setColor(QPalette::HighlightedText,
-        s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
     QApplication::setPalette(widgetPalette, "QTextEdit");
     widgetPalette = *palette;
@@ -785,4 +825,6 @@
 
     widgetPalette.setColor(QPalette::WindowText, s60Color(QS60StyleEnums::CL_QsnTextColors, 7, 0));
+    widgetPalette.setColor(QPalette::HighlightedText,
+        s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0));
     QApplication::setPalette(widgetPalette, "QRadioButton");
     QApplication::setPalette(widgetPalette, "QCheckBox");
@@ -805,6 +847,10 @@
     webPalette.setColor(QPalette::WindowText, Qt::black);
     webPalette.setColor(QPalette::Text, Qt::black);
+    webPalette.setBrush(QPalette::Base, Qt::white);
+
     QApplication::setPalette(webPalette, "QWebView");
     QApplication::setPalette(webPalette, "QGraphicsWebView");
+
+    m_webPaletteKey = webPalette.cacheKey();
 }
 
@@ -831,5 +877,4 @@
         case QS60StyleEnums::SP_QgnGrafNsliderEndRight:
         case QS60StyleEnums::SP_QgnGrafNsliderMiddle:
-            result.setWidth(result.height() >> 1);
             break;
 
@@ -842,16 +887,19 @@
         case QS60StyleEnums::SP_QgnGrafBarFrameSideL:
         case QS60StyleEnums::SP_QgnGrafBarFrameSideR:
-            result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
-            break;
-
-        case QS60StyleEnums::SP_QsnCpScrollHandleBottomPressed:
+            result.setWidth(pixelMetric(PM_FrameCornerWidth));
+            break;
+
         case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed:
-        case QS60StyleEnums::SP_QsnCpScrollHandleMiddlePressed:
         case QS60StyleEnums::SP_QsnCpScrollBgBottom:
-        case QS60StyleEnums::SP_QsnCpScrollBgMiddle:
         case QS60StyleEnums::SP_QsnCpScrollBgTop:
         case QS60StyleEnums::SP_QsnCpScrollHandleBottom:
+        case QS60StyleEnums::SP_QsnCpScrollHandleTop:
+        case QS60StyleEnums::SP_QsnCpScrollHandleBottomPressed:
+            result.setHeight(pixelMetric(QStyle::PM_ScrollBarExtent));
+            result.setWidth(pixelMetric(QStyle::PM_ScrollBarExtent));
+            break;
+        case QS60StyleEnums::SP_QsnCpScrollHandleMiddlePressed:
+        case QS60StyleEnums::SP_QsnCpScrollBgMiddle:
         case QS60StyleEnums::SP_QsnCpScrollHandleMiddle:
-        case QS60StyleEnums::SP_QsnCpScrollHandleTop:
             result.setHeight(pixelMetric(QStyle::PM_ScrollBarExtent));
             result.setWidth(pixelMetric(QStyle::PM_ScrollBarSliderMin));
@@ -866,13 +914,13 @@
                     case 6: /* CornerBl */
                     case 5: /* CornerBr */
-                        result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+                        result.setWidth(pixelMetric(PM_FrameCornerWidth));
                         // Falltrough intended...
                     case 4: /* SideT */
                     case 3: /* SideB */
-                        result.setHeight(pixelMetric(PM_Custom_FrameCornerHeight));
+                        result.setHeight(pixelMetric(PM_FrameCornerHeight));
                         break;
                     case 2: /* SideL */
                     case 1: /* SideR */
-                        result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+                        result.setWidth(pixelMetric(PM_FrameCornerWidth));
                         break;
                     case 0: /* center */
@@ -891,9 +939,17 @@
 }
 
-bool QS60StylePrivate::canDrawThemeBackground(const QBrush &backgroundBrush)
-{
+bool QS60StylePrivate::canDrawThemeBackground(const QBrush &backgroundBrush, const QWidget *widget)
+{
+    // Always return true for web pages.
+    if (widget && m_webPaletteKey == QApplication::palette(widget).cacheKey())
+        return true;
     //If brush is not changed from style's default values, draw theme graphics.
     return (backgroundBrush.color() == Qt::transparent ||
             backgroundBrush.style() == Qt::NoBrush) ? true : false;
+}
+
+bool QS60StylePrivate::isWidgetPressed(const QWidget *widget)
+{
+    return (widget && widget == m_pressedWidget);
 }
 
@@ -936,8 +992,8 @@
             QS60StylePrivate::drawSkinElement(grooveElement, painter, grooveRect, flags);
 
-            const QStyle::SubControls subControls = optionSlider->subControls;
+            const SubControls subControls = optionSlider->subControls;
 
             // select correct slider (horizontal/vertical/pressed)
-            const bool sliderPressed = ((optionSlider->state & QStyle::State_Sunken) && (subControls & SC_ScrollBarSlider));
+            const bool sliderPressed = ((optionSlider->state & State_Sunken) && (subControls & SC_ScrollBarSlider));
             const QS60StylePrivate::SkinElements handleElement =
                 horizontal ?
@@ -960,5 +1016,5 @@
 
             //Highlight
-/*            if (optionSlider->state & QStyle::State_HasFocus)
+/*            if (optionSlider->state & State_HasFocus)
                 drawPrimitive(PE_FrameFocusRect, optionSlider, painter, widget);*/
 
@@ -970,5 +1026,4 @@
                 QS60StylePrivate::drawSkinElement(grooveElement, painter, sliderGroove, flags);
             } else {
-                const QRect sliderGroove = subControlRect(control, optionSlider, SC_SliderGroove, widget);
                 const QPoint sliderGrooveCenter = sliderGroove.center();
                 const bool horizontal = optionSlider->orientation == Qt::Horizontal;
@@ -986,5 +1041,5 @@
             const QRect sliderHandle = subControlRect(control, optionSlider, SC_SliderHandle, widget);
             QS60StylePrivate::SkinElements handleElement;
-            if (optionSlider->state & QStyle::State_Sunken)
+            if (optionSlider->state & State_Sunken)
                 handleElement =
                         horizontal ? QS60StylePrivate::SE_SliderHandleSelectedHorizontal : QS60StylePrivate::SE_SliderHandleSelectedVertical;
@@ -1061,9 +1116,7 @@
                     tool.state = bflags;
                     const QToolButton *toolButtonWidget = qobject_cast<const QToolButton *>(widget);
-                    QS60StylePrivate::SkinElements element;
-                    if (toolButtonWidget)
-                        element = (toolButtonWidget->isDown()) ? QS60StylePrivate::SE_ToolBarButtonPressed : QS60StylePrivate::SE_ToolBarButton;
-                    else
-                        element = (option->state & State_Sunken) ? QS60StylePrivate::SE_ToolBarButtonPressed : QS60StylePrivate::SE_ToolBarButton;
+                    const QS60StylePrivate::SkinElements element =
+                        ((toolButtonWidget && toolButtonWidget->isDown()) || (option->state & State_Sunken)) ?
+                            QS60StylePrivate::SE_ToolBarButtonPressed : QS60StylePrivate::SE_ToolBarButton;
                     QS60StylePrivate::drawSkinElement(element, painter, tool.rect, flags);
                     drawPrimitive(PE_PanelButtonTool, &tool, painter, widget);
@@ -1097,5 +1150,5 @@
             }
 
-            if (toolBtn->text.length()>0 ||
+            if (toolBtn->text.length() > 0 ||
                 !toolBtn->icon.isNull()) {
                 const int frameWidth = pixelMetric(PM_DefaultFrameWidth, option, widget);
@@ -1173,5 +1226,5 @@
             const QRect textRect = subControlRect(CC_GroupBox, option, SC_GroupBoxLabel, widget);
             const QRect checkBoxRect = subControlRect(CC_GroupBox, option, SC_GroupBoxCheckBox, widget);
-            if (groupBox->subControls & QStyle::SC_GroupBoxFrame) {
+            if (groupBox->subControls & SC_GroupBoxFrame) {
                 QStyleOptionFrameV2 frame;
                 frame.QStyleOption::operator=(*groupBox);
@@ -1184,5 +1237,5 @@
 
             // Draw title
-            if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) {
+            if ((groupBox->subControls & SC_GroupBoxLabel) && !groupBox->text.isEmpty()) {
                 const QColor textColor = groupBox->textColor;
                 painter->save();
@@ -1191,5 +1244,5 @@
                     painter->setPen(textColor);
                 int alignment = int(groupBox->textAlignment);
-                if (!styleHint(QStyle::SH_UnderlineShortcut, option, widget))
+                if (!styleHint(SH_UnderlineShortcut, option, widget))
                     alignment |= Qt::TextHideMnemonic;
 
@@ -1227,4 +1280,6 @@
             if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(option)) {
                 bool isRadio = (element == CE_RadioButton);
+                QStyleOptionButton subopt = *btn;
+
                 // Highlight needs to be drawn first, as it goes "underneath" the text and indicator.
                 if (btn->state & State_HasFocus) {
@@ -1234,6 +1289,8 @@
                                                         : SE_CheckBoxFocusRect, btn, widget);
                     drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget);
+
+                    subopt.palette.setColor(QPalette::Active, QPalette::WindowText,
+                        subopt.palette.highlightedText().color());
                 }
-                QStyleOptionButton subopt = *btn;
 
                 subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator
@@ -1260,11 +1317,11 @@
     case CE_PushButtonBevel:
         if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
-            const bool isDisabled = !(option->state & QStyle::State_Enabled);
+            const bool isDisabled = !(option->state & State_Enabled);
             const bool isFlat = button->features & QStyleOptionButton::Flat;
             QS60StyleEnums::SkinParts skinPart;
             QS60StylePrivate::SkinElements skinElement;
             if (!isDisabled) {
-                const bool isPressed = (option->state & QStyle::State_Sunken) ||
-                                       (option->state & QStyle::State_On);
+                const bool isPressed = (option->state & State_Sunken) ||
+                                       (option->state & State_On);
                 if (isFlat) {
                     skinPart =
@@ -1291,5 +1348,5 @@
             QStyleOptionToolButton optionToolButton = *toolBtn;
 
-            if (!optionToolButton.icon.isNull() && (optionToolButton.state & QStyle::State_Sunken)
+            if (!optionToolButton.icon.isNull() && (optionToolButton.state & State_Sunken)
                     && (optionToolButton.state & State_Enabled)) {
 
@@ -1313,12 +1370,11 @@
                 optionComboBox.palette.text().color() );
             QRect editRect = subControlRect(CC_ComboBox, comboBox, SC_ComboBoxEditField, widget);
-            painter->save();
-            painter->setClipRect(editRect);
+            const int frameW = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget);
 
             if (!comboBox->currentIcon.isNull()) {
-                QIcon::Mode mode = comboBox->state & State_Enabled ? QIcon::Normal : QIcon::Disabled;
-                QPixmap pixmap = comboBox->currentIcon.pixmap(comboBox->iconSize, mode);
+                const QIcon::Mode mode = comboBox->state & State_Enabled ? QIcon::Normal : QIcon::Disabled;
+                const QPixmap pixmap = comboBox->currentIcon.pixmap(comboBox->iconSize, mode);
                 QRect iconRect(editRect);
-                iconRect.setWidth(comboBox->iconSize.width() + 4);
+                iconRect.setWidth(comboBox->iconSize.width() + frameW);
                 iconRect = alignedRect(comboBox->direction,
                                        Qt::AlignLeft | Qt::AlignVCenter,
@@ -1329,15 +1385,17 @@
 
                 if (comboBox->direction == Qt::RightToLeft)
-                    editRect.translate(-4 - comboBox->iconSize.width(), 0);
+                    editRect.setRight(editRect.right() - frameW - comboBox->iconSize.width());
                 else
-                    editRect.translate(comboBox->iconSize.width() + 4, 0);
+                    editRect.setLeft(comboBox->iconSize.width() + frameW);
             }
             if (!comboBox->currentText.isEmpty() && !comboBox->editable) {
+                const Qt::TextElideMode elideMode = (comboBox->direction == Qt::LeftToRight) ? Qt::ElideRight : Qt::ElideLeft;
+                const QString text = comboBox->fontMetrics.elidedText(comboBox->currentText, elideMode, editRect.width());
+
                 QCommonStyle::drawItemText(painter,
-                            editRect.adjusted(QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth), 0, -1, 0),
+                            editRect.adjusted(QS60StylePrivate::pixelMetric(PM_FrameCornerWidth), 0, -1, 0),
                             visualAlignment(comboBox->direction, Qt::AlignLeft | Qt::AlignVCenter),
-                            comboBox->palette, comboBox->state & State_Enabled, comboBox->currentText);
-            }
-            painter->restore();
+                            comboBox->palette, comboBox->state & State_Enabled, text);
+            }
         }
         break;
@@ -1350,6 +1408,6 @@
 
             painter->setClipRect(voptAdj.rect);
-            const bool isSelected = (vopt->state & QStyle::State_Selected);
-            const bool hasFocus = (vopt->state & QStyle::State_HasFocus);
+            const bool isSelected = (vopt->state & State_Selected);
+            const bool hasFocus = (vopt->state & State_HasFocus);
 
             bool isScrollBarVisible = false;
@@ -1380,51 +1438,11 @@
             if (vopt->backgroundBrush == Qt::NoBrush) {
                 if (itemView) {
-                    const QModelIndex index = vopt->index;
-                    //todo: Draw cell background only once - for the first cell.
-                    QStyleOptionViewItemV4 voptAdj2 = voptAdj;
-                    const QModelIndex indexFirst = itemView->model()->index(0, 0);
-                    const QModelIndex indexLast = itemView->model()->index(
-                            itemView->model()->rowCount() - 1, itemView->model()->columnCount() -1);
-                    if (itemView->viewport())
-                        voptAdj2.rect = QRect( itemView->visualRect(indexFirst).topLeft(),
-                                itemView->visualRect(indexLast).bottomRight()).intersect(itemView->viewport()->rect());
                     drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);
                 }
             } else { QCommonStyle::drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);}
 
-            // draw the focus rect
-            if (isSelected | hasFocus) {
-                QRect highlightRect = option->rect.adjusted(1,1,-1,-1);
-                QAbstractItemView::SelectionBehavior selectionBehavior =
-                    itemView ? itemView->selectionBehavior() : QAbstractItemView::SelectItems;
-                if (selectionBehavior != QAbstractItemView::SelectItems) {
-                    // set highlight rect so that it is continuous from cell to cell, yet sligthly
-                    // smaller than cell rect
-                    int xBeginning = 0, yBeginning = 0, xEnd = 0, yEnd = 0;
-                    if (selectionBehavior == QAbstractItemView::SelectRows) {
-                        yBeginning = 1; yEnd = -1;
-                        if (vopt->viewItemPosition == QStyleOptionViewItemV4::Beginning)
-                            xBeginning = 1;
-                        else if (vopt->viewItemPosition == QStyleOptionViewItemV4::End)
-                            xEnd = -1;
-                    } else if (selectionBehavior == QAbstractItemView::SelectColumns) {
-                        xBeginning = 1; xEnd = -1;
-                        if (vopt->viewItemPosition == QStyleOptionViewItemV4::Beginning)
-                            yBeginning = 1;
-                        else if (vopt->viewItemPosition == QStyleOptionViewItemV4::End)
-                            yEnd = -1;
-                    }
-                    highlightRect = option->rect.adjusted(xBeginning, yBeginning, xEnd, yEnd);
-                }
-                if (vopt->showDecorationSelected &&
-                    (vopt->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()))
-                    QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, highlightRect, flags);
-                else
-                    painter->fillRect(highlightRect, vopt->palette.highlight());
-            }
-
              // draw the icon
-             const QIcon::Mode mode = (voptAdj.state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled;
-             const QIcon::State state = voptAdj.state & QStyle::State_Open ? QIcon::On : QIcon::Off;
+             const QIcon::Mode mode = (voptAdj.state & State_Enabled) ? QIcon::Normal : QIcon::Disabled;
+             const QIcon::State state = (voptAdj.state & State_Open) ? QIcon::On : QIcon::Off;
              voptAdj.icon.paint(painter, iconRect, voptAdj.decorationAlignment, mode, state);
 
@@ -1433,32 +1451,36 @@
                  const bool singleSelection =
                      (itemView->selectionMode() == QAbstractItemView::SingleSelection ||
-                      itemView->selectionMode() == QAbstractItemView::NoSelection);
+                      itemView->selectionMode() == QAbstractItemView::NoSelection)||
+                     (itemView->selectionModel()->selectedIndexes().count() < 2 );
+
+                 const bool selectItemsOnly = (itemView->selectionBehavior() == QAbstractItemView::SelectItems);
+
                  const QRect selectionRect = subElementRect(SE_ItemViewItemCheckIndicator, &voptAdj, widget);
 
                  QStyleOptionViewItemV4 checkMarkOption(voptAdj);
+                 if (selectionRect.isValid())
+                     checkMarkOption.rect = selectionRect;
                  // Draw selection mark.
-                 if (voptAdj.state & QStyle::State_Selected && !singleSelection) {
-                     checkMarkOption.rect = selectionRect;
-                     drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget);
-                     if ( textRect.right() > selectionRect.left() )
+                 if (isSelected && !singleSelection && selectItemsOnly) {
+                     proxy()->drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget);
+                     // @todo: this should happen in the rect retrievel i.e. subElementRect()
+                     if (textRect.right() > selectionRect.left())
                          textRect.setRight(selectionRect.left());
                  } else if (singleSelection &&
-                     voptAdj.features & QStyleOptionViewItemV2::HasCheckIndicator &&
-                     selectionRect.isValid()) {
-                     checkMarkOption.rect = selectionRect;
-                     checkMarkOption.state = checkMarkOption.state & ~QStyle::State_HasFocus;
+                     voptAdj.features & QStyleOptionViewItemV2::HasCheckIndicator) {
+                     checkMarkOption.state = checkMarkOption.state & ~State_HasFocus;
 
                      switch (vopt->checkState) {
                      case Qt::Unchecked:
-                         checkMarkOption.state |= QStyle::State_Off;
+                         checkMarkOption.state |= State_Off;
                          break;
                      case Qt::PartiallyChecked:
-                         checkMarkOption.state |= QStyle::State_NoChange;
+                         checkMarkOption.state |= State_NoChange;
                          break;
                      case Qt::Checked:
-                         checkMarkOption.state |= QStyle::State_On;
+                         checkMarkOption.state |= State_On;
                          break;
                      }
-                     drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget);
+                     drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget);
                  }
              }
@@ -1466,13 +1488,8 @@
              // draw the text
             if (!voptAdj.text.isEmpty()) {
-                if (isSelected) {
-                    if (qobject_cast<const QTableView *>(widget))
-                        voptAdj.palette.setColor(
-                            QPalette::Text, QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0));
-                    else
-                        voptAdj.palette.setColor(
-                            QPalette::Text, QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 10, 0));
-                }
-                painter->setPen(voptAdj.palette.text().color());
+                if (isSelected || hasFocus )
+                    painter->setPen(voptAdj.palette.highlightedText().color());
+                else
+                    painter->setPen(voptAdj.palette.text().color());
                 d->viewItemDrawText(painter, &voptAdj, textRect);
             }
@@ -1485,5 +1502,5 @@
         if (const QStyleOptionTabV3 *optionTab = qstyleoption_cast<const QStyleOptionTabV3 *>(option)) {
             QStyleOptionTabV3 optionTabAdj = *optionTab;
-            const bool isSelected = optionTab->state & QStyle::State_Selected;
+            const bool isSelected = optionTab->state & State_Selected;
             const bool directionMirrored = (optionTab->direction == Qt::RightToLeft);
             QS60StylePrivate::SkinElements skinElement;
@@ -1511,29 +1528,45 @@
                     break;
             }
-            if (skinElement==QS60StylePrivate::SE_TabBarTabEastInactive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabNorthInactive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabSouthInactive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabWestInactive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabEastActive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabNorthActive||
-                    skinElement==QS60StylePrivate::SE_TabBarTabSouthActive||
+            if (skinElement == QS60StylePrivate::SE_TabBarTabEastInactive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabNorthInactive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabSouthInactive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabWestInactive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabEastActive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabNorthActive ||
+                    skinElement == QS60StylePrivate::SE_TabBarTabSouthActive ||
                     skinElement==QS60StylePrivate::SE_TabBarTabWestActive) {
                 const int borderThickness =
-                    QS60StylePrivate::pixelMetric(QStyle::PM_DefaultFrameWidth);
+                    QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
                 const int tabOverlap =
-                    QS60StylePrivate::pixelMetric(QStyle::PM_TabBarTabOverlap) - borderThickness;
-                //todo: draw navi wipe behind tabbar - must be drawn with first draw
-
-                if (skinElement==QS60StylePrivate::SE_TabBarTabEastInactive||
-                        skinElement==QS60StylePrivate::SE_TabBarTabEastActive||
-                        skinElement==QS60StylePrivate::SE_TabBarTabWestInactive||
-                        skinElement==QS60StylePrivate::SE_TabBarTabWestActive){
-                    optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
+                    QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
+                const bool usesScrollButtons = 
+                    (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
+                const int roomForScrollButton = 
+                    usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0;
+
+                // adjust for overlapping tabs and scrollbuttons, if necessary
+                if (skinElement == QS60StylePrivate::SE_TabBarTabEastInactive ||
+                        skinElement == QS60StylePrivate::SE_TabBarTabEastActive ||
+                        skinElement == QS60StylePrivate::SE_TabBarTabWestInactive ||
+                        skinElement == QS60StylePrivate::SE_TabBarTabWestActive){
+                    if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+                        optionTabAdj.rect.adjust(0, roomForScrollButton, 0, tabOverlap);
+                    else if (optionTabAdj.position == QStyleOptionTabV3::End)
+                        optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
+                    else
+                        optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
                 } else {
-                    if (directionMirrored)
-                        optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0);
-                    else
-                        optionTabAdj.rect.adjust(0, 0, tabOverlap, 0);
+                    if (directionMirrored) {
+                        if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+                            optionTabAdj.rect.adjust(-tabOverlap, 0, -roomForScrollButton, 0);
+                        else
+                            optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0);
+                    } else {
+                        if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+                            optionTabAdj.rect.adjust(roomForScrollButton, 0, tabOverlap, 0);
+                        else
+                            optionTabAdj.rect.adjust(0, 0, tabOverlap, 0);
                     }
+                }
             }
             QS60StylePrivate::drawSkinElement(skinElement, painter, optionTabAdj.rect, flags);
@@ -1545,8 +1578,11 @@
             QRect tr = optionTab.rect;
             const bool directionMirrored = (optionTab.direction == Qt::RightToLeft);
-            const int borderThickness = QS60StylePrivate::pixelMetric(QStyle::PM_DefaultFrameWidth);
+            const int borderThickness = QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
             const int tabOverlap =
-                QS60StylePrivate::pixelMetric(QStyle::PM_TabBarTabOverlap) - borderThickness;
-            const QRect windowRect = painter->window();
+                QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
+            const bool usesScrollButtons = 
+                (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
+            const int roomForScrollButton = 
+                usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0;
 
             switch (tab->shape) {
@@ -1576,5 +1612,5 @@
             if (selected)
                 optionTab.palette.setColor(QPalette::Active, QPalette::WindowText,
-                    QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 3, option));
+                    optionTab.palette.highlightedText().color());
 
             const bool verticalTabs = optionTab.shape == QTabBar::RoundedEast
@@ -1582,4 +1618,15 @@
                                 || optionTab.shape == QTabBar::TriangularEast
                                 || optionTab.shape == QTabBar::TriangularWest;
+
+            //make room for scrollbuttons
+            if (!verticalTabs) {
+                if ((tab->position == QStyleOptionTabV3::Beginning && !directionMirrored))
+                    tr.adjust(roomForScrollButton, 0, 0, 0);
+                else if ((tab->position == QStyleOptionTabV3::Beginning && directionMirrored))
+                    tr.adjust(0, 0, -roomForScrollButton, 0);
+            } else {
+                if (tab->position == QStyleOptionTabV3::Beginning)
+                    tr.adjust(0, roomForScrollButton, 0, 0);
+            }
 
             if (verticalTabs) {
@@ -1601,10 +1648,10 @@
                 painter->setTransform(m, true);
             }
-            tr.adjust(0, 0, pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget),
-                            pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget));
+            tr.adjust(0, 0, pixelMetric(PM_TabBarTabShiftHorizontal, tab, widget),
+                            pixelMetric(PM_TabBarTabShiftVertical, tab, widget));
 
             if (selected) {
-                tr.setBottom(tr.bottom() - pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget));
-                tr.setRight(tr.right() - pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget));
+                tr.setBottom(tr.bottom() - pixelMetric(PM_TabBarTabShiftVertical, tab, widget));
+                tr.setRight(tr.right() - pixelMetric(PM_TabBarTabShiftHorizontal, tab, widget));
             }
 
@@ -1614,7 +1661,8 @@
             if (!optionTab.icon.isNull()) {
                 QSize iconSize = optionTab.iconSize;
-                int iconExtent = pixelMetric(PM_TabBarIconSize);
-                if (iconSize.height() > iconExtent || iconSize.width() > iconExtent)
+                if (!iconSize.isValid()) {
+                    const int iconExtent = pixelMetric(PM_TabBarIconSize);
                     iconSize = QSize(iconExtent, iconExtent);
+                }
                 QPixmap tabIcon = optionTab.icon.pixmap(iconSize,
                     (optionTab.state & State_Enabled) ? QIcon::Normal : QIcon::Disabled);
@@ -1627,5 +1675,5 @@
                                         tr.center().y() - (tabIcon.height() >> 1),
                                         tabIcon);
-                tr.setLeft(tr.left() + iconSize.width() + 4);
+                tr.setLeft(tr.left() + iconSize.width() + 4); //todo: magic four
             }
 
@@ -1709,5 +1757,6 @@
                 text_flags |= Qt::TextHideMnemonic;
 
-            if ((option->state & State_Selected) && (option->state & State_Enabled))
+            const bool selected = (option->state & State_Selected) && (option->state & State_Enabled);
+            if (selected)
                 QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, option->rect, flags);
 
@@ -1716,11 +1765,14 @@
 
             //todo: move the vertical spacing stuff into subElementRect
-            const int vSpacing = QS60StylePrivate::pixelMetric(QStyle::PM_LayoutVerticalSpacing);
+            const int vSpacing = QS60StylePrivate::pixelMetric(PM_LayoutVerticalSpacing);
             if (checkable){
-                const int hSpacing = QS60StylePrivate::pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
+                const int hSpacing = QS60StylePrivate::pixelMetric(PM_LayoutHorizontalSpacing);
                 QStyleOptionMenuItem optionCheckBox;
                 optionCheckBox.QStyleOptionMenuItem::operator=(*menuItem);
                 optionCheckBox.rect.setWidth(pixelMetric(PM_IndicatorWidth));
                 optionCheckBox.rect.setHeight(pixelMetric(PM_IndicatorHeight));
+                optionCheckBox.rect.moveCenter(QPoint(
+                        optionCheckBox.rect.center().x(), 
+                        menuItem->rect.center().y()));
                 const int moveByX = optionCheckBox.rect.width() + vSpacing;
                 if (optionMenuItem.direction == Qt::LeftToRight) {
@@ -1756,5 +1808,5 @@
                 arrowOptions.QStyleOption::operator=(*menuItem);
                 const int indicatorWidth = (pixelMetric(PM_ListViewIconSize, option, widget) >> 1) +
-                    pixelMetric(QStyle::PM_LayoutVerticalSpacing, option, widget);
+                    pixelMetric(PM_LayoutVerticalSpacing, option, widget);
                 if (optionMenuItem.direction == Qt::LeftToRight)
                     arrowOptions.rect.setLeft(textRect.right());
@@ -1779,4 +1831,8 @@
                 painter->setOpacity(0.5);
             }
+            if (selected)
+                optionMenuItem.palette.setColor(
+                    QPalette::Active, QPalette::Text, optionMenuItem.palette.highlightedText().color());
+
             QCommonStyle::drawItemText(painter, textRect, text_flags,
                     optionMenuItem.palette, enabled,
@@ -1800,6 +1856,6 @@
             QPen linePen = QPen(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors, 1, header));
             const int penWidth = (header->orientation == Qt::Horizontal) ?
-                linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth)
-                : linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth);
+                linePen.width() + QS60StylePrivate::pixelMetric(PM_BoldLineWidth)
+                : linePen.width() + QS60StylePrivate::pixelMetric(PM_ThinLineWidth);
             linePen.setWidth(penWidth);
             painter->setPen(linePen);
@@ -1820,5 +1876,5 @@
                 QStyleOptionHeader subopt = *header;
                 const int borderTweak =
-                    QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                    QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 if (subopt.direction == Qt::LeftToRight)
                     subopt.rect.adjust(borderTweak, borderTweak, 0, -borderTweak);
@@ -1896,5 +1952,5 @@
         if (const QTextEdit *textEdit = qobject_cast<const QTextEdit *>(widget)) {
             const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(option);
-            if (QS60StylePrivate::canDrawThemeBackground(frame->palette.base()))
+            if (QS60StylePrivate::canDrawThemeBackground(frame->palette.base(), widget))
                 QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_Editor, painter, option->rect, flags);
             else
@@ -1928,9 +1984,4 @@
         break;
     case CE_FocusFrame: {
-            // The pen width should nearly fill the layoutspacings around the widget
-            const int penWidth =
-                qMin(pixelMetric(QS60Style::PM_LayoutVerticalSpacing), pixelMetric(QS60Style::PM_LayoutHorizontalSpacing))
-                - 2; // But keep 1 pixel distance to the focus widget and 1 pixel to the adjacent widgets
-
 #ifdef QT_KEYPAD_NAVIGATION
             bool editFocus = false;
@@ -1939,27 +1990,29 @@
                     editFocus = true;
             }
-            const qreal opacity = editFocus ? 0.65 : 0.45; // Trial and error factors. Feel free to improve.
+            const qreal opacity = editFocus ? 1 : 0.75; // Trial and error factors. Feel free to improve.
 #else
-            const qreal opacity = 0.5;
+            const qreal opacity = 0.85;
 #endif
-            // Because of Qts coordinate system, we need to tweak the rect by .5 pixels, otherwise it gets blurred.
-            const qreal rectAdjustment = (penWidth % 2) ? -.5 : 0;
-
-            // Make sure that the pen stroke is inside the rect
-            const QRectF adjustedRect =
-                QRectF(option->rect).adjusted(
-                    rectAdjustment + penWidth,
-                    rectAdjustment + penWidth,
-                    -rectAdjustment - penWidth,
-                    -rectAdjustment - penWidth
-                );
-
-            const qreal roundRectRadius = penWidth * goldenRatio;
+            // We need to reduce the focus frame size if LayoutSpacing is smaller than FocusFrameMargin
+            // Otherwise, we would overlay adjacent widgets.
+            const int frameHeightReduction =
+                    qMin(0, pixelMetric(PM_LayoutVerticalSpacing)
+                            - pixelMetric(PM_FocusFrameVMargin));
+            const int frameWidthReduction =
+                    qMin(0, pixelMetric(PM_LayoutHorizontalSpacing)
+                            - pixelMetric(PM_FocusFrameHMargin));
+            const int rounding =
+                    qMin(pixelMetric(PM_FocusFrameVMargin),
+                            pixelMetric(PM_LayoutVerticalSpacing));
+            const QRect frameRect =
+                    option->rect.adjusted(-frameWidthReduction, -frameHeightReduction,
+                            frameWidthReduction, frameHeightReduction);
+            QPainterPath framePath;
+            framePath.addRoundedRect(frameRect, rounding, rounding);
 
             painter->save();
             painter->setRenderHint(QPainter::Antialiasing);
             painter->setOpacity(opacity);
-            painter->setPen(QPen(option->palette.color(QPalette::Text), penWidth));
-            painter->drawRoundedRect(adjustedRect, roundRectRadius, roundRectRadius);
+            painter->fillPath(framePath, option->palette.color(QPalette::Text));
             painter->restore();
         }
@@ -1986,5 +2039,4 @@
 void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
 {
-    Q_D(const QS60Style);
     const QS60StylePrivate::SkinElementFlags flags = (option->state & State_Enabled) ?  QS60StylePrivate::SF_StateEnabled : QS60StylePrivate::SF_StateDisabled;
     bool commonStyleDraws = false;
@@ -1994,11 +2046,15 @@
             //Draw themed highlight to radiobuttons and checkboxes.
             //For other widgets skip, unless palette has been modified. In that case, draw with commonstyle.
-            if (option->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color())
+            if (option->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()) {
                 if ((qstyleoption_cast<const QStyleOptionFocusRect *>(option) &&
                     (qobject_cast<const QRadioButton *>(widget) || qobject_cast<const QCheckBox *>(widget))))
-                        QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, option->rect, flags);
-            else
+                        QS60StylePrivate::drawSkinElement(
+                            QS60StylePrivate::isWidgetPressed(widget) ? 
+                                QS60StylePrivate::SE_ListItemPressed : 
+                                QS60StylePrivate::SE_ListHighlight, painter, option->rect, flags);
+            } else {
                 commonStyleDraws = true;
             }
+        }
         break;
 #ifndef QT_NO_LINEEDIT
@@ -2009,5 +2065,5 @@
                 break;
 #endif
-            if (QS60StylePrivate::canDrawThemeBackground(option->palette.base()))
+            if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget))
                 QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_FrameLineEdit, painter, option->rect, flags);
             else
@@ -2018,10 +2074,10 @@
     case PE_IndicatorCheckBox: {
             // Draw checkbox indicator as color skinned graphics.
-            const QS60StyleEnums::SkinParts skinPart = (option->state & QStyle::State_On) ?
+            const QS60StyleEnums::SkinParts skinPart = (option->state & State_On) ?
                 QS60StyleEnums::SP_QgnIndiCheckboxOn : QS60StyleEnums::SP_QgnIndiCheckboxOff;
             painter->save();
 
-            QColor themeColor = QS60StylePrivate::themePalette()->windowText().color();
-            QColor windowTextColor = option->palette.windowText().color();
+            const QColor themeColor = QS60StylePrivate::themePalette()->windowText().color();
+            const QColor windowTextColor = option->palette.windowText().color();
 
             if (themeColor != windowTextColor)
@@ -2034,16 +2090,16 @@
     case PE_IndicatorViewItemCheck:
 #ifndef QT_NO_ITEMVIEWS
-        if (const QListView *listItem = (qobject_cast<const QListView *>(widget))) {
+        if (const QAbstractItemView *itemView = (qobject_cast<const QAbstractItemView *>(widget))) {
             if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) {
                 const bool checkBoxVisible = vopt->features & QStyleOptionViewItemV2::HasCheckIndicator;
-                const bool singleSelection = listItem->selectionMode() ==
-                    QAbstractItemView::SingleSelection || listItem->selectionMode() == QAbstractItemView::NoSelection;
+                const bool singleSelection = itemView->selectionMode() ==
+                    QAbstractItemView::SingleSelection || itemView->selectionMode() == QAbstractItemView::NoSelection;
                 // draw either checkbox at the beginning
                 if (checkBoxVisible && singleSelection) {
                     drawPrimitive(PE_IndicatorCheckBox, option, painter, widget);
                 // ... or normal "tick" selection at the end.
-                } else if (option->state & QStyle::State_Selected) {
+                } else if (option->state & State_Selected) {
                     QRect tickRect = option->rect;
-                    const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth);
+                    const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth);
                     // adjust tickmark rect to exclude frame border
                     tickRect.adjust(0, -frameBorderWidth, 0, -frameBorderWidth);
@@ -2070,6 +2126,6 @@
 
             painter->save();
-            QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnTextColors, 6, option);
-            QColor buttonTextColor = option->palette.buttonText().color();
+            const QColor themeColor = QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 6, option);
+            const QColor buttonTextColor = option->palette.buttonText().color();
             if (themeColor != buttonTextColor)
                 painter->setPen(buttonTextColor);
@@ -2078,5 +2134,5 @@
 
             // Draw radiobutton indicator as color skinned graphics.
-            QS60StyleEnums::SkinParts skinPart = (option->state & QStyle::State_On) ?
+            QS60StyleEnums::SkinParts skinPart = (option->state & State_On) ?
                 QS60StyleEnums::SP_QgnIndiRadiobuttOn : QS60StyleEnums::SP_QgnIndiRadiobuttOff;
             QS60StylePrivate::drawSkinPart(skinPart, painter, buttonRect,
@@ -2089,6 +2145,6 @@
     case PE_PanelButtonBevel:
     case PE_FrameButtonBevel:
-        if (QS60StylePrivate::canDrawThemeBackground(option->palette.base())) {
-            const bool isPressed = option->state & QStyle::State_Sunken;
+        if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget)) {
+            const bool isPressed = option->state & State_Sunken;
             const QS60StylePrivate::SkinElements skinElement =
                 isPressed ? QS60StylePrivate::SE_ButtonPressed : QS60StylePrivate::SE_ButtonNormal;
@@ -2121,10 +2177,10 @@
     case PE_IndicatorSpinUp:
         if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
-            if (QS60StylePrivate::canDrawThemeBackground(spinBox->palette.base())) {
+            if (QS60StylePrivate::canDrawThemeBackground(spinBox->palette.base(), widget)) {
                 QStyleOptionSpinBox optionSpinBox = *spinBox;
                 const QS60StyleEnums::SkinParts part = (element == PE_IndicatorSpinUp) ?
                     QS60StyleEnums::SP_QgnGrafScrollArrowUp :
                     QS60StyleEnums::SP_QgnGrafScrollArrowDown;
-                const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 optionSpinBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin );
                 QS60StylePrivate::drawSkinPart(part, painter, optionSpinBox.rect, flags);
@@ -2136,9 +2192,9 @@
 #ifndef QT_NO_COMBOBOX
         if (const QStyleOptionFrame *cmb = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
-            if (QS60StylePrivate::canDrawThemeBackground( option->palette.base())) {
+            if (QS60StylePrivate::canDrawThemeBackground( option->palette.base(), widget)) {
                 // We want to draw down arrow here for comboboxes as well.
                 QStyleOptionFrame optionsComboBox = *cmb;
                 const QS60StyleEnums::SkinParts part = QS60StyleEnums::SP_QgnGrafScrollArrowDown;
-                const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 optionsComboBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin );
                 QS60StylePrivate::drawSkinPart(part, painter, optionsComboBox.rect, flags);
@@ -2175,8 +2231,8 @@
             ) {
             //Need extra check since dialogs have their own theme background
-            if (QS60StylePrivate::canDrawThemeBackground(option->palette.base()) &&
+            if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget) &&
                 option->palette.window().texture().cacheKey() ==
                     QS60StylePrivate::m_themePalette->window().texture().cacheKey())
-                QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_OptionsMenu, painter, option->rect, flags);
+                QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_PopupBackground, painter, option->rect, flags);
             else
                 commonStyleDraws = true;
@@ -2217,4 +2273,55 @@
 #ifndef QT_NO_ITEMVIEWS
     case PE_PanelItemViewItem:
+        if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) {
+            const bool isSelected = (vopt->state & State_Selected);
+            const bool hasFocus = (vopt->state & State_HasFocus);
+            const bool isPressed = QS60StylePrivate::isWidgetPressed(widget);
+
+            if (option->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()) {
+                QRect highlightRect = vopt->rect.adjusted(1,1,-1,-1);
+                const QAbstractItemView *itemView = qobject_cast<const QAbstractItemView *>(widget);
+                QAbstractItemView::SelectionBehavior selectionBehavior =
+                    itemView ? itemView->selectionBehavior() : QAbstractItemView::SelectItems;
+                // Set the draw area for highlights (focus, select rect or pressed rect)
+                if (hasFocus || isSelected || isPressed) {
+                    if (selectionBehavior != QAbstractItemView::SelectItems) {
+                        // set highlight rect so that it is continuous from cell to cell, yet sligthly
+                        // smaller than cell rect
+                        int xBeginning = 0, yBeginning = 0, xEnd = 0, yEnd = 0;
+                        if (selectionBehavior == QAbstractItemView::SelectRows) {
+                            yBeginning = 1; yEnd = -1;
+                            if (vopt->viewItemPosition == QStyleOptionViewItemV4::Beginning)
+                                xBeginning = 1;
+                            else if (vopt->viewItemPosition == QStyleOptionViewItemV4::End)
+                                xEnd = -1;
+                        } else if (selectionBehavior == QAbstractItemView::SelectColumns) {
+                            xBeginning = 1; xEnd = -1;
+                            if (vopt->viewItemPosition == QStyleOptionViewItemV4::Beginning)
+                                yBeginning = 1;
+                            else if (vopt->viewItemPosition == QStyleOptionViewItemV4::End)
+                                yEnd = -1;
+                        }
+                        highlightRect = option->rect.adjusted(xBeginning, yBeginning, xEnd, yEnd);
+                    }
+                }
+                bool tableView = false;
+                if (itemView && qobject_cast<const QTableView *>(widget))
+                    tableView = true;
+
+                QS60StylePrivate::SkinElements element;
+                QRect elementRect = option->rect;
+
+                //draw item is drawn as pressed, if it already has focus.
+                if (isPressed && (hasFocus || isSelected)) {
+                    element = tableView ? QS60StylePrivate::SE_TableItemPressed : QS60StylePrivate::SE_ListItemPressed;
+                } else if (hasFocus || (isSelected && selectionBehavior != QAbstractItemView::SelectItems)) {
+                    element = QS60StylePrivate::SE_ListHighlight;
+                    elementRect = highlightRect;
+                }
+                QS60StylePrivate::drawSkinElement(element, painter, elementRect, flags);
+            } else {
+                QCommonStyle::drawPrimitive(element, option, painter, widget);
+            }
+        }
         break;
 #endif //QT_NO_ITEMVIEWS
@@ -2249,37 +2356,41 @@
             QCommonStyle::drawPrimitive(element, option, painter, widget);
         } else {
-            const bool rightLine = option->state & State_Item;
-            const bool downLine = option->state & State_Sibling;
-            const bool upLine = option->state & (State_Open | State_Children | State_Item | State_Sibling);
-
-            QS60StyleEnums::SkinParts skinPart;
-            bool drawSkinPart = false;
-            if (rightLine && downLine && upLine) {
-                skinPart = QS60StyleEnums::SP_QgnIndiHlLineBranch;
-                drawSkinPart = true;
-            } else if (rightLine && upLine) {
-                skinPart = QS60StyleEnums::SP_QgnIndiHlLineEnd;
-                drawSkinPart = true;
-            } else if (upLine && downLine) {
-                skinPart = QS60StyleEnums::SP_QgnIndiHlLineStraight;
-                drawSkinPart = true;
-            }
-
-            if (drawSkinPart)
-                QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, flags);
-
-            if (option->state & State_Children) {
-                QS60StyleEnums::SkinParts skinPart =
-                        (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper;
-                int minDimension = qMin(option->rect.width(), option->rect.height());
-                const int resizeValue = minDimension >> 1;
-                minDimension += resizeValue; // Adjust the icon bigger because of empty space in svg icon.
-                QRect iconRect(option->rect.topLeft(), QSize(minDimension, minDimension));
-                int verticalMagic(0);
-                // magic values for positioning svg icon.
-                if (option->rect.width() <= option->rect.height())
-                    verticalMagic = 3;
-                iconRect.translate(3, verticalMagic - resizeValue);
-                QS60StylePrivate::drawSkinPart(skinPart, painter, iconRect, flags);
+            if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast<const QStyleOptionViewItemV2 *>(option)) {
+                const bool rightLine = option->state & State_Item;
+                const bool downLine = option->state & State_Sibling;
+                const bool upLine = option->state & (State_Open | State_Children | State_Item | State_Sibling);
+                QS60StylePrivate::SkinElementFlags adjustedFlags = flags;
+
+                QS60StyleEnums::SkinParts skinPart;
+                bool drawSkinPart = false;
+                if (rightLine && downLine && upLine) {
+                    skinPart = QS60StyleEnums::SP_QgnIndiHlLineBranch;
+                    drawSkinPart = true;
+                } else if (rightLine && upLine) {
+                    skinPart = QS60StyleEnums::SP_QgnIndiHlLineEnd;
+                    drawSkinPart = true;
+                } else if (upLine && downLine) {
+                    skinPart = QS60StyleEnums::SP_QgnIndiHlLineStraight;
+                    drawSkinPart = true;
+                }
+
+                if (option->direction == Qt::RightToLeft)
+                    adjustedFlags |= QS60StylePrivate::SF_Mirrored_X_Axis;
+
+                if (drawSkinPart)
+                    QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, adjustedFlags);
+
+                if (option->state & State_Children) {
+                    QS60StyleEnums::SkinParts skinPart =
+                            (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper;
+                    const QRect selectionRect = subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget);
+                    const int minDimension = qMin(option->rect.width(), option->rect.height());
+                    const int magicTweak = (option->direction == Qt::RightToLeft) ? -3 : 3; //@todo: magic
+                    //The branch indicator icon in S60 is supposed to be superimposed on top of branch lines.
+                    QRect iconRect(QPoint(option->rect.left() + magicTweak, selectionRect.top() + 1), QSize(minDimension, minDimension));
+                    if (!QS60StylePrivate::isTouchSupported())
+                        iconRect.translate(0, -4); //@todo: magic
+                    QS60StylePrivate::drawSkinPart(skinPart, painter, iconRect, adjustedFlags);
+                }
             }
         }
@@ -2292,6 +2403,6 @@
                 commonStyleDraws = true;
             } else {
-                QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
-                if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active))
+                QPalette::ColorGroup cg = vopt->state & State_Enabled ? QPalette::Normal : QPalette::Disabled;
+                if (cg == QPalette::Normal && !(vopt->state & State_Active))
                     cg = QPalette::Inactive;
                 if (vopt->features & QStyleOptionViewItemV2::Alternate)
@@ -2304,5 +2415,10 @@
     case PE_PanelScrollAreaCorner:
         break;
-
+    case PE_IndicatorItemViewItemDrop:
+        if (QS60StylePrivate::isTouchSupported())
+            QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_DropArea, painter, option->rect, flags);
+        else
+            commonStyleDraws = true;
+        break;
         // todo: items are below with #ifdefs "just in case". in final version, remove all non-required cases
     case PE_FrameLineEdit:
@@ -2325,5 +2441,4 @@
 #ifndef QT_NO_COLUMNVIEW
     case PE_IndicatorColumnViewArrow:
-    case PE_IndicatorItemViewItemDrop:
 #endif //QT_NO_COLUMNVIEW
     case PE_FrameTabBarBase: // since tabs are in S60 always in navipane, let's use common style for tab base in Qt.
@@ -2343,11 +2458,8 @@
         metricValue = QCommonStyle::pixelMetric(metric, option, widget);
 
-    if (metric == PM_SubMenuOverlap && widget) {
-        const QMenu *menu = qobject_cast<const QMenu *>(widget);
-        if (menu && menu->activeAction() && menu->activeAction()->menu()) {
-            const int menuWidth = menu->activeAction()->menu()->sizeHint().width();
-            metricValue = -menuWidth;
-        }
-    }
+    // Menu scrollers should be set to zero height for combobox popups
+    if (metric == PM_MenuScrollerHeight && !qobject_cast<const QMenu *>(widget))
+        metricValue = 0;
+
     //if layout direction is mirrored, switch left and right border margins
     if (option && option->direction == Qt::RightToLeft) {
@@ -2357,4 +2469,16 @@
             metricValue = QS60StylePrivate::pixelMetric(PM_LayoutLeftMargin);
     }
+
+    if (widget && (metric == PM_LayoutTopMargin))
+        if (widget->windowType() == Qt::Dialog)
+            //double the top layout margin for dialogs, it is very close to real value
+            //without having to define custom pixel metric
+            metricValue *= 2;
+
+    if (widget && (metric == PM_FocusFrameHMargin))
+        if (qobject_cast<const QTableView *>(widget))
+            //Halve the focus frame margin for table items
+            metricValue /= 2;
+
     return metricValue;
 }
@@ -2377,8 +2501,18 @@
             sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
             //FIXME properly - style should calculate the location of border frame-part
-            sz += QSize(2 * pixelMetric(PM_ButtonMargin), 2 * pixelMetric(PM_ButtonMargin));
-            if (const QAbstractButton *buttonWidget = (qobject_cast<const QAbstractButton *>(widget)))
+            if (const QAbstractButton *buttonWidget = (qobject_cast<const QAbstractButton *>(widget)))  {
                 if (buttonWidget->isCheckable())
                     sz += QSize(pixelMetric(PM_IndicatorWidth) + pixelMetric(PM_CheckBoxLabelSpacing), 0);
+                const int iconHeight = (!buttonWidget->icon().isNull()) ? buttonWidget->iconSize().height() : 0;
+                const int textHeight = (buttonWidget->text().length() > 0) ?
+                    buttonWidget->fontMetrics().size(Qt::TextSingleLine, buttonWidget->text()).height() : opt->fontMetrics.height();
+                const int decoratorHeight = (buttonWidget->isCheckable()) ? pixelMetric(PM_IndicatorHeight) : 0;
+
+                const int contentHeight =
+                        qMax(qMax(iconHeight, decoratorHeight) + pixelMetric(PM_ButtonMargin),
+                             textHeight + 2*pixelMetric(PM_ButtonMargin));
+                sz.setHeight(qMax(sz.height(), contentHeight));
+                sz += QSize(2 * pixelMetric(PM_ButtonMargin), 0);
+            }
             break;
         case CT_LineEdit:
@@ -2391,30 +2525,43 @@
                 if (naviPaneSize.height() > sz.height())
                     sz.setHeight(naviPaneSize.height());
-            }
-            break;
+                // Adjust beginning tabbar item size, if scrollbuttons are used. This is to ensure that the
+                // tabbar item content fits, since scrollbuttons are making beginning tabbar item smaller.
+                int scrollButtonSize = 0;
+                if (const QTabBar *tabBar = qobject_cast<const QTabBar *>(widget))
+                    scrollButtonSize = tabBar->usesScrollButtons() ? pixelMetric(PM_TabBarScrollButtonWidth) : 0;
+                if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(opt)) {
+                    const bool verticalTabs = tab->shape == QTabBar::RoundedEast
+                            || tab->shape == QTabBar::RoundedWest
+                            || tab->shape == QTabBar::TriangularEast
+                            || tab->shape == QTabBar::TriangularWest;
+                    if (tab->position == QStyleOptionTab::Beginning)
+                        sz += QSize(verticalTabs ? 0 : scrollButtonSize, !verticalTabs ? 0 : scrollButtonSize);
+                }
+            }
+            break;
+        case CT_MenuItem:
         case CT_ItemViewItem:
+            if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {
+                if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) {
+                    sz = QSize();
+                    break;
+                }
+            }
             sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
             if (QS60StylePrivate::isTouchSupported())
                 //Make itemview easier to use in touch devices
                 //QCommonStyle does not adjust height with horizontal margin, it only adjusts width
-                sz.setHeight(sz.height() + 2 * pixelMetric(QStyle::PM_FocusFrameVMargin));
+                sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin));
             break;
 #ifndef QT_NO_COMBOBOX
-        case CT_ComboBox:
-            if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
-               const int frameWidth = cmb->frame ? pixelMetric(PM_ComboBoxFrameWidth, opt, widget) * 2 : 0;
-               const int textMargins = 2*(pixelMetric(PM_FocusFrameHMargin) + 1);
-               const int smallestExtraWidth = 23;
-               // QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins...
-               const int extra = 
-                   qMax(smallestExtraWidth, 2*textMargins + pixelMetric(PM_ScrollBarExtent, opt, widget));
-               sz = QSize(sz.width() + frameWidth + extra, sz.height() + frameWidth);
-               int maxScreenWidth = QApplication::desktop()->availableGeometry().size().width();
-               if (sz.width() > maxScreenWidth) {
-                   maxScreenWidth = maxScreenWidth - (extra + frameWidth);
-                   sz.setWidth(maxScreenWidth);
-               }
-           }
-           break;
+        case CT_ComboBox: {
+                // Fixing Ui design issues with too wide QComboBoxes and greedy SizeHints
+                // Make sure, that the combobox stays within the screen.
+                const QSize desktopContentSize = QApplication::desktop()->availableGeometry().size()
+                        - QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0);
+                sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget).
+                        boundedTo(desktopContentSize);
+            }
+            break;
 #endif
         default:
@@ -2429,6 +2576,15 @@
                             QStyleHintReturn *hret) const
 {
-    int retValue = -1;
+    int retValue = 0;
     switch (sh) {
+        case SH_RequestSoftwareInputPanel:
+            if (QS60StylePrivate::isSingleClickUi())
+                retValue = RSIP_OnMouseClick;
+            else
+                retValue = RSIP_OnMouseClickAndAlreadyFocused;
+            break;
+        case SH_ComboBox_Popup:
+            retValue = true;
+            break;
         case SH_Table_GridLineColor:
             retValue = int(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors, 2, 0).rgba());
@@ -2455,7 +2611,11 @@
             retValue = QPalette::Base;
             break;
-        case SH_ItemView_ActivateItemOnSingleClick:
-            retValue = QS60StylePrivate::isSingleClickUi();
-            break;
+        case SH_ItemView_ActivateItemOnSingleClick: {
+            if (QS60StylePrivate::isSingleClickUi())
+                retValue = true;
+            else if (opt && opt->state & QStyle::State_Selected)
+                retValue = true;
+            break;
+        }
         case SH_ProgressDialog_TextLabelAlignment:
             retValue = (QApplication::layoutDirection() == Qt::LeftToRight) ?
@@ -2472,4 +2632,7 @@
             retValue = true;
             break;
+        case SH_Menu_MouseTracking:
+            retValue = true;
+            break;
         case SH_ItemView_ShowDecorationSelected:
             retValue = true;
@@ -2484,9 +2647,9 @@
             retValue = 0;
             break;
-        case SH_RequestSoftwareInputPanel:
-            retValue = RSIP_OnMouseClickAndAlreadyFocused;
-            break;
         case SH_FormLayoutWrapPolicy:
             retValue = QFormLayout::WrapLongRows;
+            break;
+        case SH_ScrollBar_ContextMenu:
+            retValue = false;
             break;
         default:
@@ -2568,13 +2731,21 @@
             const int frameThickness = spinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0;
             const int buttonMargin = spinbox->frame ? 2 : 0;
-            const int buttonWidth = QS60StylePrivate::pixelMetric(QStyle::PM_ButtonIconSize) + 2 * buttonMargin;
+            const int buttonContentWidth = QS60StylePrivate::pixelMetric(PM_ButtonIconSize) + 2 * buttonMargin;
+            // Spinbox buttons should be no larger than one fourth of total width.
+            // Thus, side-by-side buttons would take half of the total width.
+            const int maxSize = qMax(spinbox->rect.width() / 4, buttonContentWidth);
             QSize buttonSize;
-            buttonSize.setHeight(qMax(8, spinbox->rect.height() - frameThickness));
+            buttonSize.setHeight(qMin(maxSize, qMax(8, spinbox->rect.height() - frameThickness)));
             //width should at least be equal to height
-            buttonSize.setWidth(qMax(buttonSize.height(), buttonWidth));
+            buttonSize.setWidth(qMax(buttonSize.height(), buttonContentWidth));
             buttonSize = buttonSize.expandedTo(QApplication::globalStrut());
 
-            const int y = frameThickness + spinbox->rect.y();
-            const int x = spinbox->rect.x() + spinbox->rect.width() - frameThickness - 2 * buttonSize.width();
+            // Normally spinbuttons should be side-by-side, but if spinbox grows very big
+            // and spinbuttons reach their maximum size, they can be deployed one top of the other.
+            const bool sideBySide = (buttonSize.height() * 2 < spinbox->rect.height()) ? false : true;
+            const int y = frameThickness + spinbox->rect.y() +  
+                          (spinbox->rect.height() - (sideBySide ? 1 : 2) * buttonSize.height()) / 2;
+            const int x = spinbox->rect.x() + 
+                          spinbox->rect.width() - frameThickness - (sideBySide ? 2 : 1) * buttonSize.width();
 
             switch (scontrol) {
@@ -2587,5 +2758,7 @@
                     if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
                         return QRect();
-                    ret = QRect(x + buttonSize.width(), y, buttonSize.width(), buttonSize.height());
+                    ret = QRect(x + (sideBySide ? buttonSize.width() : 0), 
+                                y + (sideBySide ? 0 : buttonSize.height()), 
+                                buttonSize.width(), buttonSize.height());
                     break;
                 case SC_SpinBoxEditField:
@@ -2617,5 +2790,5 @@
             const int width = cmb->rect.width();
             const int height = cmb->rect.height();
-            const int buttonIconSize = QS60StylePrivate::pixelMetric(QStyle::PM_ButtonIconSize);
+            const int buttonIconSize = QS60StylePrivate::pixelMetric(PM_ButtonIconSize);
             const int buttonMargin = cmb->frame ? 2 : 0;
             // lets use spinbox frame here as well, as no combobox specific value available.
@@ -2643,4 +2816,17 @@
                     }
                 break;
+                case SC_ComboBoxListBoxPopup: {
+                    const QRect desktopContent = QApplication::desktop()->availableGeometry();
+
+                    // take the size of this and position bottom above available area
+                    QRect popupRect;
+                    const int width = desktopContent.width() - pixelMetric(PM_LayoutRightMargin) - pixelMetric(PM_LayoutLeftMargin);
+                    popupRect.setWidth(width);
+                    popupRect.setHeight(desktopContent.height()); //combobox resets height anyway based on content
+                    popupRect.setBottom(desktopContent.bottom());
+                    popupRect.translate(pixelMetric(PM_LayoutLeftMargin), 0);
+                    ret = popupRect;
+                    }
+                break;
             default:
                 break;
@@ -2657,5 +2843,5 @@
                     //slightly indent text and boxes, so that dialog border does not mess with them.
                     const int horizontalSpacing =
-                        QS60StylePrivate::pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
+                        QS60StylePrivate::pixelMetric(PM_LayoutHorizontalSpacing);
                     ret.adjust(2, horizontalSpacing - 3, 0, 0);
                     }
@@ -2717,9 +2903,8 @@
         case SE_LineEditContents: {
                 // in S60 the input text box doesn't start from line Edit's TL, but
-                // a bit indented.
-                QRect lineEditRect = opt->rect;
-                const int adjustment = opt->rect.height() >> 2;
-                lineEditRect.adjust(adjustment, 0, 0, 0);
-                ret = lineEditRect;
+                // a bit indented (8 pixels).
+                const int KLineEditDefaultIndention = 8;
+                ret = visualRect(
+                    opt->direction, opt->rect, opt->rect.adjusted(KLineEditDefaultIndention, 0, 0, 0));
             }
             break;
@@ -2733,7 +2918,7 @@
                 if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast<const QStyleOptionTabWidgetFrame *>(opt)) {
                     const int tabOverlapNoBorder =
-                        QS60StylePrivate::pixelMetric(QStyle::PM_TabBarTabOverlap);
+                        QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap);
                     const int tabOverlap =
-                        tabOverlapNoBorder-QS60StylePrivate::pixelMetric(QStyle::PM_DefaultFrameWidth);
+                        tabOverlapNoBorder - QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
                     const QTabWidget *tab = qobject_cast<const QTabWidget *>(widget);
                     int gain = (tab) ? tabOverlap * tab->count() : 0;
@@ -2784,6 +2969,6 @@
                     (vopt->features & QStyleOptionViewItemV2::HasCheckIndicator)) {
                     const int verticalSpacing =
-                        QS60StylePrivate::pixelMetric(QStyle::PM_LayoutVerticalSpacing);
-                    //const int horizontalSpacing = QS60StylePrivate::pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
+                        QS60StylePrivate::pixelMetric(PM_LayoutVerticalSpacing);
+                    //const int horizontalSpacing = QS60StylePrivate::pixelMetric(PM_LayoutHorizontalSpacing);
                     const int checkBoxRectWidth = subElementRect(SE_ItemViewItemCheckIndicator, opt, widget).width();
                     ret.adjust(-checkBoxRectWidth - verticalSpacing, 0, -checkBoxRectWidth - verticalSpacing, 0);
@@ -2797,7 +2982,11 @@
 
                 if (element == SE_ItemViewItemDecoration) {
-                    if (menuItem->direction == Qt::RightToLeft)
-                        ret.translate(ret.width()-indicatorWidth, 0);
-                    ret.setWidth(indicatorWidth);
+                    if (menuItem->icon.isNull()) {
+                        ret = QRect();
+                    } else {
+                        if (menuItem->direction == Qt::RightToLeft)
+                            ret.translate(ret.width() - indicatorWidth, 0);
+                        ret.setWidth(indicatorWidth);
+                    }
                 } else {
                     ret = menuItem->rect;
@@ -2820,5 +3009,5 @@
             break;
         case SE_ItemViewItemCheckIndicator:
-            if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) {
+            if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast<const QStyleOptionViewItemV2 *>(opt)) {
                 const QListWidget *listItem = qobject_cast<const QListWidget *>(widget);
 
@@ -2831,7 +3020,7 @@
 
                 // Selection check mark rect.
-                const int indicatorWidth = QS60StylePrivate::pixelMetric(QStyle::PM_IndicatorWidth);
-                const int indicatorHeight = QS60StylePrivate::pixelMetric(QStyle::PM_IndicatorHeight);
-                const int spacing = QS60StylePrivate::pixelMetric(QStyle::PM_CheckBoxLabelSpacing);
+                const int indicatorWidth = QS60StylePrivate::pixelMetric(PM_IndicatorWidth);
+                const int indicatorHeight = QS60StylePrivate::pixelMetric(PM_IndicatorHeight);
+                const int spacing = QS60StylePrivate::pixelMetric(PM_CheckBoxLabelSpacing);
 
                 const int itemHeight = opt->rect.height();
@@ -2859,7 +3048,7 @@
                 // Subtract area needed for line
                 if (opt->state & State_Horizontal)
-                    ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth));
+                    ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_BoldLineWidth));
                 else
-                    ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth));
+                    ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_ThinLineWidth));
                 }
             ret = visualRect(opt->direction, opt->rect, ret);
@@ -2967,9 +3156,11 @@
         widget->setPalette(QPalette());
 
-#ifndef QT_NO_PROGRESSBAR
+#if defined(Q_WS_S60) && !defined(QT_NO_PROGRESSBAR)
     if (QProgressBar *bar = qobject_cast<QProgressBar *>(widget)) {
         widget->removeEventFilter(this);
         d->m_bars.removeAll(bar);
     }
+#else
+    Q_UNUSED(d)
 #endif
     QCommonStyle::unpolish(widget);
@@ -2982,6 +3173,9 @@
 {
     Q_D(QS60Style);
+    QCommonStyle::polish(qApp);
     d->m_originalPalette = application->palette();
     d->setThemePalette(application);
+    if (QS60StylePrivate::isTouchSupported())
+        qApp->installEventFilter(this);
 }
 
@@ -2992,8 +3186,12 @@
 {
     Q_UNUSED(application)
+
     Q_D(QS60Style);
+    QCommonStyle::unpolish(qApp);
     const QPalette newPalette = QApplication::style()->standardPalette();
     QApplication::setPalette(newPalette);
     QApplicationPrivate::setSystemPalette(d->m_originalPalette);
+    if (QS60StylePrivate::isTouchSupported())
+        qApp->removeEventFilter(this);
 }
 
@@ -3003,7 +3201,6 @@
 bool QS60Style::event(QEvent *e)
 {
+#ifdef QT_KEYPAD_NAVIGATION
     Q_D(QS60Style);
-
-#ifdef QT_KEYPAD_NAVIGATION
     const QEvent::Type eventType = e->type();
     if ((eventType == QEvent::FocusIn ||
@@ -3024,4 +3221,10 @@
     case QEvent::FocusIn:
         if (QWidget *focusWidget = QApplication::focusWidget()) {
+
+            // Menus and combobox popups do not draw focus frame around them
+            if (qobject_cast<QComboBoxListView *>(focusWidget) ||
+                qobject_cast<QMenu *>(focusWidget))
+                    break;
+
             if (!d->m_focusFrame)
                 d->m_focusFrame = new QFocusFrame(focusWidget);
@@ -3053,5 +3256,5 @@
     const QStyleOption *option, const QWidget *widget) const
 {
-    const int iconDimension = QS60StylePrivate::pixelMetric(QStyle::PM_ToolBarIconSize);
+    const int iconDimension = QS60StylePrivate::pixelMetric(PM_ToolBarIconSize);
     const QRect iconSize = (!option) ? QRect(0, 0, iconDimension, iconDimension) : option->rect;
     QS60StyleEnums::SkinParts part;
@@ -3063,65 +3266,65 @@
 
     switch(standardIcon) {
-        case QStyle::SP_MessageBoxWarning:
+        case SP_MessageBoxWarning:
             part = QS60StyleEnums::SP_QgnNoteWarning;
             break;
-        case QStyle::SP_MessageBoxInformation:
+        case SP_MessageBoxInformation:
             part = QS60StyleEnums::SP_QgnNoteInfo;
             break;
-        case QStyle::SP_MessageBoxCritical:
+        case SP_MessageBoxCritical:
             part = QS60StyleEnums::SP_QgnNoteError;
             break;
-        case QStyle::SP_MessageBoxQuestion:
+        case SP_MessageBoxQuestion:
             part = QS60StyleEnums::SP_QgnNoteQuery;
             break;
-        case QStyle::SP_ArrowRight:
+        case SP_ArrowRight:
             part = QS60StyleEnums::SP_QgnIndiNaviArrowRight;
             break;
-        case QStyle::SP_ArrowLeft:
+        case SP_ArrowLeft:
             part = QS60StyleEnums::SP_QgnIndiNaviArrowLeft;
             break;
-        case QStyle::SP_ArrowUp:
+        case SP_ArrowUp:
             part = QS60StyleEnums::SP_QgnIndiNaviArrowLeft;
             adjustedFlags |= QS60StylePrivate::SF_PointEast;
             break;
-        case QStyle::SP_ArrowDown:
+        case SP_ArrowDown:
             part = QS60StyleEnums::SP_QgnIndiNaviArrowLeft;
             adjustedFlags |= QS60StylePrivate::SF_PointWest;
             break;
-        case QStyle::SP_ArrowBack:
+        case SP_ArrowBack:
             if (QApplication::layoutDirection() == Qt::RightToLeft)
                 return QS60Style::standardIcon(SP_ArrowRight, option, widget);
             return QS60Style::standardIcon(SP_ArrowLeft, option, widget);
-        case QStyle::SP_ArrowForward:
+        case SP_ArrowForward:
             if (QApplication::layoutDirection() == Qt::RightToLeft)
                 return QS60Style::standardIcon(SP_ArrowLeft, option, widget);
             return QS60Style::standardIcon(SP_ArrowRight, option, widget);
-        case QStyle::SP_ComputerIcon:
+        case SP_ComputerIcon:
             part = QS60StyleEnums::SP_QgnPropPhoneMemcLarge;
             break;
-        case QStyle::SP_DirClosedIcon:
+        case SP_DirClosedIcon:
             part = QS60StyleEnums::SP_QgnPropFolderSmall;
             break;
-        case QStyle::SP_DirOpenIcon:
+        case SP_DirOpenIcon:
             part = QS60StyleEnums::SP_QgnPropFolderCurrent;
             break;
-        case QStyle::SP_DirIcon:
+        case SP_DirIcon:
             part = QS60StyleEnums::SP_QgnPropFolderSmall;
             break;
-        case QStyle::SP_FileDialogNewFolder:
+        case SP_FileDialogNewFolder:
             part = QS60StyleEnums::SP_QgnPropFolderSmallNew;
             break;
-        case QStyle::SP_FileIcon:
+        case SP_FileIcon:
             part = QS60StyleEnums::SP_QgnPropFileSmall;
             break;
-        case QStyle::SP_TrashIcon:
+        case SP_TrashIcon:
             part = QS60StyleEnums::SP_QgnNoteErased;
             break;
-        case QStyle::SP_ToolBarHorizontalExtensionButton:
+        case SP_ToolBarHorizontalExtensionButton:
             part = QS60StyleEnums::SP_QgnIndiSubMenu;
             if (QApplication::layoutDirection() == Qt::RightToLeft)
                 adjustedFlags |= QS60StylePrivate::SF_PointSouth;
             break;
-        case QStyle::SP_ToolBarVerticalExtensionButton:
+        case SP_ToolBarVerticalExtensionButton:
             adjustedFlags |= QS60StylePrivate::SF_PointEast;
             part = QS60StyleEnums::SP_QgnIndiSubMenu;
@@ -3143,7 +3346,38 @@
 bool QS60Style::eventFilter(QObject *object, QEvent *event)
 {
+    Q_D(QS60Style);
+    switch(event->type()) {
+        case QEvent::MouseButtonPress: {
+            QWidget *w = QApplication::widgetAt(QCursor::pos());
+            if (w) {
+                QWidget *focusW = w->focusProxy();
+                if (qobject_cast<QAbstractItemView *>(focusW) ||
+                    qobject_cast<QRadioButton *>(focusW) ||
+                    qobject_cast<QCheckBox *>(focusW))
+                    d->m_pressedWidget = focusW;
+                else if (qobject_cast<QAbstractItemView *>(w)||
+                        qobject_cast<QRadioButton *>(w) ||
+                        qobject_cast<QCheckBox *>(w))
+                    d->m_pressedWidget = w;
+
+                if ( d->m_pressedWidget)
+                    d->m_pressedWidget->update();
+            }
+            break;
+        }
+        case QEvent::MouseButtonRelease: {
+            const QWidget *w = QApplication::widgetAt(QCursor::pos());
+            if (w && d->m_pressedWidget) {
+                d->m_pressedWidget->update();
+                d->m_pressedWidget = 0;
+            }
+            break;
+        }
+        default:
+            break;
+    }
+
 #ifdef Q_WS_S60
 #ifndef QT_NO_PROGRESSBAR
-    Q_D(QS60Style);
     switch(event->type()) {
     case QEvent::StyleChange:
@@ -3158,6 +3392,8 @@
     case QEvent::Destroy:
     case QEvent::Hide:
-        d->stopAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim);
-        d->m_bars.removeAll(reinterpret_cast<QProgressBar *>(object));
+        if (QProgressBar *bar = reinterpret_cast<QProgressBar *>(object)) {
+            d->stopAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim);
+            d->m_bars.removeAll(bar);
+        }
         break;
     default:
@@ -3166,7 +3402,11 @@
 #endif // QT_NO_PROGRESSBAR
 #endif // Q_WS_S60
-    return QStyle::eventFilter(object, event);
-}
-
+    return QCommonStyle::eventFilter(object, event);
+}
+
+/*!
+    \internal
+    Handle the timer \a event.
+*/
 void QS60Style::timerEvent(QTimerEvent *event)
 {
Index: /trunk/src/gui/styles/qs60style.h
===================================================================
--- /trunk/src/gui/styles/qs60style.h	(revision 768)
+++ /trunk/src/gui/styles/qs60style.h	(revision 769)
@@ -52,4 +52,14 @@
 
 #if !defined(QT_NO_STYLE_S60)
+
+//Public custom pixel metrics values.
+//These can be used to fetch custom pixel metric value from outside QS60Style.
+enum {
+    PM_FrameCornerWidth = QStyle::PM_CustomBase + 1,
+    PM_FrameCornerHeight,
+    PM_BoldLineWidth,
+    PM_ThinLineWidth,
+    PM_MessageBoxHeight
+    };
 
 class QS60StylePrivate;
Index: /trunk/src/gui/styles/qs60style_p.h
===================================================================
--- /trunk/src/gui/styles/qs60style_p.h	(revision 768)
+++ /trunk/src/gui/styles/qs60style_p.h	(revision 769)
@@ -61,11 +61,6 @@
 
 const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
-const int CUSTOMVALUESCOUNT = 4;
-enum {
-    PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS,
-    PM_Custom_FrameCornerHeight,
-    PM_Custom_BoldLineWidth,
-    PM_Custom_ThinLineWidth
-    };
+const int CUSTOMVALUESCOUNT = 5;
+
 const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
 
@@ -75,5 +70,4 @@
     int major_version;
     int minor_version;
-    bool mirroring; // TODO: (nice to have) Use Qt::LayoutDirection
     const char* layoutName;
 } layoutHeader;
@@ -133,4 +127,5 @@
         SP_QgnGrafBarFrameSideR,
         SP_QgnGrafBarProgress,
+        SP_QgnGrafOrgBgGrid,
         SP_QgnGrafScrollArrowDown,
         SP_QgnGrafScrollArrowLeft,
@@ -299,4 +294,22 @@
         SP_QsnFrButtonSideRInactive,
         SP_QsnFrButtonCenterInactive,
+        SP_QsnFrGridCornerTlPressed, // Pressed table item
+        SP_QsnFrGridCornerTrPressed,
+        SP_QsnFrGridCornerBlPressed,
+        SP_QsnFrGridCornerBrPressed,
+        SP_QsnFrGridSideTPressed,
+        SP_QsnFrGridSideBPressed,
+        SP_QsnFrGridSideLPressed,
+        SP_QsnFrGridSideRPressed,
+        SP_QsnFrGridCenterPressed,
+        SP_QsnFrListCornerTlPressed,  // Pressed list item
+        SP_QsnFrListCornerTrPressed,
+        SP_QsnFrListCornerBlPressed,
+        SP_QsnFrListCornerBrPressed,
+        SP_QsnFrListSideTPressed,
+        SP_QsnFrListSideBPressed,
+        SP_QsnFrListSideLPressed,
+        SP_QsnFrListSideRPressed,
+        SP_QsnFrListPressed,
     };
 
@@ -354,10 +367,10 @@
     int currentFrame() const {return m_currentData->m_currentFrame;}
 
-    void setFrameCount(const int &frameCount) {m_currentData->m_frames = frameCount;}
-    void setInterval(const int &interval) {m_currentData->m_interval = interval;}
+    void setFrameCount(int frameCount) {m_currentData->m_frames = frameCount;}
+    void setInterval(int interval) {m_currentData->m_interval = interval;}
     void setAnimationObject(CAknBitmapAnimation* animation);
     void setResourceBased(bool resourceBased) {m_currentData->m_resourceBased = resourceBased;}
-    void setTimerId(const int &timerId) {m_currentData->m_timerId = timerId;}
-    void setCurrentFrame(const int &currentFrame) {m_currentData->m_currentFrame = currentFrame;}
+    void setTimerId(int timerId) {m_currentData->m_timerId = timerId;}
+    void setCurrentFrame(int currentFrame) {m_currentData->m_currentFrame = currentFrame;}
 
     void resetToDefaults();
@@ -417,5 +430,5 @@
         SE_TabBarTabWestInactive,
         SE_ListHighlight,
-        SE_OptionsMenu,
+        SE_PopupBackground,
         SE_SettingsList,
         SE_TableItem,
@@ -426,8 +439,11 @@
         SE_ToolBarButtonPressed,
         SE_PanelBackground,
-        SE_ScrollBarHandlePressedHorizontal, //only for 5.0+
+        SE_ScrollBarHandlePressedHorizontal,
         SE_ScrollBarHandlePressedVertical,
         SE_ButtonInactive,
         SE_Editor,
+        SE_DropArea,
+        SE_TableItemPressed,
+        SE_ListItemPressed,
     };
 
@@ -437,5 +453,5 @@
         SF_FrameLineEdit,
         SF_ListHighlight,
-        SF_OptionsMenu,
+        SF_PopupBackground,
         SF_SettingsList,
         SF_TableItem,
@@ -447,4 +463,6 @@
         SF_PanelBackground,
         SF_ButtonInactive,
+        SF_TableItemPressed,
+        SF_ListItemPressed,
     };
 
@@ -459,4 +477,6 @@
         SF_ColorSkinned =     0x0040, // pixmap is colored with foreground pen color
         SF_Animation =        0x0080,
+        SF_Mirrored_X_Axis =  0x0100,
+        SF_Mirrored_Y_Axis =  0x0200
     };
 
@@ -501,4 +521,5 @@
     static bool hasSliderGrooveGraphic();
     static bool isSingleClickUi();
+    static bool isWidgetPressed(const QWidget *widget);
 
     // calculates average color based on button skin graphics (minus borders).
@@ -542,5 +563,5 @@
     //Checks that the current brush is transparent or has BrushStyle NoBrush,
     //so that theme graphic background can be drawn.
-    static bool canDrawThemeBackground(const QBrush &backgroundBrush);
+    static bool canDrawThemeBackground(const QBrush &backgroundBrush, const QWidget *widget);
 
     static int currentAnimationFrame(QS60StyleEnums::SkinParts part);
@@ -596,4 +617,7 @@
 
     QPointer<QFocusFrame> m_focusFrame;
+    static qint64 m_webPaletteKey;
+
+    static QPointer<QWidget> m_pressedWidget;
 
 #ifdef Q_WS_S60
Index: /trunk/src/gui/styles/qs60style_s60.cpp
===================================================================
--- /trunk/src/gui/styles/qs60style_s60.cpp	(revision 768)
+++ /trunk/src/gui/styles/qs60style_s60.cpp	(revision 769)
@@ -51,15 +51,15 @@
 
 #include <w32std.h>
-#include <aknsconstants.h>
+#include <AknsConstants.h>
 #include <aknconsts.h>
-#include <aknsitemid.h>
-#include <aknsutils.h>
-#include <aknsdrawutils.h>
-#include <aknsskininstance.h>
-#include <aknsbasicbackgroundcontrolcontext.h>
+#include <AknsItemID.h>
+#include <AknsUtils.h>
+#include <AknsDrawUtils.h>
+#include <AknsSkinInstance.h>
+#include <AknsBasicBackgroundControlContext.h>
 #include <avkon.mbg>
 #include <AknFontAccess.h>
 #include <AknLayoutFont.h>
-#include <aknutils.h>
+#include <AknUtils.h>
 #include <aknnavi.h>
 #include <gulicon.h>
@@ -106,5 +106,5 @@
 
 AnimationDataV2::AnimationDataV2(const AnimationData &data) : AnimationData(data.m_id, data.m_frames, data.m_interval),
-    m_resourceBased(false), m_animation(0), m_timerId(0)
+    m_animation(0), m_currentFrame(0), m_resourceBased(false), m_timerId(0)
 {
 }
@@ -179,4 +179,6 @@
     /* SP_QgnGrafBarFrameSideR */          {KAknsIIDQgnGrafBarFrameSideR,          EDrawIcon,   ES60_All,    -1,-1},
     /* SP_QgnGrafBarProgress */            {KAknsIIDQgnGrafBarProgress,            EDrawIcon,   ES60_All,    -1,-1},
+    // No drop area for 3.x non-touch devices
+    /* SP_QgnGrafOrgBgGrid */              {KAknsIIDNone,                          EDrawIcon,   ES60_3_X,    EAknsMajorGeneric ,0x1eba}, //KAknsIIDQgnGrafOrgBgGrid   
     /* SP_QgnGrafScrollArrowDown */        {KAknsIIDQgnGrafScrollArrowDown,     EDrawGulIcon,   ES60_All,    -1,-1},
     /* SP_QgnGrafScrollArrowLeft */        {KAknsIIDQgnGrafScrollArrowLeft,     EDrawGulIcon,   ES60_All,    -1,-1},
@@ -309,5 +311,5 @@
     /* SP_QsnFrPopupSideL */            {KAknsIIDQsnFrPopupSideL,               ENoDraw,     ES60_All,    -1,-1},
     /* SP_QsnFrPopupSideR */            {KAknsIIDQsnFrPopupSideR,               ENoDraw,     ES60_All,    -1,-1},
-    /* SP_QsnFrPopupCenter */           {KAknsIIDQsnFrPopupCenter,              ENoDraw,     ES60_All,    -1,-1},
+    /* SP_QsnFrPopupCenter */           {KAknsIIDQsnFrPopupCenterSubmenu,       ENoDraw,     ES60_All,    -1,-1},
 
     // ToolTip graphics different in 3.1 vs. 3.2+.
@@ -376,4 +378,25 @@
     /* SP_QsnFrButtonCenterInactive */   {KAknsIIDQsnFrButtonTbCenter,          EDrawIcon,   ES60_3_X,    EAknsMajorSkin, 0x21b9},
 
+    // No pressed down grid in 3.1/3.2
+    /* SP_QsnFrGridCornerTlPressed */    {KAknsIIDQsnFrGridCornerTl,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2681}, /*KAknsIIDQsnFrGridCornerTlPressed*/
+    /* SP_QsnFrGridCornerTrPressed */    {KAknsIIDQsnFrGridCornerTr,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2682},
+    /* SP_QsnFrGridCornerBlPressed */    {KAknsIIDQsnFrGridCornerBl,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2683},
+    /* SP_QsnFrGridCornerBrPressed */    {KAknsIIDQsnFrGridCornerBr,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2684},
+    /* SP_QsnFrGridSideTPressed */       {KAknsIIDQsnFrGridSideT,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2685},
+    /* SP_QsnFrGridSideBPressed */       {KAknsIIDQsnFrGridSideB,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2686},
+    /* SP_QsnFrGridSideLPressed */       {KAknsIIDQsnFrGridSideL,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2687},
+    /* SP_QsnFrGridSideRPressed */       {KAknsIIDQsnFrGridSideR,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2688},
+    /* SP_QsnFrGridCenterPressed */      {KAknsIIDQsnFrGridCenter,      ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2689},
+
+    // No pressed down list in 3.1/3.2
+    /* SP_QsnFrListCornerTlPressed */    {KAknsIIDQsnFrListCornerTl,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x268b}, /*KAknsIIDQsnFrListCornerTlPressed*/
+    /* SP_QsnFrListCornerTrPressed */    {KAknsIIDQsnFrListCornerTr,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x268c},
+    /* SP_QsnFrListCornerBlPressed */    {KAknsIIDQsnFrListCornerBl,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x268d},
+    /* SP_QsnFrListCornerBrPressed */    {KAknsIIDQsnFrListCornerBr,    ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x268e},
+    /* SP_QsnFrListSideTPressed */       {KAknsIIDQsnFrListSideT,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x268f},
+    /* SP_QsnFrListSideBPressed */       {KAknsIIDQsnFrListSideB,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2690},
+    /* SP_QsnFrListSideLPressed */       {KAknsIIDQsnFrListSideL,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2691},
+    /* SP_QsnFrListSideRPressed */       {KAknsIIDQsnFrListSideR,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2692},
+    /* SP_QsnFrListPressed */            {KAknsIIDQsnFrList,            ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2693},
 };
 
@@ -632,4 +655,12 @@
         pixmap = QPixmap::fromImage(iconImage);
     }
+    if ((flags & QS60StylePrivate::SF_Mirrored_X_Axis) ||
+        (flags & QS60StylePrivate::SF_Mirrored_Y_Axis)) {
+        QImage iconImage = pixmap.toImage().mirrored(
+            flags & QS60StylePrivate::SF_Mirrored_X_Axis,
+            flags & QS60StylePrivate::SF_Mirrored_Y_Axis);
+        pixmap = QPixmap::fromImage(iconImage);
+    }
+
     return pixmap;
 }
@@ -754,5 +785,5 @@
             if (drawn)
                 result = fromFbsBitmap(background, NULL, flags, targetSize);
-            // if drawing fails in skin server, just ignore the background (probably OOM occured)
+            // if drawing fails in skin server, just ignore the background (probably OOM case)
 
             CleanupStack::PopAndDestroy(4, background); //background, dev, gc, bgContext
@@ -786,5 +817,5 @@
             const int currentFrame = QS60StylePrivate::currentAnimationFrame(part);
             if (constructedFromTheme && aknAnimation && aknAnimation->BitmapAnimData()->FrameArray().Count() > 0) {
-                //Animation was created succesfully and contains frames, just fetch current frame
+                //Animation was created successfully and contains frames, just fetch current frame
                 if(currentFrame >= aknAnimation->BitmapAnimData()->FrameArray().Count())
                     User::Leave(KErrOverflow);
@@ -858,9 +889,7 @@
     CleanupStack::PushL(bitmapGc);
 
-#ifndef Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE
     frame->LockHeap();
     memset(frame->DataAddress(), 0, frame->SizeInPixels().iWidth * frame->SizeInPixels().iHeight * 4);  // 4: argb bytes
     frame->UnlockHeap();
-#endif
 
     const TRect outerRect(TPoint(0, 0), targetSize);
@@ -899,5 +928,5 @@
         }
     } else {
-        TDisplayMode maskDepth = EGray2;
+        TDisplayMode maskDepth = EGray256;
         // Query the skin item for possible frame graphics mask details.
         if (skinInstance) {
@@ -949,5 +978,5 @@
     switch(frameElement) {
         case QS60StylePrivate::SF_ToolTip:
-            if (QSysInfo::s60Version()!=QSysInfo::SV_S60_3_1) {
+            if (QSysInfo::s60Version() != QSysInfo::SV_S60_3_1) {
                 centerId.Set(EAknsMajorGeneric, 0x19c2);
                 frameId.Set(EAknsMajorSkin, 0x5300);
@@ -958,8 +987,13 @@
             break;
         case QS60StylePrivate::SF_ToolBar:
-            if (QSysInfo::s60Version()==QSysInfo::SV_S60_3_1 || QSysInfo::s60Version()==QSysInfo::SV_S60_3_2) {
+            if (QSysInfo::s60Version() == QSysInfo::SV_S60_3_1 || 
+                QSysInfo::s60Version() == QSysInfo::SV_S60_3_2) {
                 centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu);
                 frameId.Set(KAknsIIDQsnFrPopupSub);
             }
+            break;
+        case QS60StylePrivate::SF_PopupBackground:
+            centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu);
+            frameId.Set(KAknsIIDQsnFrPopupSub);
             break;
         case QS60StylePrivate::SF_PanelBackground:
@@ -977,19 +1011,23 @@
 TRect QS60StyleModeSpecifics::innerRectFromElement(QS60StylePrivate::SkinFrameElements frameElement, const TRect &outerRect)
 {
-    TInt widthShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth);
-    TInt heightShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerHeight);
+    TInt widthShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth);
+    TInt heightShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerHeight);
     switch(frameElement) {
         case QS60StylePrivate::SF_PanelBackground:
             // panel should have slightly slimmer border to enable thin line of background graphics between closest component
-            widthShrink = widthShrink-2;
-            heightShrink = heightShrink-2;
+            widthShrink = widthShrink - 2;
+            heightShrink = heightShrink - 2;
             break;
         case QS60StylePrivate::SF_ToolTip:
-            widthShrink = widthShrink>>1;
-            heightShrink = heightShrink>>1;
+            widthShrink = widthShrink >> 1;
+            heightShrink = heightShrink >> 1;
             break;
         case QS60StylePrivate::SF_ListHighlight:
-            widthShrink = widthShrink-2;
-            heightShrink = heightShrink-2;
+            widthShrink = widthShrink - 2;
+            heightShrink = heightShrink - 2;
+            break;
+        case QS60StylePrivate::SF_PopupBackground:
+            widthShrink = widthShrink + 5;
+            heightShrink = heightShrink + 5;
             break;
         default:
@@ -1095,5 +1133,5 @@
     }
 
-    m_pmPointer = data[activeLayoutIndex];
+    setCurrentLayout(activeLayoutIndex);
 }
 
@@ -1120,5 +1158,5 @@
         &KAknsIIDQsnTextColors
     };
-    Q_ASSERT((int)list <= (int)sizeof(idMap)/sizeof(idMap[0]));
+    Q_ASSERT((int)list < (int)sizeof(idMap)/sizeof(idMap[0]));
     const QColor color = QS60StyleModeSpecifics::colorValue(*idMap[(int) list], index - 1);
     return option ? QS60StylePrivate::stateColor(color, option) : color;
Index: /trunk/src/gui/styles/qstylesheetstyle.cpp
===================================================================
--- /trunk/src/gui/styles/qstylesheetstyle.cpp	(revision 768)
+++ /trunk/src/gui/styles/qstylesheetstyle.cpp	(revision 769)
@@ -1534,5 +1534,7 @@
     if (defaultCacheIt == styleSheetCache->constEnd()) {
         defaultSs = getDefaultStyleSheet();
-        styleSheetCache->insert(baseStyle(), defaultSs);
+        QStyle *bs = baseStyle();
+        styleSheetCache->insert(bs, defaultSs);
+        QObject::connect(bs, SIGNAL(destroyed(QObject*)), this, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection);
     } else {
         defaultSs = defaultCacheIt.value();
@@ -2659,4 +2661,9 @@
     styleSheetCache->remove((const QWidget *)o);
     autoFillDisabledWidgets->remove((const QWidget *)o);
+}
+
+void QStyleSheetStyle::styleDestroyed(QObject *o)
+{
+    styleSheetCache->remove(o);
 }
 
@@ -4243,6 +4250,13 @@
             const QAbstractScrollAreaPrivate *sap = sa->d_func();
             rule.drawBackground(p, opt->rect, sap->contentsOffset());
-            if (rule.hasBorder())
-                rule.drawBorder(p, rule.borderRect(opt->rect));
+            if (rule.hasBorder()) {
+                QRect brect = rule.borderRect(opt->rect);
+                if (styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents, opt, w)) {
+                    QRect r = brect.adjusted(0, 0, sa->verticalScrollBar()->isVisible() ? -sa->verticalScrollBar()->width() : 0,
+                                             sa->horizontalScrollBar()->isVisible() ? -sa->horizontalScrollBar()->height() : 0);
+                    brect = QStyle::visualRect(opt->direction, brect, r);
+                }
+                rule.drawBorder(p, brect);
+            }
             break;
         }
@@ -4628,4 +4642,9 @@
             return msz.width() == -1 ? msz.height() : msz.width();
         }
+        break;
+
+    case PM_ScrollView_ScrollBarSpacing:
+        if(!rule.hasNativeBorder() || rule.hasBox())
+            return 0;
         break;
 #endif // QT_NO_SCROLLBAR
@@ -5744,4 +5763,11 @@
                                    }
 
+#ifndef QT_NO_TOOLBAR
+    case SE_ToolBarHandle:
+        if (hasStyleRule(w, PseudoElement_ToolBarHandle))
+            return ParentStyle::subElementRect(se, opt, w);
+        break;
+#endif //QT_NO_TOOLBAR
+
     default:
         break;
Index: /trunk/src/gui/styles/qstylesheetstyle_p.h
===================================================================
--- /trunk/src/gui/styles/qstylesheetstyle_p.h	(revision 768)
+++ /trunk/src/gui/styles/qstylesheetstyle_p.h	(revision 769)
@@ -148,4 +148,5 @@
 private Q_SLOTS:
     void widgetDestroyed(QObject *);
+    void styleDestroyed(QObject *);
 
 private:
Index: /trunk/src/gui/styles/qwindowsmobilestyle.cpp
===================================================================
--- /trunk/src/gui/styles/qwindowsmobilestyle.cpp	(revision 768)
+++ /trunk/src/gui/styles/qwindowsmobilestyle.cpp	(revision 769)
@@ -4041,23 +4041,24 @@
 void QWindowsMobileStylePrivate::tintImagesButton(QColor color)
 {
-       if (currentTintButton == color)
+    if (currentTintButton == color)
         return;
-
-       imageTabEnd = QImage(tabend_xpm);
-       imageTabSelectedEnd = QImage(tabselectedend_xpm);
-       imageTabSelectedBegin = QImage(tabselectedbeginn_xpm);
-       imageTabMiddle = QImage(tabmiddle_xpm);
-       tintImage(&imageTabEnd, color, 0.0);
-       tintImage(&imageTabSelectedEnd, color, 0.0);
-       tintImage(&imageTabSelectedBegin, color, 0.0);
-       tintImage(&imageTabMiddle, color, 0.0);
-
-       if (!doubleControls) {
-           int height = imageTabMiddle.height() / 2 + 1;
-           imageTabEnd = imageTabEnd.scaledToHeight(height);
-           imageTabMiddle = imageTabMiddle.scaledToHeight(height);
-           imageTabSelectedEnd = imageTabSelectedEnd.scaledToHeight(height);
-           imageTabSelectedBegin = imageTabSelectedBegin.scaledToHeight(height);
-       }
+    currentTintButton = color;
+
+    imageTabEnd = QImage(tabend_xpm);
+    imageTabSelectedEnd = QImage(tabselectedend_xpm);
+    imageTabSelectedBegin = QImage(tabselectedbeginn_xpm);
+    imageTabMiddle = QImage(tabmiddle_xpm);
+    tintImage(&imageTabEnd, color, 0.0);
+    tintImage(&imageTabSelectedEnd, color, 0.0);
+    tintImage(&imageTabSelectedBegin, color, 0.0);
+    tintImage(&imageTabMiddle, color, 0.0);
+
+    if (!doubleControls) {
+        int height = imageTabMiddle.height() / 2 + 1;
+        imageTabEnd = imageTabEnd.scaledToHeight(height);
+        imageTabMiddle = imageTabMiddle.scaledToHeight(height);
+        imageTabSelectedEnd = imageTabSelectedEnd.scaledToHeight(height);
+        imageTabSelectedBegin = imageTabSelectedBegin.scaledToHeight(height);
+    }
 }
 
@@ -5076,4 +5077,8 @@
                 QImage image;
                 int xoffset, yoffset;
+                bool isTabBarArrow = widget && widget->parent()
+                                   && widget->inherits("QToolButton")
+                                   && widget->parent()->inherits("QTabBar");
+
                 switch (element) {
                     case PE_IndicatorArrowUp:
@@ -5090,10 +5095,10 @@
                           image = d->imageArrowLeft;
                           xoffset = 8;
-                          yoffset = 2;
+                          yoffset = isTabBarArrow ? 12 : 2;
                           break;
                     case PE_IndicatorArrowRight:
                           image = d->imageArrowRight;
                           xoffset = 8;
-                          yoffset = 2;
+                          yoffset = isTabBarArrow ? 12 : 2;
                           break;
                      case PE_IndicatorArrowUpBig:
@@ -5352,4 +5357,48 @@
         painter->drawLines(a);
         break; }
+    case PE_IndicatorBranch: {
+        // Copied from the Windows style.
+        static const int decoration_size = d->doubleControls ? 18 : 9;
+        static const int ofsA  = d->doubleControls ?  4 : 2;
+        static const int ofsB  = d->doubleControls ?  8 : 4;
+        static const int ofsC  = d->doubleControls ? 12 : 6;
+        static const int ofsD  = d->doubleControls ? 1 : 0;
+        int mid_h = option->rect.x() + option->rect.width() / 2;
+        int mid_v = option->rect.y() + option->rect.height() / 2;
+        int bef_h = mid_h;
+        int bef_v = mid_v;
+        int aft_h = mid_h;
+        int aft_v = mid_v;
+        if (option->state & State_Children) {
+            int delta = decoration_size / 2;
+            bef_h -= delta;
+            bef_v -= delta;
+            aft_h += delta;
+            aft_v += delta;
+            QPen oldPen = painter->pen();
+            QPen crossPen = oldPen;
+            crossPen.setWidth(2);
+            painter->setPen(crossPen);
+            painter->drawLine(bef_h + ofsA + ofsD, bef_v + ofsB + ofsD, bef_h + ofsC + ofsD, bef_v + ofsB + ofsD);
+            if (!(option->state & State_Open))
+                painter->drawLine(bef_h + ofsB + ofsD, bef_v + ofsA + ofsD, bef_h + ofsB + ofsD, bef_v + ofsC + ofsD);
+            painter->setPen(option->palette.dark().color());
+            painter->drawRect(bef_h, bef_v, decoration_size - 1, decoration_size - 1);
+            if (d->doubleControls)
+                painter->drawRect(bef_h + 1, bef_v + 1, decoration_size - 3, decoration_size - 3);
+            painter->setPen(oldPen);
+        }
+        QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern);
+        if (option->state & State_Item) {
+            if (option->direction == Qt::RightToLeft)
+                painter->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush);
+            else
+                painter->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush);
+        }
+        if (option->state & State_Sibling)
+            painter->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush);
+        if (option->state & (State_Open | State_Children | State_Item | State_Sibling))
+            painter->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush);
+        break; }
     case PE_Frame:
         qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),
@@ -6949,8 +6998,9 @@
         ret = d->doubleControls ? windowsMobileSliderThickness * 2: windowsMobileSliderThickness;
         break;
-     case PM_TabBarScrollButtonWidth:
-         ret = d->doubleControls ? 14 * 2 : 18;
-      case PM_CheckBoxLabelSpacing:
-      case PM_RadioButtonLabelSpacing:
+    case PM_TabBarScrollButtonWidth:
+        ret = d->doubleControls ? 14 * 2 : 18;
+        break;
+    case PM_CheckBoxLabelSpacing:
+    case PM_RadioButtonLabelSpacing:
         ret = d->doubleControls ? 6 * 2 : 6;
         break;
Index: /trunk/src/gui/styles/styles.pri
===================================================================
--- /trunk/src/gui/styles/styles.pri	(revision 768)
+++ /trunk/src/gui/styles/styles.pri	(revision 769)
@@ -165,16 +165,16 @@
 
 contains( styles, s60 ):contains(QT_CONFIG, s60) {
-	HEADERS += \
-		styles/qs60style.h \
-		styles/qs60style_p.h
-	SOURCES += styles/qs60style.cpp
-	symbian {
-		SOURCES += styles/qs60style_s60.cpp
-		LIBS += -laknicon -laknskins -laknskinsrv -lfontutils -legul -lbmpanim
-	} else {
-		SOURCES += styles/qs60style_simulated.cpp
-		RESOURCES += styles/qstyle_s60_simulated.qrc
-	}
+    HEADERS += \
+        styles/qs60style.h \
+        styles/qs60style_p.h
+    SOURCES += styles/qs60style.cpp
+    symbian {
+        SOURCES += styles/qs60style_s60.cpp
+        LIBS += -lAknIcon -lAKNSKINS -lAKNSKINSRV -lFontUtils -legul -lbmpanim
+    } else {
+        SOURCES += styles/qs60style_simulated.cpp
+        RESOURCES += styles/qstyle_s60_simulated.qrc
+    }
 } else {
-	DEFINES += QT_NO_STYLE_S60
+    DEFINES += QT_NO_STYLE_S60
 }
Index: /trunk/src/gui/text/qcssparser.cpp
===================================================================
--- /trunk/src/gui/text/qcssparser.cpp	(revision 768)
+++ /trunk/src/gui/text/qcssparser.cpp	(revision 769)
@@ -896,5 +896,5 @@
         *width = lengthValueFromData(data.width, f);
         *style = data.style;
-        *color = brushFromData(data.color, pal);
+        *color = data.color.type != BrushData::Invalid ? brushFromData(data.color, pal) : QBrush(QColor());
         return;
     }
Index: /trunk/src/gui/text/qfont.cpp
===================================================================
--- /trunk/src/gui/text/qfont.cpp	(revision 768)
+++ /trunk/src/gui/text/qfont.cpp	(revision 769)
@@ -646,6 +646,7 @@
     Returns the name of the font within the underlying window system.
 
-    Only on X11 when Qt was built without FontConfig support the XLFD (X Logical Font Description)
-    is returned; otherwise an empty string.
+    On X11, this function will return an empty string if Qt is built with
+    FontConfig support; otherwise the XLFD (X Logical Font Description) is
+    returned.
 
     Using the return value of this function is usually \e not \e
@@ -820,4 +821,7 @@
         resolve_mask |= QFont::WeightResolved | QFont::StyleResolved;
     }
+
+    if (italic)
+        resolve_mask |= QFont::StyleResolved;
 
     d->request.family = family;
@@ -2641,4 +2645,5 @@
 QFontCache::~QFontCache()
 {
+    clear();
     {
         EngineDataCache::ConstIterator it = engineDataCache.constBegin(),
Index: /trunk/src/gui/text/qfontdatabase.cpp
===================================================================
--- /trunk/src/gui/text/qfontdatabase.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontdatabase.cpp	(revision 769)
@@ -87,5 +87,5 @@
 #define SMOOTH_SCALABLE 0xffff
 
-extern int qt_defaultDpiY(); // in qfont.cpp
+Q_GUI_EXPORT extern int qt_defaultDpiY(); // in qfont.cpp
 
 bool qt_enable_test_font = false;
@@ -611,8 +611,8 @@
 #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
 // class with virtual destructor, derived in qfontdatabase_s60.cpp
-class QFontDatabaseS60Store
+class QSymbianFontDatabaseExtras
 {
 public:
-    virtual ~QFontDatabaseS60Store() {}
+    virtual ~QSymbianFontDatabaseExtras() {}
 };
 #endif
@@ -630,5 +630,5 @@
 #endif
 #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
-          , s60Store(0)
+          , symbianExtras(0)
 #endif
     { }
@@ -644,7 +644,7 @@
         count = 0;
 #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
-        if (s60Store) {
-            delete s60Store;
-            s60Store = 0;
+        if (symbianExtras) {
+            delete symbianExtras;
+            symbianExtras = 0;
         }
 #endif
@@ -691,5 +691,5 @@
     QStringList fallbackFamilies;
 #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
-    const QFontDatabaseS60Store *s60Store;
+    const QSymbianFontDatabaseExtras *symbianExtras;
 #endif
 
Index: /trunk/src/gui/text/qfontdatabase_s60.cpp
===================================================================
--- /trunk/src/gui/text/qfontdatabase_s60.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontdatabase_s60.cpp	(revision 769)
@@ -51,5 +51,5 @@
 #include <private/qcore_symbian_p.h>
 #if defined(QT_NO_FREETYPE)
-#include <OPENFONT.H>
+#include <openfont.h>
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 #include <graphics/openfontrasterizer.h> // COpenFontRasterizer has moved to a new header file
@@ -93,11 +93,11 @@
 
 #if defined(QT_NO_FREETYPE)
-class QFontDatabaseS60StoreImplementation : public QFontDatabaseS60Store
+class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras
 {
 public:
-    QFontDatabaseS60StoreImplementation();
-    ~QFontDatabaseS60StoreImplementation();
-
-    const QFontEngineS60Extensions *extension(const QString &typeface) const;
+    QSymbianFontDatabaseExtrasImplementation();
+    ~QSymbianFontDatabaseExtrasImplementation();
+
+    const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const;
 
 private:
@@ -105,10 +105,19 @@
     CFontStore *m_store;
     COpenFontRasterizer *m_rasterizer;
-    mutable QHash<QString, const QFontEngineS60Extensions *> m_extensions;
+    mutable QList<const QSymbianTypeFaceExtras *> m_extras;
+    mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash;
 };
 
-QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation()
-{
-    m_heap = User::ChunkHeap(NULL, 0x1000, 0x100000);
+QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation()
+{
+    QStringList filters;
+    filters.append(QLatin1String("*.ttf"));
+    filters.append(QLatin1String("*.ccc"));
+    filters.append(QLatin1String("*.ltt"));
+    const QFileInfoList fontFiles = alternativeFilePaths(QLatin1String("resource\\Fonts"), filters);
+
+    const TInt heapMinLength = 0x1000;
+    const TInt heapMaxLength = qMax(0x20000 * fontFiles.count(), heapMinLength);
+    m_heap = User::ChunkHeap(NULL, heapMinLength, heapMaxLength);
     QT_TRAP_THROWING(
         m_store = CFontStore::NewL(m_heap);
@@ -118,8 +127,4 @@
         CleanupStack::Pop(m_rasterizer););
 
-    QStringList filters;
-    filters.append(QString::fromLatin1("*.ttf"));
-    filters.append(QString::fromLatin1("*.ccc"));
-    const QFileInfoList fontFiles = alternativeFilePaths(QString::fromLatin1("resource\\Fonts"), filters);
     foreach (const QFileInfo &fontFileInfo, fontFiles) {
         const QString fontFile = QDir::toNativeSeparators(fontFileInfo.absoluteFilePath());
@@ -128,8 +133,9 @@
     }
 }
-QFontDatabaseS60StoreImplementation::~QFontDatabaseS60StoreImplementation()
-{
-    typedef QHash<QString, const QFontEngineS60Extensions *>::iterator iterator;
-    for (iterator p = m_extensions.begin(); p != m_extensions.end(); ++p) {
+
+QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation()
+{
+    typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator;
+    for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) {
         m_store->ReleaseFont((*p)->fontOwner());
         delete *p;
@@ -157,11 +163,16 @@
 #endif // FNTSTORE_H_INLINES_SUPPORT_FMM
 
-const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(const QString &typeface) const
-{
-    if (!m_extensions.contains(typeface)) {
+const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(const QString &typeface,
+                                                                               bool bold, bool italic) const
+{
+    const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic));
+    if (!m_extrasHash.contains(searchKey)) {
         CFont* font = NULL;
-        TFontSpec spec(qt_QString2TPtrC(typeface), 1);
-        spec.iHeight = 1;
-        const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, spec);
+        TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1);
+        if (bold)
+            searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+        if (italic)
+            searchSpec.iFontStyle.SetPosture(EPostureItalic);
+        const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec);
         Q_ASSERT(err == KErrNone && font);
         const CBitmapFont *bitmapFont = static_cast<CBitmapFont*>(font);
@@ -172,7 +183,18 @@
             OpenFontFromBitmapFont(bitmapFont);
 #endif // FNTSTORE_H_INLINES_SUPPORT_FMM
-        m_extensions.insert(typeface, new QFontEngineS60Extensions(font, openFont));
-    }
-    return m_extensions.value(typeface);
+        const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib();
+        const QString foundKey =
+                QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length());
+        if (!m_extrasHash.contains(foundKey)) {
+            QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont);
+            m_extras.append(extras);
+            m_extrasHash.insert(searchKey, extras);
+            m_extrasHash.insert(foundKey, extras);
+        } else {
+            m_store->ReleaseFont(font);
+            m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey));
+        }
+    }
+    return m_extrasHash.value(searchKey);
 }
 #else
@@ -241,12 +263,12 @@
 
 #if defined(QT_NO_FREETYPE)
-    if (!db->s60Store)
-        db->s60Store = new QFontDatabaseS60StoreImplementation;
+    if (!db->symbianExtras)
+        db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation;
 
     QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock);
     
     const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces();
-    const QFontDatabaseS60StoreImplementation *store =
-            static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store);
+    const QSymbianFontDatabaseExtrasImplementation *dbExtras =
+            static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
     bool fontAdded = false;
     for (int i = 0; i < numTypeFaces; i++) {
@@ -274,6 +296,7 @@
             style->pixelSize(0, true);
 
-            const QFontEngineS60Extensions *extension = store->extension(familyName);
-            const QByteArray os2Table = extension->getSfntTable(MAKE_TAG('O', 'S', '/', '2'));
+            const QSymbianTypeFaceExtras *typeFaceExtras =
+                    dbExtras->extras(familyName, faceAttrib.IsBold(), faceAttrib.IsItalic());
+            const QByteArray os2Table = typeFaceExtras->getSfntTable(MAKE_TAG('O', 'S', '/', '2'));
             const unsigned char* data = reinterpret_cast<const unsigned char*>(os2Table.constData());
             const unsigned char* ulUnicodeRange = data + 42;
@@ -333,4 +356,9 @@
 }
 
+bool QFontDatabase::removeAllApplicationFonts()
+{
+    return false;
+}
+
 bool QFontDatabase::supportsThreadedFontRendering()
 {
@@ -390,8 +418,9 @@
         request.family = fontFamily;
 #if defined(QT_NO_FREETYPE)
-        const QFontDatabaseS60StoreImplementation *store =
-                static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store);
-        const QFontEngineS60Extensions *extension = store->extension(fontFamily);
-        fe = new QFontEngineS60(request, extension);
+        const QSymbianFontDatabaseExtrasImplementation *dbExtras =
+                static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
+        const QSymbianTypeFaceExtras *typeFaceExtras =
+                dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal);
+        fe = new QFontEngineS60(request, typeFaceExtras);
 #else
         QFontEngine::FaceId faceId;
Index: /trunk/src/gui/text/qfontdatabase_win.cpp
===================================================================
--- /trunk/src/gui/text/qfontdatabase_win.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontdatabase_win.cpp	(revision 769)
@@ -337,6 +337,16 @@
             };
             QList<QFontDatabase::WritingSystem> systems = determineWritingSystemsFromTrueTypeBits(unicodeRange, codePageRange);
-            for (int i = 0; i < systems.count(); ++i)
-                family->writingSystems[systems.at(i)] = QtFontFamily::Supported;
+
+            for (int i = 0; i < systems.count(); ++i) {
+                QFontDatabase::WritingSystem writingSystem = systems.at(i);
+
+                // ### Hack to work around problem with Thai text on Windows 7. Segoe UI contains
+                // the symbol for Baht, and Windows thus reports that it supports the Thai script.
+                // Since it's the default UI font on this platform, most widgets will be unable to
+                // display Thai text by default. As a temporary work around, we special case Segoe UI
+                // and remove the Thai script from its list of supported writing systems.
+                if (writingSystem != QFontDatabase::Thai || familyName != QLatin1String("Segoe UI"))
+                    family->writingSystems[writingSystem] = QtFontFamily::Supported;
+            }
         } else if (!family->writingSystemCheck) {
             //qDebug("family='%s' script=%s", family->name.latin1(), script.latin1());
Index: /trunk/src/gui/text/qfontengine.cpp
===================================================================
--- /trunk/src/gui/text/qfontengine.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontengine.cpp	(revision 769)
@@ -358,7 +358,4 @@
             }
         } else {
-            positions.resize(glyphs.numGlyphs);
-            glyphs_out.resize(glyphs.numGlyphs);
-            int i = 0;
             while (i < glyphs.numGlyphs) {
                 if (!glyphs.attributes[i].dontPrint) {
@@ -383,4 +380,13 @@
 }
 
+void QFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    glyph_metrics_t gi = boundingBox(glyph);
+    bool isValid = gi.isValid();
+    if (leftBearing != 0)
+        *leftBearing = isValid ? gi.x.toReal() : 0.0;
+    if (rightBearing != 0)
+        *rightBearing = isValid ? (gi.xoff - gi.x - gi.width).toReal() : 0.0;
+}
 
 glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs)
@@ -1389,4 +1395,10 @@
 }
 
+void QFontEngineMulti::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    int which = highByte(glyph);
+    engine(which)->getGlyphBearings(stripped(glyph), leftBearing, rightBearing);
+}
+
 void QFontEngineMulti::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
                                         QPainterPath *path, QTextItem::RenderFlags flags)
Index: /trunk/src/gui/text/qfontengine_p.h
===================================================================
--- /trunk/src/gui/text/qfontengine_p.h	(revision 768)
+++ /trunk/src/gui/text/qfontengine_p.h	(revision 769)
@@ -207,4 +207,6 @@
     virtual qreal minRightBearing() const { return qreal(); }
 
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+
     virtual const char *name() const = 0;
 
@@ -375,4 +377,5 @@
     virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const;
     virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags);
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
 
     virtual QFixed ascent() const;
Index: /trunk/src/gui/text/qfontengine_s60.cpp
===================================================================
--- /trunk/src/gui/text/qfontengine_s60.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontengine_s60.cpp	(revision 769)
@@ -45,5 +45,5 @@
 #include <private/qapplication_p.h>
 #include "qimage.h"
-#include "qt_s60_p.h"
+#include <private/qt_s60_p.h>
 
 #include <e32base.h>
@@ -54,5 +54,5 @@
 QT_BEGIN_NAMESPACE
 
-QFontEngineS60Extensions::QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font)
+QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font)
     : m_font(font)
     , m_cmap(0)
@@ -60,14 +60,11 @@
     , m_fontOwner(fontOwner)
 {
-    TAny *shapingExtension = NULL;
-    m_font->ExtendedInterface(KUidOpenFontShapingExtension, shapingExtension);
-    m_shapingExtension = static_cast<MOpenFontShapingExtension*>(shapingExtension);
     TAny *trueTypeExtension = NULL;
     m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension);
     m_trueTypeExtension = static_cast<MOpenFontTrueTypeExtension*>(trueTypeExtension);
-    Q_ASSERT(m_shapingExtension && m_trueTypeExtension);
-}
-
-QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const
+    Q_ASSERT(m_trueTypeExtension);
+}
+
+QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const
 {
     Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag));
@@ -80,5 +77,30 @@
 }
 
-const unsigned char *QFontEngineS60Extensions::cmap() const
+bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const
+{
+    if (!m_trueTypeExtension->HasTrueTypeTable(tag))
+        return false;
+
+    bool result = true;
+    TInt error = KErrNone;
+    TInt tableByteLength;
+    TAny *table =
+        q_check_ptr(m_trueTypeExtension->GetTrueTypeTable(error, tag, &tableByteLength));
+
+    if (error != KErrNone) {
+        return false;
+    } else if (*length > 0 && *length < tableByteLength) {
+        result = false; // Caller did not allocate enough memory
+    } else {
+        *length = tableByteLength;
+        if (buffer)
+            qMemCopy(buffer, table, tableByteLength);
+    }
+
+    m_trueTypeExtension->ReleaseTrueTypeTable(table);
+    return result;
+}
+
+const unsigned char *QSymbianTypeFaceExtras::cmap() const
 {
     if (!m_cmap) {
@@ -90,25 +112,5 @@
 }
 
-QPainterPath QFontEngineS60Extensions::glyphOutline(glyph_t glyph) const
-{
-    QPainterPath result;
-    QPolygonF polygon;
-    TInt glyphIndex = glyph;
-    TInt pointNumber = 0;
-    TInt x, y;
-    while (m_shapingExtension->GlyphPointInFontUnits(glyphIndex, pointNumber++, x, y)) {
-        const QPointF point(qreal(x) / 0xffff, qreal(y) / 0xffff);
-        if (polygon.contains(point)) {
-            result.addPolygon(polygon);
-            result.closeSubpath();
-            polygon.clear();
-        } else {
-            polygon.append(point);
-        }
-    }
-    return result;
-}
-
-CFont *QFontEngineS60Extensions::fontOwner() const
+CFont *QSymbianTypeFaceExtras::fontOwner() const
 {
     return m_fontOwner;
@@ -168,6 +170,6 @@
 }
 
-QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Extensions *extensions)
-    : m_extensions(extensions)
+QFontEngineS60::QFontEngineS60(const QFontDef &request, const QSymbianTypeFaceExtras *extras)
+    : m_extras(extras)
     , m_originalFont(0)
     , m_originalFontSizeInPixels((request.pixelSize >= 0)?
@@ -196,8 +198,10 @@
 
     HB_Glyph *g = glyphs->glyphs;
-    const unsigned char* cmap = m_extensions->cmap();
+    const unsigned char* cmap = m_extras->cmap();
+    const bool isRtl = (flags & QTextEngine::RightToLeft);
     for (int i = 0; i < len; ++i) {
         const unsigned int uc = getChar(characters, i, len);
-        *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, uc);
+        *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap,
+        		isRtl ? QChar::mirroredChar(uc) : uc);
     }
 
@@ -217,6 +221,6 @@
     for (int i = 0; i < glyphs->numGlyphs; i++) {
         const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]);
-        glyphs->advances_x[i] = glyphs->offsets[i].x = bbox.xoff;
-        glyphs->advances_y[i] = glyphs->offsets[i].y = bbox.yoff;
+        glyphs->advances_x[i] = bbox.xoff;
+        glyphs->advances_y[i] = bbox.yoff;
     }
 }
@@ -313,5 +317,5 @@
 bool QFontEngineS60::canRender(const QChar *string, int len)
 {
-    const unsigned char *cmap = m_extensions->cmap();
+    const unsigned char *cmap = m_extras->cmap();
     for (int i = 0; i < len; ++i) {
         const unsigned int uc = getChar(string, i, len);
@@ -324,5 +328,10 @@
 QByteArray QFontEngineS60::getSfntTable(uint tag) const
 {
-    return m_extensions->getSfntTable(tag);
+    return m_extras->getSfntTable(tag);
+}
+
+bool QFontEngineS60::getSfntTableData(uint tag, uchar *buffer, uint *length) const
+{
+    return m_extras->getSfntTableData(tag, buffer, length);
 }
 
Index: /trunk/src/gui/text/qfontengine_s60_p.h
===================================================================
--- /trunk/src/gui/text/qfontengine_s60_p.h	(revision 768)
+++ /trunk/src/gui/text/qfontengine_s60_p.h	(revision 769)
@@ -57,27 +57,23 @@
 #include "qfontengine_p.h"
 #include "qsize.h"
-#include <OPENFONT.H>
+#include <openfont.h>
 
-class CFbsBitmap;
-class CFbsBitmapDevice;
-class CFbsBitGc;
 class CFont;
 
 QT_BEGIN_NAMESPACE
 
-// ..gives us access to truetype tables, UTF-16<->GlyphID mapping, and glyph outlines
-class QFontEngineS60Extensions
+// ..gives us access to truetype tables
+class QSymbianTypeFaceExtras
 {
 public:
-    QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font);
+    QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font);
 
     QByteArray getSfntTable(uint tag) const;
+    bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
     const unsigned char *cmap() const;
-    QPainterPath glyphOutline(glyph_t glyph) const;
     CFont *fontOwner() const;
 
 private:
     COpenFont *m_font;
-    const MOpenFontShapingExtension *m_shapingExtension;
     mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
     mutable const unsigned char *m_cmap;
@@ -90,5 +86,5 @@
 {
 public:
-    QFontEngineS60(const QFontDef &fontDef, const QFontEngineS60Extensions *extensions);
+    QFontEngineS60(const QFontDef &fontDef, const QSymbianTypeFaceExtras *extras);
     ~QFontEngineS60();
 
@@ -110,4 +106,5 @@
 
     QByteArray getSfntTable(uint tag) const;
+    bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
 
     static qreal pixelsToPoints(qreal pixels, Qt::Orientation orientation = Qt::Horizontal);
@@ -130,5 +127,5 @@
     static void releaseFont(CFont *&font);
 
-    const QFontEngineS60Extensions *m_extensions;
+    const QSymbianTypeFaceExtras *m_extras;
     CFont* m_originalFont;
     const qreal m_originalFontSizeInPixels;
Index: /trunk/src/gui/text/qfontengine_win.cpp
===================================================================
--- /trunk/src/gui/text/qfontengine_win.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontengine_win.cpp	(revision 769)
@@ -40,4 +40,9 @@
 ****************************************************************************/
 
+#if _WIN32_WINNT < 0x0500
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
 #include "qfontengine_p.h"
 #include "qtextengine_p.h"
@@ -650,4 +655,30 @@
 static const int char_table_entries = sizeof(char_table)/sizeof(ushort);
 
+#ifndef Q_CC_MINGW
+void QFontEngineWin::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    HDC hdc = shared_dc();
+    SelectObject(hdc, hfont);
+
+#ifndef Q_WS_WINCE
+    if (ttf)
+#endif
+
+    {
+        ABC abcWidths;
+        GetCharABCWidthsI(hdc, glyph, 1, 0, &abcWidths);
+        if (leftBearing)
+            *leftBearing = abcWidths.abcA;
+        if (rightBearing)
+            *rightBearing = abcWidths.abcC;
+    }
+
+#ifndef Q_WS_WINCE
+    else {
+        QFontEngine::getGlyphBearings(glyph, leftBearing, rightBearing);
+    }
+#endif
+}
+#endif // Q_CC_MINGW
 
 qreal QFontEngineWin::minLeftBearing() const
Index: /trunk/src/gui/text/qfontengine_win_p.h
===================================================================
--- /trunk/src/gui/text/qfontengine_win_p.h	(revision 768)
+++ /trunk/src/gui/text/qfontengine_win_p.h	(revision 769)
@@ -107,4 +107,8 @@
     virtual QImage alphaRGBMapForGlyph(glyph_t t, int margin, const QTransform &xform);
 
+#ifndef Q_CC_MINGW
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+#endif
+
     int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs, bool mirrored) const;
     void getCMap();
Index: /trunk/src/gui/text/qfontmetrics.cpp
===================================================================
--- /trunk/src/gui/text/qfontmetrics.cpp	(revision 768)
+++ /trunk/src/gui/text/qfontmetrics.cpp	(revision 769)
@@ -64,5 +64,5 @@
                            int tabStops, int *tabArray, int tabArrayLen,
                            QPainter *painter);
-extern int qt_defaultDpi();
+Q_GUI_EXPORT extern int qt_defaultDpi();
 
 /*****************************************************************************
@@ -473,6 +473,7 @@
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return qRound(gi.x);
+    qreal lb;
+    engine->getGlyphBearings(glyphs.glyphs[0], &lb);
+    return qRound(lb);
 }
 
@@ -507,6 +508,7 @@
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return qRound(gi.xoff - gi.x - gi.width);
+    qreal rb;
+    engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb);
+    return qRound(rb);
 }
 
@@ -1318,6 +1320,7 @@
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return gi.x.toReal();
+    qreal lb;
+    engine->getGlyphBearings(glyphs.glyphs[0], &lb);
+    return lb;
 }
 
@@ -1352,6 +1355,8 @@
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return (gi.xoff - gi.x - gi.width).toReal();
+    qreal rb;
+    engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb);
+    return rb;
+
 }
 
Index: /trunk/src/gui/text/qtextcontrol.cpp
===================================================================
--- /trunk/src/gui/text/qtextcontrol.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextcontrol.cpp	(revision 769)
@@ -1200,5 +1200,6 @@
             cursor.setBlockFormat(blockFmt);
         } else {
-            cursor.deletePreviousChar();
+            QTextCursor localCursor = cursor;
+            localCursor.deletePreviousChar();
         }
         goto accept;
@@ -1233,5 +1234,6 @@
 #endif
     else if (e == QKeySequence::Delete) {
-        cursor.deleteChar();
+        QTextCursor localCursor = cursor;
+        localCursor.deleteChar();
     }
     else if (e == QKeySequence::DeleteEndOfWord) {
Index: /trunk/src/gui/text/qtextdocument.cpp
===================================================================
--- /trunk/src/gui/text/qtextdocument.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextdocument.cpp	(revision 769)
@@ -1632,5 +1632,5 @@
 }
 
-extern int qt_defaultDpi();
+Q_GUI_EXPORT extern int qt_defaultDpi();
 
 /*!
@@ -1680,5 +1680,5 @@
 
     const QTextDocument *doc = this;
-    QTextDocument *clonedDoc = 0;
+    QScopedPointer<QTextDocument> clonedDoc;
     (void)doc->documentLayout(); // make sure that there is a layout
 
@@ -1713,5 +1713,5 @@
     } else {
         doc = clone(const_cast<QTextDocument *>(this));
-        clonedDoc = const_cast<QTextDocument *>(doc);
+        clonedDoc.reset(const_cast<QTextDocument *>(doc));
 
         for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock();
@@ -1788,5 +1788,5 @@
                 if (printer->printerState() == QPrinter::Aborted
                     || printer->printerState() == QPrinter::Error)
-                    goto UserCanceled;
+                    return;
                 printPage(page, &p, doc, body, pageNumberPos);
                 if (j < pageCopies - 1)
@@ -1808,7 +1808,4 @@
             printer->newPage();
     }
-
-UserCanceled:
-    delete clonedDoc;
 }
 #endif
Index: /trunk/src/gui/text/qtextdocumentlayout.cpp
===================================================================
--- /trunk/src/gui/text/qtextdocumentlayout.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextdocumentlayout.cpp	(revision 769)
@@ -76,5 +76,5 @@
 QT_BEGIN_NAMESPACE
 
-extern int qt_defaultDpi();
+Q_GUI_EXPORT extern int qt_defaultDpi();
 
 // ################ should probably add frameFormatChange notification!
Index: /trunk/src/gui/text/qtextengine.cpp
===================================================================
--- /trunk/src/gui/text/qtextengine.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextengine.cpp	(revision 769)
@@ -82,5 +82,5 @@
     {
         if ((int)caps == (int)QFont::SmallCaps)
-            generateScriptItemsSmallCaps(m_string.utf16(), start, length);
+            generateScriptItemsSmallCaps(reinterpret_cast<const ushort *>(m_string.unicode()), start, length);
         else if(caps == QFont::Capitalize)
             generateScriptItemsCapitalize(start, length);
@@ -857,5 +857,5 @@
 }
 
-extern int qt_defaultDpiY(); // in qfont.cpp
+Q_GUI_EXPORT extern int qt_defaultDpiY(); // in qfont.cpp
 
 void QTextEngine::shapeText(int item) const
@@ -1435,7 +1435,5 @@
     }
 
-    const ushort *unicode = layoutData->string.utf16();
-    // correctly assign script, isTab and isObject to the script analysis
-    const ushort *uc = unicode;
+    const ushort *uc = reinterpret_cast<const ushort *>(layoutData->string.unicode());
     const ushort *e = uc + length;
     int lastScript = QUnicodeTables::Common;
@@ -1651,5 +1649,5 @@
             }
 
-            glyph_t glyph = glyphs.glyphs[logClusters[pos + ilen - 1]];
+            glyph_t glyph = glyphs.glyphs[logClusters[ilen - 1]];
             glyph_metrics_t gi = fe->boundingBox(glyph);
             if (gi.isValid())
@@ -2498,5 +2496,5 @@
 }
 
-extern int qt_defaultDpiY();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
 
 QFixed QTextEngine::calculateTabWidth(int item, QFixed x) const
Index: /trunk/src/gui/text/qtextengine_p.h
===================================================================
--- /trunk/src/gui/text/qtextengine_p.h	(revision 768)
+++ /trunk/src/gui/text/qtextengine_p.h	(revision 769)
@@ -383,4 +383,5 @@
     QFixed width;
     QFixed textWidth;
+    QFixed textAdvance;
     int from;
     signed int length : 29;
Index: /trunk/src/gui/text/qtextformat.cpp
===================================================================
--- /trunk/src/gui/text/qtextformat.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextformat.cpp	(revision 769)
@@ -3086,5 +3086,6 @@
         f.d->resolveFont(defaultFnt);
 
-        hashes.insert(hash, idx);
+        if (!hashes.contains(hash, idx))
+            hashes.insert(hash, idx);
 
     } QT_CATCH(...) {
Index: /trunk/src/gui/text/qtextimagehandler.cpp
===================================================================
--- /trunk/src/gui/text/qtextimagehandler.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextimagehandler.cpp	(revision 769)
@@ -124,5 +124,5 @@
     QPaintDevice *pdev = doc->documentLayout()->paintDevice();
     if (pdev) {
-        extern int qt_defaultDpi();
+        Q_GUI_EXPORT extern int qt_defaultDpi();
         if (pm.isNull())
             pm = getPixmap(doc, format);
Index: /trunk/src/gui/text/qtextlayout.cpp
===================================================================
--- /trunk/src/gui/text/qtextlayout.cpp	(revision 768)
+++ /trunk/src/gui/text/qtextlayout.cpp	(revision 769)
@@ -90,7 +90,7 @@
             align = Qt::AlignRight;
         if (align & Qt::AlignRight)
-            x = line.width - (line.textWidth + leadingSpaceWidth(eng, line));
+            x = line.width - (line.textAdvance + leadingSpaceWidth(eng, line));
         else if (align & Qt::AlignHCenter)
-            x = (line.width - line.textWidth)/2;
+            x = (line.width - line.textAdvance)/2;
     }
     return x;
@@ -1332,5 +1332,5 @@
     const QScriptLine &sl = d->lines[line];
 
-    const qreal x = position.x() + l.cursorToX(cursorPosition);
+    qreal x = position.x() + l.cursorToX(cursorPosition);
 
     int itm = d->findItem(cursorPosition - 1);
@@ -1351,4 +1351,8 @@
     if (toggleAntialiasing)
         p->setRenderHint(QPainter::Antialiasing);
+#if defined(QT_MAC_USE_COCOA)
+    // Always draw the cursor aligned to pixel boundary.
+    x = qRound(x);
+#endif
     p->fillRect(QRectF(x, y, qreal(width), (base + descent + 1).toReal()), p->pen().brush());
     if (toggleAntialiasing)
@@ -1641,19 +1645,58 @@
     struct LineBreakHelper
     {
-        LineBreakHelper() : glyphCount(0), maxGlyphs(0), manualWrap(false) {}
+        LineBreakHelper()
+            : glyphCount(0), maxGlyphs(0), currentPosition(0), fontEngine(0), logClusters(0),
+              manualWrap(false)
+        {
+        }
+
 
         QScriptLine tmpData;
         QScriptLine spaceData;
 
+        QGlyphLayout glyphs;
+
         int glyphCount;
         int maxGlyphs;
+        int currentPosition;
 
         QFixed minw;
         QFixed softHyphenWidth;
         QFixed rightBearing;
+        QFixed minimumRightBearing;
+
+        QFontEngine *fontEngine;
+        const unsigned short *logClusters;
 
         bool manualWrap;
 
         bool checkFullOtherwiseExtend(QScriptLine &line);
+
+        QFixed calculateNewWidth(const QScriptLine &line) const {
+            return line.textWidth + tmpData.textWidth + spaceData.textWidth + softHyphenWidth
+                    - qMin(rightBearing, QFixed());
+        }
+
+        inline glyph_t currentGlyph() const
+        {
+            Q_ASSERT(currentPosition > 0);
+            return glyphs.glyphs[logClusters[currentPosition - 1]];
+        }
+
+        inline void adjustRightBearing()
+        {
+            if (currentPosition <= 0)
+                return;
+
+            qreal rb;
+            fontEngine->getGlyphBearings(currentGlyph(), 0, &rb);
+            rightBearing = qMin(QFixed(), QFixed::fromReal(rb));
+        }
+
+        inline void resetRightBearing()
+        {
+            rightBearing = QFixed(1); // Any positive number is defined as invalid since only
+                                      // negative right bearings are interesting to us.
+        }
     };
 
@@ -1662,5 +1705,5 @@
     LB_DEBUG("possible break width %f, spacew=%f", tmpData.textWidth.toReal(), spaceData.textWidth.toReal());
 
-    QFixed newWidth = line.textWidth + tmpData.textWidth + spaceData.textWidth + softHyphenWidth + rightBearing;
+    QFixed newWidth = calculateNewWidth(line);
     if (line.length && !manualWrap && (newWidth > line.width || glyphCount > maxGlyphs))
         return true;
@@ -1738,11 +1781,10 @@
 
     const HB_CharAttributes *attributes = eng->attributes();
-    int pos = line.from;
+    lbh.currentPosition = line.from;
     int end = 0;
-    QGlyphLayout glyphs;
-    const unsigned short *logClusters = eng->layoutData->logClustersPtr;
+    lbh.logClusters = eng->layoutData->logClustersPtr;
 
     while (newItem < eng->layoutData->items.size()) {
-        lbh.rightBearing = 0;
+        lbh.resetRightBearing();
         lbh.softHyphenWidth = 0;
         if (newItem != item) {
@@ -1752,11 +1794,17 @@
                 eng->shape(item);
                 attributes = eng->attributes();
-                logClusters = eng->layoutData->logClustersPtr;
+                lbh.logClusters = eng->layoutData->logClustersPtr;
             }
-            pos = qMax(line.from, current.position);
+            lbh.currentPosition = qMax(line.from, current.position);
             end = current.position + eng->length(item);
-            glyphs = eng->shapedGlyphs(&current);
+            lbh.glyphs = eng->shapedGlyphs(&current);
         }
         const QScriptItem &current = eng->layoutData->items[item];
+        QFontEngine *fontEngine = eng->fontEngine(current);
+        if (lbh.fontEngine != fontEngine) {
+            lbh.fontEngine = fontEngine;
+            lbh.minimumRightBearing = qMin(QFixed(),
+                                           QFixed::fromReal(fontEngine->minRightBearing()));
+        }
 
         lbh.tmpData.leading = qMax(lbh.tmpData.leading + lbh.tmpData.ascent,
@@ -1788,6 +1836,6 @@
                 line.setDefaultHeight(eng);
             if (eng->option.flags() & QTextOption::ShowLineAndParagraphSeparators) {
-                addNextCluster(pos, end, lbh.tmpData, lbh.glyphCount,
-                               current, logClusters, glyphs);
+                addNextCluster(lbh.currentPosition, end, lbh.tmpData, lbh.glyphCount,
+                               current, lbh.logClusters, lbh.glyphs);
             } else {
                 lbh.tmpData.length++;
@@ -1808,8 +1856,8 @@
             if (lbh.checkFullOtherwiseExtend(line))
                 goto found;
-        } else if (attributes[pos].whiteSpace) {
-            while (pos < end && attributes[pos].whiteSpace)
-                addNextCluster(pos, end, lbh.spaceData, lbh.glyphCount,
-                               current, logClusters, glyphs);
+        } else if (attributes[lbh.currentPosition].whiteSpace) {
+            while (lbh.currentPosition < end && attributes[lbh.currentPosition].whiteSpace)
+                addNextCluster(lbh.currentPosition, end, lbh.spaceData, lbh.glyphCount,
+                               current, lbh.logClusters, lbh.glyphs);
 
             if (!lbh.manualWrap && lbh.spaceData.textWidth > line.width) {
@@ -1820,17 +1868,17 @@
             bool sb_or_ws = false;
             do {
-                addNextCluster(pos, end, lbh.tmpData, lbh.glyphCount,
-                               current, logClusters, glyphs);
-
-                if (attributes[pos].whiteSpace || attributes[pos-1].lineBreakType != HB_NoBreak) {
+                addNextCluster(lbh.currentPosition, end, lbh.tmpData, lbh.glyphCount,
+                               current, lbh.logClusters, lbh.glyphs);
+
+                if (attributes[lbh.currentPosition].whiteSpace || attributes[lbh.currentPosition-1].lineBreakType != HB_NoBreak) {
                     sb_or_ws = true;
                     break;
-                } else if (breakany && attributes[pos].charStop) {
+                } else if (breakany && attributes[lbh.currentPosition].charStop) {
                     break;
                 }
-            } while (pos < end);
+            } while (lbh.currentPosition < end);
             lbh.minw = qMax(lbh.tmpData.textWidth, lbh.minw);
 
-            if (pos && attributes[pos - 1].lineBreakType == HB_SoftHyphen) {
+            if (lbh.currentPosition && attributes[lbh.currentPosition - 1].lineBreakType == HB_SoftHyphen) {
                 // if we are splitting up a word because of
                 // a soft hyphen then we ...
@@ -1850,7 +1898,7 @@
                 //
                 if (line.length)
-                    lbh.softHyphenWidth = glyphs.advances_x[logClusters[pos - 1]];
+                    lbh.softHyphenWidth = lbh.glyphs.advances_x[lbh.logClusters[lbh.currentPosition - 1]];
                 else if (breakany)
-                    lbh.tmpData.textWidth += glyphs.advances_x[logClusters[pos - 1]];
+                    lbh.tmpData.textWidth += lbh.glyphs.advances_x[lbh.logClusters[lbh.currentPosition - 1]];
             }
 
@@ -1859,30 +1907,29 @@
             // of the advance of the glyph, the bearing will be negative. We flip the sign
             // for the code to be more readable. Logic borrowed from qfontmetrics.cpp.
-            if (pos) {
-                QFontEngine *fontEngine = eng->fontEngine(current);
-                glyph_t glyph = glyphs.glyphs[logClusters[pos - 1]];
-                glyph_metrics_t gi = fontEngine->boundingBox(glyph);
-                if (gi.isValid())
-                    lbh.rightBearing = qMax(QFixed(), -(gi.xoff - gi.x - gi.width));
+            // We ignore the right bearing if the minimum negative bearing is too little to
+            // expand the text beyond the edge.
+            if (sb_or_ws|breakany) {
+                if (lbh.calculateNewWidth(line) + lbh.minimumRightBearing > line.width)
+                    lbh.adjustRightBearing();
+                if (lbh.checkFullOtherwiseExtend(line)) {
+                    if (!breakany) {
+                        line.textWidth += lbh.softHyphenWidth;
+                    }
+
+                    goto found;
+                }
             }
-
-            if ((sb_or_ws|breakany) && lbh.checkFullOtherwiseExtend(line)) {
-                if (!breakany) {
-                    line.textWidth += lbh.softHyphenWidth;
-                }
-
-                line.textWidth += lbh.rightBearing;
-
-                goto found;
-            }
-        }
-        if (pos == end)
+        }
+        if (lbh.currentPosition == end)
             newItem = item + 1;
     }
     LB_DEBUG("reached end of line");
     lbh.checkFullOtherwiseExtend(line);
-    line.textWidth += lbh.rightBearing;
-
 found:       
+    if (lbh.rightBearing > 0) // If right bearing has not yet been adjusted
+        lbh.adjustRightBearing();
+    line.textAdvance = line.textWidth;
+    line.textWidth -= qMin(QFixed(), lbh.rightBearing);
+
     if (line.length == 0) {
         LB_DEBUG("no break available in line, adding temp: length %d, width %f, space: length %d, width %f",
Index: /trunk/src/gui/text/qzip.cpp
===================================================================
--- /trunk/src/gui/text/qzip.cpp	(revision 768)
+++ /trunk/src/gui/text/qzip.cpp	(revision 769)
@@ -55,8 +55,11 @@
 
 #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
Index: /trunk/src/gui/text/qzipreader_p.h
===================================================================
--- /trunk/src/gui/text/qzipreader_p.h	(revision 768)
+++ /trunk/src/gui/text/qzipreader_p.h	(revision 769)
@@ -50,5 +50,5 @@
 //
 // 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.
 //
Index: /trunk/src/gui/text/qzipwriter_p.h
===================================================================
--- /trunk/src/gui/text/qzipwriter_p.h	(revision 768)
+++ /trunk/src/gui/text/qzipwriter_p.h	(revision 769)
@@ -48,5 +48,5 @@
 //
 // 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.
 //
Index: /trunk/src/gui/util/qcompleter.cpp
===================================================================
--- /trunk/src/gui/util/qcompleter.cpp	(revision 768)
+++ /trunk/src/gui/util/qcompleter.cpp	(revision 769)
@@ -528,15 +528,20 @@
     cost = cost + m.indices.cost() - old.indices.cost();
     if (cost * sizeof(int) > 1024 * 1024) {
-        QMap<QModelIndex, CacheItem>::iterator it1 ;
-        for (it1 = cache.begin(); it1 != cache.end(); ++it1) {
+        QMap<QModelIndex, CacheItem>::iterator it1 = cache.begin();
+        while (it1 != cache.end()) {
             CacheItem& ci = it1.value();
             int sz = ci.count()/2;
             QMap<QString, QMatchData>::iterator it2 = ci.begin();
-            for (int i = 0; it2 != ci.end() && i < sz; i++, ++it2) {
+            int i = 0;
+            while (it2 != ci.end() && i < sz) {
                 cost -= it2.value().indices.cost();
-                ci.erase(it2);
+                it2 = ci.erase(it2);
+                i++;
             }
-            if (ci.count() == 0)
-                cache.erase(it1);
+            if (ci.count() == 0) {
+              it1 = cache.erase(it1);
+            } else {
+              ++it1;
+            }
         }
     }
@@ -1749,5 +1754,5 @@
     This signal is sent when an item in the popup() is highlighted by
     the user. It is also sent if complete() is called with the completionMode()
-    set to QCOmpleter::InlineCompletion. The item's \a text is given.
+    set to QCompleter::InlineCompletion. The item's \a text is given.
 */
 
Index: /trunk/src/gui/util/qdesktopservices_s60.cpp
===================================================================
--- /trunk/src/gui/util/qdesktopservices_s60.cpp	(revision 768)
+++ /trunk/src/gui/util/qdesktopservices_s60.cpp	(revision 769)
@@ -49,5 +49,4 @@
 #include <private/qcore_symbian_p.h>
 
-#include <miutset.h>                // KUidMsgTypeSMTP
 #include <txtrich.h>                // CRichText
 #include <f32file.h>                // TDriveUnit etc
@@ -58,9 +57,12 @@
 #include <rsendasmessage.h>         // RSendAsMessage
 
+// copied from miutset.h, so we don't get a dependency into the app layer
+const TUid KUidMsgTypeSMTP			= {0x10001028};	// 268439592
+
 #ifdef Q_WS_S60
 #  include <pathinfo.h>             // PathInfo
 #  ifdef USE_DOCUMENTHANDLER
-#    include <documenthandler.h>    // CDocumentHandler
-#    include <aknserverapp.h>
+#    include <DocumentHandler.h>    // CDocumentHandler
+#    include <AknServerApp.h>
 #  endif
 #else
Index: /trunk/src/gui/util/qsystemtrayicon_mac.mm
===================================================================
--- /trunk/src/gui/util/qsystemtrayicon_mac.mm	(revision 768)
+++ /trunk/src/gui/util/qsystemtrayicon_mac.mm	(revision 769)
@@ -531,5 +531,9 @@
             const QIcon icon = action->icon();
             if(!icon.isNull()) {
+#ifndef QT_MAC_USE_COCOA
+                const short scale = GetMBarHeight();
+#else
                 const short scale = [[NSApp mainMenu] menuBarHeight];
+#endif
                 NSImage *nsimage = static_cast<NSImage *>(qt_mac_create_nsimage(icon.pixmap(QSize(scale, scale))));
                 [item setImage: nsimage];
@@ -570,15 +574,2 @@
 @end
 
-
-/* Done here because this is the only .mm for now! -Sam */
-QMacCocoaAutoReleasePool::QMacCocoaAutoReleasePool()
-{
-    NSApplicationLoad();
-    pool = (void*)[[NSAutoreleasePool alloc] init];
-}
-
-QMacCocoaAutoReleasePool::~QMacCocoaAutoReleasePool()
-{
-    [(NSAutoreleasePool*)pool release];
-}
-
Index: /trunk/src/gui/util/qsystemtrayicon_p.h
===================================================================
--- /trunk/src/gui/util/qsystemtrayicon_p.h	(revision 768)
+++ /trunk/src/gui/util/qsystemtrayicon_p.h	(revision 769)
@@ -165,5 +165,7 @@
     void mousePressEvent(QMouseEvent *event);
     void mouseDoubleClickEvent(QMouseEvent *event);
+#ifndef QT_NO_WHEELEVENT
     void wheelEvent(QWheelEvent *event);
+#endif
     bool event(QEvent *e);
 
Index: /trunk/src/gui/util/qsystemtrayicon_win.cpp
===================================================================
--- /trunk/src/gui/util/qsystemtrayicon_win.cpp	(revision 768)
+++ /trunk/src/gui/util/qsystemtrayicon_win.cpp	(revision 769)
@@ -62,15 +62,7 @@
 #include <QSettings>
 
-#if defined(Q_WS_WINCE) && !defined(STANDARDSHELL_UI_MODEL)
-#   include <streams.h>
-#endif
-
 QT_BEGIN_NAMESPACE
 
-#if defined(Q_WS_WINCE)
-static const UINT q_uNOTIFYICONID = 13;     // IDs from 0 to 12 are reserved on WinCE.
-#else
 static const UINT q_uNOTIFYICONID = 0;
-#endif
 
 static uint MYWM_TASKBARCREATED = 0;
@@ -126,8 +118,5 @@
 bool QSystemTrayIconSys::supportsMessages()
 {
-#ifndef Q_OS_WINCE
     return allowsMessages();
-#endif
-    return false;
 }
 
@@ -136,11 +125,6 @@
 
 {
-#ifndef Q_OS_WINCE
     notifyIconSize = FIELD_OFFSET(NOTIFYICONDATA, guidItem); // NOTIFYICONDATAW_V2_SIZE;
     maxTipLength = 128;
-#else
-    notifyIconSize = FIELD_OFFSET(NOTIFYICONDATA, szTip[64]); // NOTIFYICONDATAW_V1_SIZE;
-    maxTipLength = 64;
-#endif
 
     // For restoring the tray icon after explorer crashes
@@ -318,13 +302,4 @@
                 if (q->contextMenu()) {
                     q->contextMenu()->popup(gpos);
-#if defined(Q_WS_WINCE)
-                    // We must ensure that the popup menu doesn't show up behind the task bar.
-                    QRect desktopRect = qApp->desktop()->availableGeometry();
-                    int maxY = desktopRect.y() + desktopRect.height() - q->contextMenu()->height();
-                    if (gpos.y() > maxY) {
-                        gpos.ry() = maxY;
-                        q->contextMenu()->move(gpos);
-                    }
-#endif
                     q->contextMenu()->activateWindow();
                     //Must be activated for proper keyboardfocus and menu closing on windows:
@@ -333,9 +308,7 @@
                 break;
 
-#if !defined(Q_WS_WINCE)
             case NIN_BALLOONUSERCLICK:
                 emit q->messageClicked();
                 break;
-#endif
 
             case WM_MBUTTONUP:
@@ -404,21 +377,9 @@
     //find the toolbar used in the notification area
     if (trayHandle) {
-#if defined(Q_OS_WINCE)
-        trayHandle = FindWindow(L"TrayNotifyWnd", NULL);
-#else
         trayHandle = FindWindowEx(trayHandle, NULL, L"TrayNotifyWnd", NULL);
-#endif
         if (trayHandle) {
-#if defined(Q_OS_WINCE)
-            HWND hwnd = FindWindow(L"SysPager", NULL);
-#else
             HWND hwnd = FindWindowEx(trayHandle, NULL, L"SysPager", NULL);
-#endif
             if (hwnd) {
-#if defined(Q_OS_WINCE)
-                hwnd = FindWindow(L"ToolbarWindow32", NULL);
-#else
                 hwnd = FindWindowEx(hwnd, NULL, L"ToolbarWindow32", NULL);
-#endif
                 if (hwnd)
                     trayHandle = hwnd;
@@ -439,9 +400,5 @@
 
     int buttonCount = SendMessage(trayHandle, TB_BUTTONCOUNT, 0, 0);
-#if defined(Q_OS_WINCE)
-    LPVOID data = VirtualAlloc(NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
-#else
     LPVOID data = VirtualAllocEx(trayProcess, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
-#endif
 
     if ( buttonCount < 1 || !data ) {
@@ -481,9 +438,5 @@
         }
     }
-#if defined(Q_OS_WINCE)
-    VirtualFree(data, 0, MEM_RELEASE);
-#else
     VirtualFreeEx(trayProcess, data, 0, MEM_RELEASE);
-#endif
     CloseHandle(trayProcess);
     return ret;
@@ -559,14 +512,8 @@
 void QSystemTrayIconPrivate::updateToolTip_sys()
 {
-#ifdef Q_WS_WINCE
-    // Calling sys->trayMessage(NIM_MODIFY) on an existing icon is broken on Windows CE.
-    // So we need to call updateIcon_sys() which creates a new icon handle.
-    updateIcon_sys();
-#else
     if (!sys)
         return;
 
     sys->trayMessage(NIM_MODIFY);
-#endif
 }
 
Index: /trunk/src/gui/util/qsystemtrayicon_wince.cpp
===================================================================
--- /trunk/src/gui/util/qsystemtrayicon_wince.cpp	(revision 769)
+++ /trunk/src/gui/util/qsystemtrayicon_wince.cpp	(revision 769)
@@ -0,0 +1,299 @@
+/****************************************************************************
+**
+** 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$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsystemtrayicon_p.h"
+#ifndef QT_NO_SYSTEMTRAYICON
+#define _WIN32_IE 0x0600 //required for NOTIFYICONDATA_V2_SIZE
+
+#include <qt_windows.h>
+#include <shlwapi.h>
+#include <QApplication>
+
+QT_BEGIN_NAMESPACE
+
+static const UINT q_uNOTIFYICONID = 13;     // IDs from 0 to 12 are reserved on WinCE.
+#define MYWM_NOTIFYICON (WM_APP+101)
+
+struct Q_NOTIFYICONIDENTIFIER {
+    DWORD cbSize;
+    HWND hWnd;
+    UINT uID;
+    GUID guidItem;
+};
+
+class QSystemTrayIconSys : QWidget
+{
+public:
+    QSystemTrayIconSys(QSystemTrayIcon *object);
+    ~QSystemTrayIconSys();
+    bool winEvent( MSG *m, long *result );
+    bool trayMessage(DWORD msg);
+    void setIconContents(NOTIFYICONDATA &data);
+    void createIcon();
+    QRect findTrayGeometry();
+    HICON hIcon;
+    QPoint globalPos;
+    QSystemTrayIcon *q;
+private:
+    uint notifyIconSize;
+    int maxTipLength;
+    bool ignoreNextMouseRelease;
+};
+
+QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *object)
+    : hIcon(0), q(object), ignoreNextMouseRelease(false)
+
+{
+    notifyIconSize = FIELD_OFFSET(NOTIFYICONDATA, szTip[64]); // NOTIFYICONDATAW_V1_SIZE;
+    maxTipLength = 64;
+}
+
+QSystemTrayIconSys::~QSystemTrayIconSys()
+{
+    if (hIcon)
+        DestroyIcon(hIcon);
+}
+
+QRect QSystemTrayIconSys::findTrayGeometry()
+{
+    // Use lower right corner as fallback
+    QPoint brCorner = qApp->desktop()->screenGeometry().bottomRight();
+    QRect ret(brCorner.x() - 10, brCorner.y() - 10, 10, 10);
+    return ret;
+}
+
+void QSystemTrayIconSys::setIconContents(NOTIFYICONDATA &tnd)
+{
+    tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
+    tnd.uCallbackMessage = MYWM_NOTIFYICON;
+    tnd.hIcon = hIcon;
+    QString tip = q->toolTip();
+
+    if (!tip.isNull()) {
+        tip = tip.left(maxTipLength - 1) + QChar();
+        memcpy(tnd.szTip, tip.utf16(), qMin(tip.length() + 1, maxTipLength) * sizeof(wchar_t));
+    }
+}
+
+bool QSystemTrayIconSys::trayMessage(DWORD msg)
+{
+    NOTIFYICONDATA tnd;
+    memset(&tnd, 0, notifyIconSize);
+    tnd.uID = q_uNOTIFYICONID;
+    tnd.cbSize = notifyIconSize;
+    tnd.hWnd = winId();
+
+    Q_ASSERT(testAttribute(Qt::WA_WState_Created));
+
+    if (msg != NIM_DELETE) {
+        setIconContents(tnd);
+    }
+
+    return Shell_NotifyIcon(msg, &tnd);
+}
+
+void QSystemTrayIconSys::createIcon()
+{
+    hIcon = 0;
+    QIcon icon = q->icon();
+    if (icon.isNull())
+        return;
+
+    //const QSize preferredSize(GetSystemMetrics(SM_CXSMICON) * 2, GetSystemMetrics(SM_CYSMICON) * 2);
+    const QSize preferredSize(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
+    QPixmap pm = icon.pixmap(preferredSize);
+    if (pm.isNull())
+        return;
+
+    hIcon = pm.toWinHICON();
+}
+
+bool QSystemTrayIconSys::winEvent( MSG *m, long *result )
+{
+    switch(m->message) {
+    case WM_CREATE:
+        SetWindowLong(winId(), GWL_USERDATA, (LONG)((CREATESTRUCTW*)m->lParam)->lpCreateParams);
+        break;
+
+    case MYWM_NOTIFYICON:
+        {
+            RECT r;
+            GetWindowRect(winId(), &r);
+            QEvent *e = 0;
+            Qt::KeyboardModifiers keys = QApplication::keyboardModifiers();
+            QPoint gpos = QCursor::pos();
+
+            switch (m->lParam) {
+            case WM_LBUTTONUP:
+                if (ignoreNextMouseRelease)
+                    ignoreNextMouseRelease = false;
+                else
+                    emit q->activated(QSystemTrayIcon::Trigger);
+                break;
+
+            case WM_LBUTTONDBLCLK:
+                ignoreNextMouseRelease = true; // Since DBLCLICK Generates a second mouse 
+                                               // release we must ignore it
+                emit q->activated(QSystemTrayIcon::DoubleClick);
+                break;
+
+            case WM_RBUTTONUP:
+                if (q->contextMenu()) {
+                    q->contextMenu()->popup(gpos);
+
+                    // We must ensure that the popup menu doesn't show up behind the task bar.
+                    QRect desktopRect = qApp->desktop()->availableGeometry();
+                    int maxY = desktopRect.y() + desktopRect.height() - q->contextMenu()->height();
+                    if (gpos.y() > maxY) {
+                        gpos.ry() = maxY;
+                        q->contextMenu()->move(gpos);
+                    }
+
+                    q->contextMenu()->activateWindow();
+                    //Must be activated for proper keyboardfocus and menu closing on windows:
+                }
+                emit q->activated(QSystemTrayIcon::Context);
+                break;
+
+            case WM_MBUTTONUP:
+                emit q->activated(QSystemTrayIcon::MiddleClick);
+                break;
+            default:
+                break;
+            }
+            if (e) {
+                bool res = QApplication::sendEvent(q, e);
+                delete e;
+                return res;
+            }
+            break;
+        }
+    default:
+        return QWidget::winEvent(m, result);
+    }
+    return 0;
+}
+
+void QSystemTrayIconPrivate::install_sys()
+{
+    Q_Q(QSystemTrayIcon);
+    if (!sys) {
+        sys = new QSystemTrayIconSys(q);
+        sys->createIcon();
+        sys->trayMessage(NIM_ADD);
+    }
+}
+
+void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon type, int timeOut)
+{
+    if (!sys)
+        return;
+
+    uint uSecs = 0;
+    if ( timeOut < 0)
+        uSecs = 10000; //10 sec default
+    else uSecs = (int)timeOut;
+
+    //message is limited to 255 chars + NULL
+    QString messageString;
+    if (message.isEmpty() && !title.isEmpty())
+        messageString = QLatin1Char(' '); //ensures that the message shows when only title is set
+    else
+        messageString = message.left(255) + QChar();
+
+    //title is limited to 63 chars + NULL
+    QString titleString = title.left(63) + QChar();
+
+    //show QBalloonTip
+    QRect trayRect = sys->findTrayGeometry();
+    QBalloonTip::showBalloon(type, title, message, sys->q, QPoint(trayRect.left(),
+                             trayRect.center().y()), uSecs, false);
+}
+
+QRect QSystemTrayIconPrivate::geometry_sys() const
+{
+    return QRect();
+}
+
+void QSystemTrayIconPrivate::remove_sys()
+{
+    if (!sys)
+        return;
+
+    sys->trayMessage(NIM_DELETE);
+    delete sys;
+    sys = 0;
+}
+
+void QSystemTrayIconPrivate::updateIcon_sys()
+{
+    if (!sys)
+        return;
+
+    HICON hIconToDestroy = sys->hIcon;
+
+    sys->createIcon();
+    sys->trayMessage(NIM_MODIFY);
+
+    if (hIconToDestroy)
+        DestroyIcon(hIconToDestroy);
+}
+
+void QSystemTrayIconPrivate::updateMenu_sys()
+{
+
+}
+
+void QSystemTrayIconPrivate::updateToolTip_sys()
+{
+    // Calling sys->trayMessage(NIM_MODIFY) on an existing icon is broken on Windows CE.
+    // So we need to call updateIcon_sys() which creates a new icon handle.
+    updateIcon_sys();
+}
+
+bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys()
+{
+    return true;
+}
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/gui/util/qsystemtrayicon_x11.cpp
===================================================================
--- /trunk/src/gui/util/qsystemtrayicon_x11.cpp	(revision 768)
+++ /trunk/src/gui/util/qsystemtrayicon_x11.cpp	(revision 769)
@@ -309,8 +309,10 @@
 }
 
+#ifndef QT_NO_WHEELEVENT
 void QSystemTrayIconSys::wheelEvent(QWheelEvent *e)
 {
     QApplication::sendEvent(q, e);
 }
+#endif
 
 bool QSystemTrayIconSys::event(QEvent *e)
Index: /trunk/src/gui/util/util.pri
===================================================================
--- /trunk/src/gui/util/util.pri	(revision 768)
+++ /trunk/src/gui/util/util.pri	(revision 769)
@@ -21,5 +21,8 @@
 
 
-win32 {
+wince* {
+		SOURCES += \
+				util/qsystemtrayicon_wince.cpp
+} else:win32 {
 		SOURCES += \
 				util/qsystemtrayicon_win.cpp
@@ -50,4 +53,4 @@
 symbian {
     LIBS += -lsendas2 -letext -lapmime
-    contains(QT_CONFIG, s60): LIBS += -lplatformenv -lcommonui
+    contains(QT_CONFIG, s60): LIBS += -lplatformenv -lCommonUI
 }
Index: /trunk/src/gui/widgets/qabstractbutton.cpp
===================================================================
--- /trunk/src/gui/widgets/qabstractbutton.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qabstractbutton.cpp	(revision 769)
@@ -58,5 +58,5 @@
 #define AUTO_REPEAT_INTERVAL 100
 
-extern bool qt_tab_all_widgets;
+Q_GUI_EXPORT extern bool qt_tab_all_widgets;
 
 /*!
Index: /trunk/src/gui/widgets/qabstractscrollarea.cpp
===================================================================
--- /trunk/src/gui/widgets/qabstractscrollarea.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qabstractscrollarea.cpp	(revision 769)
@@ -395,5 +395,5 @@
         q->style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents, &opt, q)) {
         controlsRect = widgetRect;
-        const int extra = q->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarSpacing);
+        const int extra = q->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarSpacing, &opt, q);
         const QPoint cornerExtra(needv ? extra : 0, needh ? extra : 0);
         QRect frameRect = widgetRect;
Index: /trunk/src/gui/widgets/qabstractslider.cpp
===================================================================
--- /trunk/src/gui/widgets/qabstractslider.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qabstractslider.cpp	(revision 769)
@@ -48,7 +48,4 @@
 #include "qaccessible.h"
 #endif
-#ifdef QT_KEYPAD_NAVIGATION
-#include "qtabwidget.h" // Needed in inTabWidget()
-#endif // QT_KEYPAD_NAVIGATION
 #include <limits.h>
 
@@ -215,6 +212,6 @@
 
 QAbstractSliderPrivate::QAbstractSliderPrivate()
-    : minimum(0), maximum(99), singleStep(1), pageStep(10),
-      value(0), position(0), pressValue(-1), offset_accumulated(0), tracking(true),
+    : minimum(0), maximum(99), pageStep(10), value(0), position(0), pressValue(-1),
+      singleStep(1), offset_accumulated(0), tracking(true),
       blocktracking(false), pressed(false),
       invertedAppearance(false), invertedControls(false),
@@ -689,4 +686,50 @@
 }
 
+bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers, int delta)
+{
+    Q_Q(QAbstractSlider);
+    int stepsToScroll = 0;
+    // in Qt scrolling to the right gives negative values.
+    if (orientation == Qt::Horizontal)
+        delta = -delta;
+    qreal offset = qreal(delta) / 120;
+
+    if ((modifiers & Qt::ControlModifier) || (modifiers & Qt::ShiftModifier)) {
+        // Scroll one page regardless of delta:
+        stepsToScroll = qBound(-pageStep, int(offset * pageStep), pageStep);
+        offset_accumulated = 0;
+    } else {
+        // Calculate how many lines to scroll. Depending on what delta is (and
+        // offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can
+        // only scroll whole lines, so we keep the reminder until next event.
+        qreal stepsToScrollF =
+#ifndef QT_NO_WHEELEVENT
+                QApplication::wheelScrollLines() *
+#endif
+                offset * effectiveSingleStep();
+        // Check if wheel changed direction since last event:
+        if (offset_accumulated != 0 && (offset / offset_accumulated) < 0)
+            offset_accumulated = 0;
+
+        offset_accumulated += stepsToScrollF;
+        stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep);
+        offset_accumulated -= int(offset_accumulated);
+        if (stepsToScroll == 0)
+            return false;
+    }
+
+    if (invertedControls)
+        stepsToScroll = -stepsToScroll;
+
+    int prevValue = value;
+    position = overflowSafeAdd(stepsToScroll); // value will be updated by triggerAction()
+    q->triggerAction(QAbstractSlider::SliderMove);
+
+    if (prevValue == value) {
+        offset_accumulated = 0;
+        return false;
+    }
+    return true;
+}
 
 /*!
@@ -698,82 +741,11 @@
     Q_D(QAbstractSlider);
     e->ignore();
-    if (e->orientation() != d->orientation && !rect().contains(e->pos()))
-        return;
-
-    int stepsToScroll = 0;
-    qreal offset = qreal(e->delta()) / 120;
-
-    if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::ShiftModifier)) {
-        // Scroll one page regardless of delta:
-        stepsToScroll = qBound(-d->pageStep, int(offset * d->pageStep), d->pageStep);
-        d->offset_accumulated = 0;
-    } else {
-        // Calculate how many lines to scroll. Depending on what delta is (and 
-        // offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can
-        // only scroll whole lines, so we keep the reminder until next event.
-        qreal stepsToScrollF = offset * QApplication::wheelScrollLines() * d->effectiveSingleStep();
-        // Check if wheel changed direction since last event:
-        if (d->offset_accumulated != 0 && (offset / d->offset_accumulated) < 0)
-            d->offset_accumulated = 0;
-
-        d->offset_accumulated += stepsToScrollF;
-        stepsToScroll = qBound(-d->pageStep, int(d->offset_accumulated), d->pageStep);
-        d->offset_accumulated -= int(d->offset_accumulated);
-        if (stepsToScroll == 0)
-            return;
-    }
-
-    if (d->invertedControls)
-        stepsToScroll = -stepsToScroll;
-
-    int prevValue = d->value;
-    d->position = d->overflowSafeAdd(stepsToScroll); // value will be updated by triggerAction()
-    triggerAction(SliderMove);
-
-    if (prevValue == d->value)
-        d->offset_accumulated = 0;
-    else
+    int delta = e->delta();
+    if (d->scrollByDelta(e->orientation(), e->modifiers(), delta))
         e->accept();
 }
-#endif
-#ifdef QT_KEYPAD_NAVIGATION
-/*!
-    \internal
-
-    Tells us if it there is currently a reachable widget by keypad navigation in
-    a certain \a orientation.
-    If no navigation is possible, occuring key events in that \a orientation may
-    be used to interact with the value in the focussed widget, even though it
-    currently has not the editFocus.
-
-    \sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus()
-*/
-inline static bool canKeypadNavigate(Qt::Orientation orientation)
-{
-    return orientation == Qt::Horizontal?
-            (QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionEast)
-                    || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionWest))
-            :(QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionNorth)
-                    || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionSouth));
-}
-/*!
-    \internal
-
-    Checks, if the \a widget is inside a QTabWidget. If is is inside
-    one, left/right key events will be used to switch between tabs in keypad
-    navigation. If there is no QTabWidget, the horizontal key events can be used to
-    interact with the value in the focussed widget, even though it currently has
-    not the editFocus.
-
-    \sa QWidget::hasEditFocus()
-*/
-inline static bool inTabWidget(QWidget *widget)
-{
-    for (QWidget *tabWidget = widget; tabWidget; tabWidget = tabWidget->parentWidget())
-        if (qobject_cast<const QTabWidget*>(tabWidget))
-            return true;
-    return false;
-}
-#endif // QT_KEYPAD_NAVIGATION
+
+#endif
+
 /*!
     \reimp
@@ -841,5 +813,6 @@
                     && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Vertical
-                    || !hasEditFocus() && (canKeypadNavigate(Qt::Horizontal) || inTabWidget(this)))) {
+                    || !hasEditFocus()
+                    && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) {
                 ev->ignore();
                 return;
@@ -860,5 +833,6 @@
                     && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Vertical
-                    || !hasEditFocus() && (canKeypadNavigate(Qt::Horizontal) || inTabWidget(this)))) {
+                    || !hasEditFocus()
+                    && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) {
                 ev->ignore();
                 return;
@@ -880,5 +854,5 @@
                     && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Horizontal
-                    || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) {
+                    || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) {
                 ev->ignore();
                 break;
@@ -893,5 +867,5 @@
                     && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Horizontal
-                    || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) {
+                    || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) {
                 ev->ignore();
                 break;
Index: /trunk/src/gui/widgets/qabstractslider_p.h
===================================================================
--- /trunk/src/gui/widgets/qabstractslider_p.h	(revision 768)
+++ /trunk/src/gui/widgets/qabstractslider_p.h	(revision 769)
@@ -139,4 +139,5 @@
         q->triggerAction(repeatAction);
     }
+    bool scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers, int delta);
 };
 
Index: /trunk/src/gui/widgets/qabstractspinbox.h
===================================================================
--- /trunk/src/gui/widgets/qabstractspinbox.h	(revision 768)
+++ /trunk/src/gui/widgets/qabstractspinbox.h	(revision 769)
@@ -138,5 +138,7 @@
     void keyPressEvent(QKeyEvent *event);
     void keyReleaseEvent(QKeyEvent *event);
+#ifndef QT_NO_WHEELEVENT
     void wheelEvent(QWheelEvent *event);
+#endif
     void focusInEvent(QFocusEvent *event);
     void focusOutEvent(QFocusEvent *event);
Index: /trunk/src/gui/widgets/qcombobox.cpp
===================================================================
--- /trunk/src/gui/widgets/qcombobox.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qcombobox.cpp	(revision 769)
@@ -77,4 +77,8 @@
 # include <private/qeffects_p.h>
 #endif
+#if defined(Q_WS_S60)
+#include "private/qt_s60_p.h"
+#endif
+
 QT_BEGIN_NAMESPACE
 
@@ -140,5 +144,8 @@
         break;
     }
-
+    if (qVariantCanConvert<QBrush>(index.data(Qt::BackgroundRole))) {
+        menuOption.palette.setBrush(QPalette::All, QPalette::Background,
+                                    qvariant_cast<QBrush>(index.data(Qt::BackgroundRole)));
+    }
     menuOption.text = index.model()->data(index, Qt::DisplayRole).toString()
                            .replace(QLatin1Char('&'), QLatin1String("&&"));
@@ -533,6 +540,8 @@
     const bool usePopup = combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo);
 #ifndef QT_NO_SCROLLBAR
+#ifndef Q_WS_S60
     if (usePopup)
         view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+#endif
 #endif
     if (combo->style()->styleHint(QStyle::SH_ComboBox_ListMouseTracking, &opt, combo) ||
@@ -608,5 +617,11 @@
                                combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo));
         setFrameStyle(combo->style()->styleHint(QStyle::SH_ComboBox_PopupFrameStyle, &opt, combo));
-    }
+#ifdef QT_SOFTKEYS_ENABLED
+    } else if (e->type() == QEvent::LanguageChange) {
+        selectAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::SelectSoftKey));
+        cancelAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::CancelSoftKey));
+#endif
+    }
+
     QWidget::changeEvent(e);
 }
@@ -2411,4 +2426,5 @@
         listRect.moveLeft(above.x());
 
+#ifndef Q_WS_S60
         // Position vertically so the curently selected item lines up
         // with the combo box.
@@ -2416,4 +2432,5 @@
         const int offset = listRect.top() - currentItemRect.top();
         listRect.moveTop(above.y() + offset - listRect.top());
+#endif
 
 
@@ -2422,5 +2439,11 @@
         // important to show as much as possible of the popup.
         const int height = !boundToScreen ? listRect.height() : qMin(listRect.height(), screen.height());
+#ifdef Q_WS_S60
+        //popup needs to be stretched with screen minimum dimension
+        listRect.setHeight(qMin(screen.height(), screen.width()));
+#else
         listRect.setHeight(height);
+#endif
+
         if (boundToScreen) {
             if (listRect.top() < screen.top())
@@ -2429,4 +2452,21 @@
                 listRect.moveBottom(screen.bottom());
         }
+#ifdef Q_WS_S60
+        if (screen.width() < screen.height()) {
+            // in portait, menu should be positioned above softkeys
+            listRect.moveBottom(screen.bottom());
+        } else {
+            TRect staConTopRect = TRect();
+            AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, staConTopRect);
+            listRect.setWidth(listRect.height());
+            //by default popup is centered on screen in landscape
+            listRect.moveCenter(screen.center());
+            if (staConTopRect.IsEmpty()) {
+                // landscape without stacon, menu should be at the right
+                (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) :
+                                                     listRect.setLeft(screen.left());
+            }
+        }
+#endif
     } else if (!boundToScreen || listRect.height() <= belowHeight) {
         listRect.moveTopLeft(below);
@@ -2637,4 +2677,37 @@
             d->updateLineEditGeometry();
         d->setLayoutItemMargins(QStyle::SE_ComboBoxLayoutItem);
+
+#ifdef Q_WS_S60
+        if (d->container) {
+            QStyleOptionComboBox opt;
+            initStyleOption(&opt);
+
+            if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) {
+                const QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this));
+
+                QRect listRect(style()->subControlRect(QStyle::CC_ComboBox, &opt,
+                    QStyle::SC_ComboBoxListBoxPopup, this));
+                listRect.setHeight(qMin(screen.height(), screen.width()));
+
+                if (screen.width() < screen.height()) {
+                    // in portait, menu should be positioned above softkeys
+                    listRect.moveBottom(screen.bottom());
+                } else {
+                    TRect staConTopRect = TRect();
+                    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, staConTopRect);
+                    listRect.setWidth(listRect.height());
+                    //by default popup is centered on screen in landscape
+                    listRect.moveCenter(screen.center());
+                    if (staConTopRect.IsEmpty()) {
+                        // landscape without stacon, menu should be at the right
+                        (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) :
+                                                             listRect.setLeft(screen.left());
+                    }
+                    d->container->setGeometry(listRect);
+                }
+            }
+        }
+#endif
+
         // ### need to update scrollers etc. as well here
         break;
Index: /trunk/src/gui/widgets/qcombobox.h
===================================================================
--- /trunk/src/gui/widgets/qcombobox.h	(revision 768)
+++ /trunk/src/gui/widgets/qcombobox.h	(revision 769)
@@ -246,5 +246,7 @@
     void keyPressEvent(QKeyEvent *e);
     void keyReleaseEvent(QKeyEvent *e);
+#ifndef QT_NO_WHEELEVENT
     void wheelEvent(QWheelEvent *e);
+#endif
     void contextMenuEvent(QContextMenuEvent *e);
     void inputMethodEvent(QInputMethodEvent *);
Index: /trunk/src/gui/widgets/qcombobox_p.h
===================================================================
--- /trunk/src/gui/widgets/qcombobox_p.h	(revision 768)
+++ /trunk/src/gui/widgets/qcombobox_p.h	(revision 769)
@@ -201,5 +201,7 @@
         if (sliderAction == QAbstractSlider::SliderSingleStepAdd)
             menuOpt.state |= QStyle::State_DownArrow;
+#ifndef Q_WS_S60
         p.eraseRect(rect());
+#endif
         style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p);
     }
@@ -271,5 +273,7 @@
                const QModelIndex &index) const {
         QStyleOptionMenuItem opt = getStyleOption(option, index);
+#ifndef Q_WS_S60
         painter->fillRect(option.rect, opt.palette.background());
+#endif
         mCombo->style()->drawControl(QStyle::CE_MenuItem, &opt, painter, mCombo);
     }
Index: /trunk/src/gui/widgets/qdialogbuttonbox.cpp
===================================================================
--- /trunk/src/gui/widgets/qdialogbuttonbox.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qdialogbuttonbox.cpp	(revision 769)
@@ -1018,4 +1018,6 @@
     new role.
 
+    \note The button box takes ownership of the button.
+
     \sa removeButton(), clear()
 */
Index: /trunk/src/gui/widgets/qdockarealayout.cpp
===================================================================
--- /trunk/src/gui/widgets/qdockarealayout.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qdockarealayout.cpp	(revision 769)
@@ -1991,14 +1991,17 @@
             const int tabBarShape = 0;
 #endif
-            QDockAreaLayoutInfo *info = new QDockAreaLayoutInfo(sep, dockPos, o,
-                                                                tabBarShape, mainWindow);
-            QDockAreaLayoutItem item(info);
+            QDockAreaLayoutItem item(new QDockAreaLayoutInfo(sep, dockPos, o,
+                                                                tabBarShape, mainWindow));
             stream >> item.pos >> item.size >> dummy >> dummy;
-            if (!info->restoreState(stream, widgets, testing))
+            //we need to make sure the element is in the list so the dock widget can eventually be docked correctly
+            if (!testing)
+                item_list.append(item);
+            
+            //here we need to make sure we change the item in the item_list
+            QDockAreaLayoutItem &lastItem = testing ? item : item_list.last();
+
+            if (!lastItem.subinfo->restoreState(stream, widgets, testing))
                 return false;
 
-            if (!testing) {
-                item_list.append(item);
-            }
         } else {
             return false;
@@ -2636,5 +2639,5 @@
     bottom_hint = bottom_hint.boundedTo(bottom_max).expandedTo(bottom_min);
 
-    fallbackToSizeHints = !have_central;
+    fallbackToSizeHints = false;
 
     if (_ver_struct_list != 0) {
Index: /trunk/src/gui/widgets/qlinecontrol.cpp
===================================================================
--- /trunk/src/gui/widgets/qlinecontrol.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qlinecontrol.cpp	(revision 769)
@@ -66,5 +66,5 @@
     If the text has changed will emit displayTextChanged()
 */
-void QLineControl::updateDisplayText()
+void QLineControl::updateDisplayText(bool forceUpdate)
 {
     QString orig = m_textLayout.text();
@@ -103,5 +103,5 @@
     m_ascent = qRound(l.ascent());
 
-    if (str != orig)
+    if (str != orig || forceUpdate)
         emit displayTextChanged(str);
 }
@@ -477,5 +477,5 @@
     }
     m_textLayout.setAdditionalFormats(formats);
-    updateDisplayText();
+    updateDisplayText(/*force*/ true);
     if (cursorPositionChanged)
         emitCursorPositionChanged();
@@ -1372,4 +1372,6 @@
 #ifndef QT_NO_SHORTCUT
         case QEvent::ShortcutOverride:{
+            if (isReadOnly())
+                return false;
             QKeyEvent* ke = static_cast<QKeyEvent*>(ev);
             if (ke == QKeySequence::Copy
Index: /trunk/src/gui/widgets/qlinecontrol_p.h
===================================================================
--- /trunk/src/gui/widgets/qlinecontrol_p.h	(revision 768)
+++ /trunk/src/gui/widgets/qlinecontrol_p.h	(revision 769)
@@ -240,5 +240,5 @@
     void removeSelectedText();
     void internalSetText(const QString &txt, int pos = -1, bool edited = true);
-    void updateDisplayText();
+    void updateDisplayText(bool forceUpdate = false);
 
     void internalInsert(const QString &s);
Index: /trunk/src/gui/widgets/qlineedit.cpp
===================================================================
--- /trunk/src/gui/widgets/qlineedit.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qlineedit.cpp	(revision 769)
@@ -739,6 +739,12 @@
         return false;
     }
-    setCursorPosition(newPos);
-    setSelection(qMin(newMarkAnchor, newMarkDrag), qAbs(newMarkAnchor - newMarkDrag));
+    int selstart = qMin(newMarkAnchor, newMarkDrag);
+    int sellength = qAbs(newMarkAnchor - newMarkDrag);
+    if (selstart == newPos) {
+        selstart = qMax(newMarkAnchor, newMarkDrag);
+        sellength = -sellength;
+    }
+    //setSelection also set the position
+    setSelection(selstart, sellength);
     return true;
 }
Index: /trunk/src/gui/widgets/qlineedit_p.cpp
===================================================================
--- /trunk/src/gui/widgets/qlineedit_p.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qlineedit_p.cpp	(revision 769)
@@ -130,10 +130,10 @@
 {
     Q_Q(QLineEdit);
-    if (control->preeditAreaText().isEmpty()) {
+    if (!control->text().isEmpty() && control->preeditAreaText().isEmpty()) {
         QStyleOptionFrameV2 opt;
         q->initStyleOption(&opt);
         bool showCursor = control->hasSelectedText() ?
                           q->style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected, &opt, q):
-                          true;
+                          q->hasFocus();
         setCursorVisible(showCursor);
     }
Index: /trunk/src/gui/widgets/qmainwindow.cpp
===================================================================
--- /trunk/src/gui/widgets/qmainwindow.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmainwindow.cpp	(revision 769)
@@ -66,7 +66,4 @@
 QT_END_NAMESPACE
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-#include <private/qsoftkeymanager_p.h>
-#endif
 
 QT_BEGIN_NAMESPACE
@@ -80,7 +77,4 @@
 #ifdef Q_WS_MAC
             , useHIToolBar(false)
-#endif
-#ifdef QT_SOFTKEYS_ENABLED
-            , menuBarAction(0)
 #endif
 #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR)
@@ -95,7 +89,4 @@
     bool useHIToolBar;
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-    QAction *menuBarAction;
-#endif
     void init();
     QList<int> hoverSeparator;
@@ -118,7 +109,4 @@
     iconSize = QSize(metric, metric);
     q->setAttribute(Qt::WA_Hover);
-#ifdef QT_SOFTKEYS_ENABLED
-    menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, q);
-#endif
 }
 
@@ -492,11 +480,4 @@
     }
     d->layout->setMenuBar(menuBar);
-
-#ifdef QT_SOFTKEYS_ENABLED
-    if (menuBar)
-        addAction(d->menuBarAction);
-    else
-        removeAction(d->menuBarAction);
-#endif
 }
 
Index: /trunk/src/gui/widgets/qmainwindowlayout.cpp
===================================================================
--- /trunk/src/gui/widgets/qmainwindowlayout.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmainwindowlayout.cpp	(revision 769)
@@ -1773,4 +1773,5 @@
 #ifndef QT_NO_DOCKWIDGET
         savedState.dockAreaLayout.centralWidgetItem = layoutState.dockAreaLayout.centralWidgetItem;
+        savedState.dockAreaLayout.fallbackToSizeHints = true;
 #else
         savedState.centralWidgetItem = layoutState.centralWidgetItem;
Index: /trunk/src/gui/widgets/qmainwindowlayout_mac.mm
===================================================================
--- /trunk/src/gui/widgets/qmainwindowlayout_mac.mm	(revision 768)
+++ /trunk/src/gui/widgets/qmainwindowlayout_mac.mm	(revision 769)
@@ -464,4 +464,6 @@
             [[qt_mac_window_for(layoutState.mainWindow->window()) toolbar]
                 removeItemAtIndex:toolbarItemsCopy.indexOf(item)];
+             unifiedToolbarHash.remove(item);
+             qtoolbarsInUnifiedToolbarList.removeAll(toolbar);
 #endif
             break;
Index: /trunk/src/gui/widgets/qmenu.cpp
===================================================================
--- /trunk/src/gui/widgets/qmenu.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmenu.cpp	(revision 769)
@@ -118,5 +118,5 @@
             parentWidget = parentWidget->parentWidget();
         setParent(parentWidget, Qt::Window | Qt::Tool);
-	setAttribute(Qt::WA_DeleteOnClose, true);
+        setAttribute(Qt::WA_DeleteOnClose, true);
         setAttribute(Qt::WA_X11NetWmWindowTypeMenu, true);
         setWindowTitle(p->windowTitle());
@@ -169,6 +169,6 @@
     selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, q);
     cancelAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::CancelSoftKey, Qt::Key_Back, q);
-    selectAction->setVisible(false); // Don't show these in the menu
-    cancelAction->setVisible(false);
+    selectAction->setPriority(QAction::HighPriority);
+    cancelAction->setPriority(QAction::HighPriority);
     q->addAction(selectAction);
     q->addAction(cancelAction);
@@ -262,7 +262,4 @@
     const int fw = style->pixelMetric(QStyle::PM_MenuPanelWidth, &opt, q);
     const int deskFw = style->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, &opt, q);
-
-    const int sfcMargin = style->sizeFromContents(QStyle::CT_Menu, &opt, QApplication::globalStrut(), q).width() - QApplication::globalStrut().width();
-    const int min_column_width = q->minimumWidth() - (sfcMargin + leftmargin + rightmargin + 2 * (fw + hmargin));
     const int tearoffHeight = tearoff ? style->pixelMetric(QStyle::PM_MenuTearoffHeight, &opt, q) : 0;
 
@@ -338,5 +335,5 @@
 
         if (!sz.isEmpty()) {
-            max_column_width = qMax(min_column_width, qMax(max_column_width, sz.width()));
+            max_column_width = qMax(max_column_width, sz.width());
             //wrapping
             if (!scroll &&
@@ -352,4 +349,8 @@
 
     max_column_width += tabWidth; //finally add in the tab width
+    const int sfcMargin = style->sizeFromContents(QStyle::CT_Menu, &opt, QApplication::globalStrut(), q).width() - QApplication::globalStrut().width();
+    const int min_column_width = q->minimumWidth() - (sfcMargin + leftmargin + rightmargin + 2 * (fw + hmargin));
+    max_column_width = qMax(min_column_width, max_column_width);
+
 
     //calculate position
@@ -992,17 +993,7 @@
 }
 
-class ExceptionGuard
-{
-public:
-    inline ExceptionGuard(bool *w = 0) : watched(w) { Q_ASSERT(!(*watched)); *watched = true; }
-    inline ~ExceptionGuard() { *watched = false; }
-    inline operator bool() { return *watched; }
-private:
-    bool *watched;
-};
-
 void QMenuPrivate::activateCausedStack(const QList<QPointer<QWidget> > &causedStack, QAction *action, QAction::ActionEvent action_e, bool self)
 {
-    ExceptionGuard guard(&activationRecursionGuard);
+    QBoolBlocker guard(activationRecursionGuard);
 #ifdef QT3_SUPPORT
     const int actionId = q_func()->findIdForAction(action);
@@ -1227,5 +1218,5 @@
         option->menuItemType = QStyleOptionMenuItem::Separator;
     else if (d->defaultAction == action)
-	    option->menuItemType = QStyleOptionMenuItem::DefaultItem;
+        option->menuItemType = QStyleOptionMenuItem::DefaultItem;
     else
         option->menuItemType = QStyleOptionMenuItem::Normal;
@@ -1407,10 +1398,12 @@
 {
     Q_D(QMenu);
-    QHash<QAction *, QWidget *>::iterator it = d->widgetItems.begin();
-    for (; it != d->widgetItems.end(); ++it) {
-        if (QWidget *widget = it.value()) {
-            QWidgetAction *action = static_cast<QWidgetAction *>(it.key());
-            action->releaseWidget(widget);
-            *it = 0;
+    if (!d->widgetItems.isEmpty()) {  // avoid detach on shared null hash
+        QHash<QAction *, QWidget *>::iterator it = d->widgetItems.begin();
+        for (; it != d->widgetItems.end(); ++it) {
+            if (QWidget *widget = it.value()) {
+                QWidgetAction *action = static_cast<QWidgetAction *>(it.key());
+                action->releaseWidget(widget);
+                *it = 0;
+            }
         }
     }
@@ -1720,5 +1713,12 @@
 {
     QList<QAction*> acts = actions();
+
     for(int i = 0; i < acts.size(); i++) {
+#ifdef QT_SOFTKEYS_ENABLED
+        Q_D(QMenu);
+        // Lets not touch to our internal softkey actions
+        if(acts[i] == d->selectAction || acts[i] == d->cancelAction)
+            continue;
+#endif
         removeAction(acts[i]);
         if (acts[i]->parent() == this && acts[i]->d_func()->widgets.isEmpty())
@@ -2408,4 +2408,11 @@
         }
         return true;
+#endif
+#ifdef QT_SOFTKEYS_ENABLED
+    case QEvent::LanguageChange: {
+        d->selectAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::SelectSoftKey));
+        d->cancelAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::CancelSoftKey));
+        }
+        break;
 #endif
     default:
@@ -2798,5 +2805,7 @@
     QAction *action = d->actionAt(e->pos());
     if (!action) {
-        if (d->hasHadMouse)
+        if (d->hasHadMouse
+            && (!d->currentAction
+                || !(d->currentAction->menu() && d->currentAction->menu()->isVisible())))
             d->setCurrentAction(0);
         return;
@@ -2920,5 +2929,5 @@
     if (isVisible()) {
         d->updateActionRects();
-	resize(sizeHint());
+        resize(sizeHint());
         update();
     }
Index: /trunk/src/gui/widgets/qmenu.h
===================================================================
--- /trunk/src/gui/widgets/qmenu.h	(revision 768)
+++ /trunk/src/gui/widgets/qmenu.h	(revision 769)
@@ -143,5 +143,5 @@
 
 #ifdef Q_WS_WINCE
-    HMENU wceMenu(bool create = false);
+    HMENU wceMenu();
 #endif
 
@@ -163,5 +163,7 @@
     void mousePressEvent(QMouseEvent *);
     void mouseMoveEvent(QMouseEvent *);
+#ifndef QT_NO_WHEELEVENT
     void wheelEvent(QWheelEvent *);
+#endif
     void enterEvent(QEvent *);
     void leaveEvent(QEvent *);
Index: /trunk/src/gui/widgets/qmenu_mac.mm
===================================================================
--- /trunk/src/gui/widgets/qmenu_mac.mm	(revision 768)
+++ /trunk/src/gui/widgets/qmenu_mac.mm	(revision 769)
@@ -176,4 +176,20 @@
 }
 
+static void cancelAllMenuTracking()
+{
+#ifdef QT_MAC_USE_COCOA
+    QMacCocoaAutoReleasePool pool;
+    NSMenu *mainMenu = [NSApp mainMenu];
+    [mainMenu cancelTracking];
+    for (NSMenuItem *item in [mainMenu itemArray]) {
+        if ([item submenu]) {
+            [[item submenu] cancelTracking];
+        }
+    }
+#else
+    CancelMenuTracking(AcquireRootMenu(), true, 0);
+#endif
+}
+
 static bool actualMenuItemVisibility(const QMenuBarPrivate::QMacMenuBarPrivate *mbp,
                                      const QMacMenuAction *action)
@@ -1831,4 +1847,10 @@
 
     if (qt_mac_current_menubar.qmenubar == q) {
+#ifdef QT_MAC_USE_COCOA
+        QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = getMenuLoader();
+        [loader removeActionsFromAppMenu];
+#else
+        cancelAllMenuTracking();
+#endif
         extern void qt_event_request_menubarupdate(); //qapplication_mac.cpp
         qt_event_request_menubarupdate();
@@ -1932,18 +1954,4 @@
     // if the menu bar belongs to an ancestor of modalWidget:
     return qt_mac_is_ancestor(menuBar->parentWidget(), modalWidget);
-}
-
-static void cancelAllMenuTracking()
-{
-#ifdef QT_MAC_USE_COCOA
-    QMacCocoaAutoReleasePool pool;
-    NSMenu *mainMenu = [NSApp mainMenu];
-    [mainMenu cancelTracking];
-    for (NSMenuItem *item in [mainMenu itemArray]) {
-        if ([item submenu]) {
-            [[item submenu] cancelTracking];
-        }
-    }
-#endif
 }
 
Index: /trunk/src/gui/widgets/qmenu_p.h
===================================================================
--- /trunk/src/gui/widgets/qmenu_p.h	(revision 768)
+++ /trunk/src/gui/widgets/qmenu_p.h	(revision 769)
@@ -348,5 +348,5 @@
         inline void syncAction(QAction *a) { syncAction(findAction(a)); }
         void removeAction(QWceMenuAction *);
-        void rebuild(bool reCreate = false);
+        void rebuild();
         inline void removeAction(QAction *a) { removeAction(findAction(a)); }
         inline QWceMenuAction *findAction(QAction *a) {
@@ -359,5 +359,5 @@
         }
     } *wce_menu;
-    HMENU wceMenu(bool create = false);
+    HMENU wceMenu();
     QAction* wceCommands(uint command);
 #endif
Index: /trunk/src/gui/widgets/qmenu_symbian.cpp
===================================================================
--- /trunk/src/gui/widgets/qmenu_symbian.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmenu_symbian.cpp	(revision 769)
@@ -150,6 +150,10 @@
 
         const int underlineShortCut = QApplication::style()->styleHint(QStyle::SH_UnderlineShortcut);
-        QString iconText = action->action->iconText();
-        TPtrC menuItemText = qt_QString2TPtrC( underlineShortCut ? action->action->text() : iconText);
+        QString actionText;
+        if (underlineShortCut)
+            actionText = action->action->text().left(CEikMenuPaneItem::SData::ENominalTextLength);
+        else
+            actionText = action->action->iconText().left(CEikMenuPaneItem::SData::ENominalTextLength);
+        TPtrC menuItemText = qt_QString2TPtrC(actionText);
         if (action->action->menu()) {
             SymbianMenuItem* menuItem = new SymbianMenuItem();
@@ -257,4 +261,12 @@
     SymbianMenuItem* menu = qt_symbian_find_menu(id, symbianMenus);
     if (menu) {
+        // Normally first AddMenuItemL call for menuPane will create the item array.
+        // However if we don't have any items, we still need the item array. Otherwise
+        // menupane will crash. That's why we create item array here manually, and
+        // AddMenuItemL will then use the existing array.
+        CEikMenuPane::CItemArray* itemArray = q_check_ptr(new CEikMenuPane::CItemArray);
+        menuPane->SetItemArray(itemArray);
+        menuPane->SetItemArrayOwnedExternally(EFalse);
+
         for (int i = 0; i < menu->children.count(); ++i)
             QT_TRAP_THROWING(menuPane->AddMenuItemL(menu->children.at(i)->menuItemData));
@@ -317,4 +329,12 @@
 }
 
+void QMenuBarPrivate::reparentMenuBar(QWidget *oldParent, QWidget *newParent)
+{
+    if (menubars()->contains(oldParent)) {
+        QMenuBarPrivate *object = menubars()->take(oldParent);
+        menubars()->insert(newParent, object);
+    }
+}
+
 QMenuBarPrivate::QSymbianMenuBarPrivate::QSymbianMenuBarPrivate(QMenuBarPrivate *menubar)
 {
Index: /trunk/src/gui/widgets/qmenu_wince.cpp
===================================================================
--- /trunk/src/gui/widgets/qmenu_wince.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmenu_wince.cpp	(revision 769)
@@ -102,5 +102,4 @@
 };
 
-typedef int (WINAPI *superfunc)(int, int);
 typedef BOOL (WINAPI *AygCreateMenuBar)(qt_SHMENUBARINFO*);
 typedef HRESULT (WINAPI *AygEnableSoftKey)(HWND,UINT,BOOL,BOOL);
@@ -128,4 +127,5 @@
         ptrEnableSoftKey(handle, command, false, true);
 }
+
 static void qt_wce_disable_soft_key(HWND handle, uint command) 
 {
@@ -135,5 +135,6 @@
 }
 
-static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list) {
+static void qt_wce_delete_action_list(QList<QWceMenuAction*> *list)
+{
     for(QList<QWceMenuAction*>::Iterator it = list->begin(); it != list->end(); ++it) {
         QWceMenuAction *action = (*it);
@@ -145,5 +146,6 @@
 
 //search for first QuitRole in QMenuBar
-static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems) {
+static QAction* qt_wce_get_quit_action(QList<QAction *> actionItems)
+{
     QAction *returnAction = 0;
     for (int i = 0; i < actionItems.size(); ++i) {
@@ -160,5 +162,6 @@
 }
 
-static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems) {
+static QAction* qt_wce_get_quit_action(QList<QWceMenuAction*> actionItems)
+{
     for (int i = 0; i < actionItems.size(); ++i) {
         if (actionItems.at(i)->action->menuRole() == QAction::QuitRole)
@@ -173,5 +176,6 @@
 }
 
-static HMODULE qt_wce_get_module_handle() {
+static HMODULE qt_wce_get_module_handle()
+{
     HMODULE module =  0; //handle to resources
     if (!(module = GetModuleHandle(L"QtGui4"))) //release dynamic
@@ -182,5 +186,6 @@
 }
 
-static void qt_wce_change_command(HWND menuHandle, int item, int command) {
+static void qt_wce_change_command(HWND menuHandle, int item, int command)
+{
 TBBUTTONINFOA tbbi;
     memset(&tbbi,0,sizeof(tbbi));
@@ -191,5 +196,6 @@
 }
 
-static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText) {
+static void qt_wce_rename_menu_item(HWND menuHandle, int item, const QString &newText)
+{
     TBBUTTONINFOA tbbi;
     memset(&tbbi,0,sizeof(tbbi));
@@ -202,5 +208,6 @@
 }
 
-static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0) {
+static HWND qt_wce_create_menubar(HWND parentHandle, HINSTANCE resourceHandle, int toolbarID, int flags = 0)
+{
     resolveAygLibs();
 
@@ -227,6 +234,6 @@
 }
 
-static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action, bool created) {
-
+static void qt_wce_insert_action(HMENU menu, QWceMenuAction *action)
+{
     Q_ASSERT_X(menu, "AppendMenu", "menu is 0");
     if (action->action->isVisible()) {
@@ -242,5 +249,5 @@
             text.remove(QChar::fromLatin1('&'));
             AppendMenu (menu, MF_STRING | flags | MF_POPUP,
-            (UINT) action->action->menu()->wceMenu(created), reinterpret_cast<const wchar_t *> (text.utf16()));
+            (UINT) action->action->menu()->wceMenu(), reinterpret_cast<const wchar_t *> (text.utf16()));
         }
         else {
@@ -255,4 +262,10 @@
 }
 
+// Removes all items from the menu without destroying the handles.
+static void qt_wce_clear_menu(HMENU hMenu)
+{
+    while (RemoveMenu(hMenu, 0, MF_BYPOSITION));
+}
+
 /*!
     \internal 
@@ -261,10 +274,12 @@
 */
 
-void QMenuBar::wceRefresh() {
+void QMenuBar::wceRefresh()
+{
     for (int i = 0; i < nativeMenuBars.size(); ++i)
         nativeMenuBars.at(i)->d_func()->wceRefresh();
 }
 
-void QMenuBarPrivate::wceRefresh() {
+void QMenuBarPrivate::wceRefresh()
+{
     DrawMenuBar(wce_menubar->menubarHandle);
 }
@@ -276,5 +291,6 @@
 */
 
-QAction* QMenu::wceCommands(uint command) { 
+QAction* QMenu::wceCommands(uint command)
+{
     Q_D(QMenu);
     return d->wceCommands(command);
@@ -288,20 +304,25 @@
 */
 
-void QMenuBar::wceCommands(uint command, HWND) {
-    for (int i = 0; i < nativeMenuBars.size(); ++i)
-            nativeMenuBars.at(i)->d_func()->wceCommands(command);
-}
-
-bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command) {
+void QMenuBar::wceCommands(uint command)
+{
+    const HWND hwndActiveWindow = GetActiveWindow();
+    for (int i = 0; i < nativeMenuBars.size(); ++i) {
+        QMenuBarPrivate* nativeMenuBar = nativeMenuBars.at(i)->d_func();
+        if (hwndActiveWindow == nativeMenuBar->wce_menubar->parentWindowHandle)
+            nativeMenuBar->wceCommands(command);
+    }
+}
+
+bool QMenuBarPrivate::wceEmitSignals(QList<QWceMenuAction*> actions, uint command)
+{
     QAction *foundAction = 0;
     for (int i = 0; i < actions.size(); ++i) {
-        if (foundAction)
-            break;
         QWceMenuAction *action = actions.at(i);
         if (action->action->menu()) {
             foundAction = action->action->menu()->wceCommands(command);
+            if (foundAction)
+                break;
         }
         else if (action->command == command) {
-            emit q_func()->triggered(action->action);
             action->action->activate(QAction::Trigger);
             return true;
@@ -315,5 +336,6 @@
 }
 
-void QMenuBarPrivate::wceCommands(uint command) {
+void QMenuBarPrivate::wceCommands(uint command)
+{
     if (wceClassicMenu) {
         for (int i = 0; i < wce_menubar->actionItemsClassic.size(); ++i)
@@ -321,5 +343,5 @@
     } else {
         if (wceEmitSignals(wce_menubar->actionItems, command)) {
-            return ;
+            return;
         }
         else if (wce_menubar->leftButtonIsMenu) {//check if command is on the left quick button
@@ -333,5 +355,6 @@
 }
 
-QAction *QMenuPrivate::wceCommands(uint command) {
+QAction *QMenuPrivate::wceCommands(uint command)
+{
     QAction *foundAction = 0;
     for (int i  = 0; i < wce_menu->actionItems.size(); ++i) {
@@ -343,5 +366,5 @@
         }
         else if (action->command == command) {
-            action->action->activate(QAction::Trigger);
+            activateAction(action->action, QAction::Trigger);
             return action->action;
         }
@@ -352,6 +375,6 @@
 }
 
-void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent) {
-
+void QMenuBarPrivate::wceCreateMenuBar(QWidget *parent)
+{
     Q_Q(QMenuBar);
     wce_menubar = new QWceMenuBarPrivate(this);
@@ -367,19 +390,23 @@
 }
 
-void QMenuBarPrivate::wceDestroyMenuBar() {
+void QMenuBarPrivate::wceDestroyMenuBar()
+{
     Q_Q(QMenuBar);
     int index = nativeMenuBars.indexOf(q);
     nativeMenuBars.removeAt(index);
-    if (wce_menubar)
-      delete wce_menubar;
-    wce_menubar = 0;
-}
-
-QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar) : 
-                                     menubarHandle(0), menuHandle(0),leftButtonMenuHandle(0) , 
-                                     leftButtonAction(0), leftButtonIsMenu(false), d(menubar) {
-}
-
-QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate() {
+    if (wce_menubar) {
+        delete wce_menubar;
+        wce_menubar = 0;
+    }
+}
+
+QMenuBarPrivate::QWceMenuBarPrivate::QWceMenuBarPrivate(QMenuBarPrivate *menubar)
+:   menubarHandle(0), menuHandle(0), leftButtonMenuHandle(0),
+    leftButtonAction(0), leftButtonIsMenu(false), d(menubar)
+{
+}
+
+QMenuBarPrivate::QWceMenuBarPrivate::~QWceMenuBarPrivate()
+{
     if (menubarHandle)
         DestroyWindow(menubarHandle);
@@ -399,14 +426,18 @@
 }
 
-QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate() {
-    menuHandle = 0;
-}
-
-QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() {
+QMenuPrivate::QWceMenuPrivate::QWceMenuPrivate()
+:   menuHandle(0)
+{
+}
+
+QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate()
+{
     qt_wce_delete_action_list(&actionItems);
-    menuHandle = 0;
-}
-
-void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) {
+    if (menuHandle)
+        DestroyMenu(menuHandle);
+}
+
+void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before)
+{
     QWceMenuAction *action = new QWceMenuAction;
     action->action = a;
@@ -415,5 +446,6 @@
 }
 
-void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) {
+void QMenuPrivate::QWceMenuPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before)
+{
     if (!action)
         return;
@@ -434,38 +466,47 @@
 */
 
-HMENU QMenu::wceMenu(bool create) { return d_func()->wceMenu(create); }
-
-HMENU QMenuPrivate::wceMenu(bool create) {
+HMENU QMenu::wceMenu()
+{
+    return d_func()->wceMenu();
+}
+
+HMENU QMenuPrivate::wceMenu()
+{
     if (!wce_menu)
         wce_menu = new QWceMenuPrivate;
-    if (!wce_menu->menuHandle || create) 
-        wce_menu->rebuild(create);
+    if (!wce_menu->menuHandle)
+        wce_menu->rebuild();
     return wce_menu->menuHandle;
 }
 
-void QMenuPrivate::QWceMenuPrivate::rebuild(bool reCreate) {
-    if (menuHandle && !reCreate)
-      DestroyMenu(menuHandle);
-    menuHandle = CreatePopupMenu();
+void QMenuPrivate::QWceMenuPrivate::rebuild()
+{
+    if (!menuHandle)
+        menuHandle = CreatePopupMenu();
+    else
+        qt_wce_clear_menu(menuHandle);
+
     for (int i = 0; i < actionItems.size(); ++i) {
         QWceMenuAction *action = actionItems.at(i);
         action->menuHandle = menuHandle;
-        qt_wce_insert_action(menuHandle, action, true);
+        qt_wce_insert_action(menuHandle, action);
     }
     QMenuBar::wceRefresh();
 }
 
-void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *) {
+void QMenuPrivate::QWceMenuPrivate::syncAction(QWceMenuAction *)
+{
     rebuild();
 }
 
-void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action) {
-        actionItems.removeAll(action);
-        delete action;
-        action = 0;
-        rebuild();
-}
-
-void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before) {
+void QMenuPrivate::QWceMenuPrivate::removeAction(QWceMenuAction *action)
+{
+    actionItems.removeAll(action);
+    delete action;
+    rebuild();
+}
+
+void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QAction *a, QWceMenuAction *before)
+{
     QWceMenuAction *action = new QWceMenuAction;
     action->action = a;
@@ -474,5 +515,6 @@
 }
 
-void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before) {
+void QMenuBarPrivate::QWceMenuBarPrivate::addAction(QWceMenuAction *action, QWceMenuAction *before)
+{
     if (!action)
         return;
@@ -486,23 +528,25 @@
 }
 
-void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*) {
+void QMenuBarPrivate::QWceMenuBarPrivate::syncAction(QWceMenuAction*)
+{
     QMenuBar::wceRefresh();
     rebuild();
 }
 
-void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action) {
+void QMenuBarPrivate::QWceMenuBarPrivate::removeAction(QWceMenuAction *action)
+{
     actionItems.removeAll(action);
     delete action;
-    action = 0;
     rebuild();
 }
 
-void QMenuBarPrivate::_q_updateDefaultAction() {
+void QMenuBarPrivate::_q_updateDefaultAction()
+{
     if (wce_menubar)
         wce_menubar->rebuild();
 }
 
-void QMenuBarPrivate::QWceMenuBarPrivate::rebuild() {
-
+void QMenuBarPrivate::QWceMenuBarPrivate::rebuild()
+{
     d->q_func()->resize(0,0);
     parentWindowHandle = d->q_func()->parentWidget() ? d->q_func()->parentWidget()->winId() : d->q_func()->winId();
@@ -523,4 +567,5 @@
         }
         Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
+        qt_wce_clear_menu(menuHandle);
         DestroyWindow(menubarHandle);
         menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), resourceHandle);
@@ -550,5 +595,5 @@
                 action->menuHandle = subMenuHandle;
                 actionItemsClassic.last().append(action);
-                qt_wce_insert_action(subMenuHandle, action, true);
+                qt_wce_insert_action(subMenuHandle, action);
             }
         }
@@ -564,4 +609,5 @@
         leftButtonIsMenu = (leftButtonAction && leftButtonAction->menu());
         Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
+        qt_wce_clear_menu(menuHandle);
         DestroyWindow(menubarHandle);
         if (leftButtonIsMenu) {
@@ -592,5 +638,5 @@
             QWceMenuAction *action = actionItems.at(i);
             action->menuHandle = menuHandle;
-            qt_wce_insert_action(menuHandle, action, true);
+            qt_wce_insert_action(menuHandle, action);
         }
         if (!leftButtonIsMenu) {
@@ -612,5 +658,5 @@
                 action->menuHandle = leftButtonMenuHandle;
                 actionItemsLeftButton.append(action);
-                qt_wce_insert_action(leftButtonMenuHandle, action, true);
+                qt_wce_insert_action(leftButtonMenuHandle, action);
             }
         }
Index: /trunk/src/gui/widgets/qmenubar.cpp
===================================================================
--- /trunk/src/gui/widgets/qmenubar.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qmenubar.cpp	(revision 769)
@@ -72,4 +72,8 @@
 #endif
 
+#ifdef QT_SOFTKEYS_ENABLED
+#include <private/qsoftkeymanager_p.h>
+#endif
+
 QT_BEGIN_NAMESPACE
 
@@ -741,14 +745,11 @@
     }
 #endif
-#ifdef Q_WS_S60
-    symbianCreateMenuBar(q->parentWidget());
-    if(symbian_menubar)
-        q->hide();
-#endif
-
     q->setBackgroundRole(QPalette::Button);
     oldWindow = oldParent = 0;
 #ifdef QT3_SUPPORT
     doAutoResize = false;
+#endif
+#ifdef QT_SOFTKEYS_ENABLED
+    menuBarAction = 0;
 #endif
     handleReparent();
@@ -1385,8 +1386,35 @@
 #endif
 #ifdef Q_WS_S60
-    if (symbian_menubar)
+
+    // Construct symbian_menubar when this code path is entered first time
+    // and when newParent != NULL
+    if (!symbian_menubar)
+        symbianCreateMenuBar(newParent);
+
+    // Reparent and rebuild menubar when parent is changed
+    if (symbian_menubar) {
+        if (oldParent != newParent)
+            reparentMenuBar(oldParent, newParent);
+        q->hide();
         symbian_menubar->rebuild();
-#endif
-
+    }
+
+#ifdef QT_SOFTKEYS_ENABLED
+    // Constuct menuBarAction when this code path is entered first time
+    if (!menuBarAction) {
+        if (newParent) {
+            menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, newParent);
+            newParent->addAction(menuBarAction);
+        }
+    } else {
+        // If reparenting i.e. we already have menuBarAction, remove it from old parent
+        // and add for a new parent
+        if (oldParent)
+            oldParent->removeAction(menuBarAction);
+        if (newParent)
+            newParent->addAction(menuBarAction);
+    }
+#endif // QT_SOFTKEYS_ENABLED
+#endif // Q_WS_S60
 }
 
@@ -1441,5 +1469,11 @@
         d->itemsDirty = true;
         d->updateGeometries();
-    }
+#ifdef QT_SOFTKEYS_ENABLED
+    } else if (e->type() == QEvent::LanguageChange) {
+        if (d->menuBarAction)
+            d->menuBarAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::MenuSoftKey));
+#endif
+    }
+
     QWidget::changeEvent(e);
 }
@@ -1924,5 +1958,5 @@
 
   Currently there is only support for the default action on Windows
-  Mobile. All other platforms ignore the default action.
+  Mobile. On all other platforms this method is not available.
 
   \sa defaultAction()
Index: /trunk/src/gui/widgets/qmenubar.h
===================================================================
--- /trunk/src/gui/widgets/qmenubar.h	(revision 768)
+++ /trunk/src/gui/widgets/qmenubar.h	(revision 769)
@@ -116,5 +116,5 @@
     QAction *defaultAction() const;
 
-    static void wceCommands(uint command, HWND controlHandle);
+    static void wceCommands(uint command);
     static void wceRefresh();
 #endif
Index: /trunk/src/gui/widgets/qmenubar_p.h
===================================================================
--- /trunk/src/gui/widgets/qmenubar_p.h	(revision 768)
+++ /trunk/src/gui/widgets/qmenubar_p.h	(revision 769)
@@ -244,4 +244,5 @@
     void symbianCreateMenuBar(QWidget *);
     void symbianDestroyMenuBar();
+    void reparentMenuBar(QWidget *oldParent, QWidget *newParent);
     struct QSymbianMenuBarPrivate {
         QList<QSymbianMenuAction*> actionItems;
@@ -268,5 +269,7 @@
     } *symbian_menubar;
     static int symbianCommands(int command);
-
+#ifdef QT_SOFTKEYS_ENABLED
+    QAction *menuBarAction;
+#endif
 #endif
 };
Index: /trunk/src/gui/widgets/qprintpreviewwidget.cpp
===================================================================
--- /trunk/src/gui/widgets/qprintpreviewwidget.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qprintpreviewwidget.cpp	(revision 769)
@@ -152,5 +152,9 @@
     GraphicsView(QWidget* parent = 0)
         : QGraphicsView(parent)
-        {}
+    {
+#ifdef Q_WS_MAC
+        setFrameStyle(QFrame::NoFrame);
+#endif
+    }
 signals:
     void resized();
Index: /trunk/src/gui/widgets/qscrollbar.cpp
===================================================================
--- /trunk/src/gui/widgets/qscrollbar.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qscrollbar.cpp	(revision 769)
@@ -522,4 +522,22 @@
         d_func()->updateHoverControl(he->pos());
         break;
+#ifndef QT_NO_WHEELEVENT
+    case QEvent::Wheel: {
+        // override wheel event without adding virtual function override
+        QWheelEvent *ev = static_cast<QWheelEvent *>(event);
+        int delta = ev->delta();
+        // scrollbar is a special case - in vertical mode it reaches minimum
+        // value in the upper position, however QSlider's minimum value is on
+        // the bottom. So we need to invert a value, but since the scrollbar is
+        // inverted by default, we need to inverse the delta value for the
+        // horizontal orientation.
+        if (ev->orientation() == Qt::Horizontal)
+            delta = -delta;
+        Q_D(QScrollBar);
+        if (d->scrollByDelta(ev->orientation(), ev->modifiers(), delta))
+            event->accept();
+        return true;
+    }
+#endif
     default:
         break;
Index: /trunk/src/gui/widgets/qspinbox.cpp
===================================================================
--- /trunk/src/gui/widgets/qspinbox.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qspinbox.cpp	(revision 769)
@@ -449,9 +449,10 @@
 
 /*!
-    This virtual function is used by the spin box whenever it needs
-    to display the given \a value. The default implementation returns
-    a string containing \a value printed in the standard way using
-    QWidget::locale().toString(). Reimplementations may return anything. (See
-    the example in the detailed description.)
+    This virtual function is used by the spin box whenever it needs to
+    display the given \a value. The default implementation returns a
+    string containing \a value printed in the standard way using
+    QWidget::locale().toString(), but with the thousand separator
+    removed. Reimplementations may return anything. (See the example
+    in the detailed description.)
 
     Note: QSpinBox does not call this function for specialValueText()
@@ -462,5 +463,5 @@
     valueFromText() and validate()
 
-    \sa valueFromText(), validate()
+    \sa valueFromText(), validate(), QLocale::groupSeparator()
 */
 
@@ -870,5 +871,5 @@
     valueFromText().
 
-    \sa valueFromText()
+    \sa valueFromText(), QLocale::groupSeparator()
 */
 
Index: /trunk/src/gui/widgets/qtabbar.cpp
===================================================================
--- /trunk/src/gui/widgets/qtabbar.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qtabbar.cpp	(revision 769)
@@ -68,4 +68,8 @@
 #endif
 
+#ifndef QT_NO_STYLE_S60
+#include "qs60style.h"
+#endif
+
 QT_BEGIN_NAMESPACE
 
@@ -479,4 +483,7 @@
     if (useScrollButtons && tabList.count() && last > available) {
         int extra = extraWidth();
+#ifndef QT_NO_STYLE_S60
+        QS60Style *s60Style = qobject_cast<QS60Style*>(QApplication::style());
+#endif
         if (!vertTabs) {
             Qt::LayoutDirection ld = q->layoutDirection();
@@ -486,17 +493,46 @@
 
             if (ld == Qt::LeftToRight) {
+// In S60style, tab scroll buttons are layoutted separately, on the sides of the tabbar.
+#ifndef QT_NO_STYLE_S60
+                if (s60Style) {
+                    rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height());
+                    leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height());
+                } else {
+#endif
                 leftB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height());
                 rightB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(),
                                     extra/2, arrows.height());
+#ifndef QT_NO_STYLE_S60
+                }
+#endif
                 leftB->setArrowType(Qt::LeftArrow);
                 rightB->setArrowType(Qt::RightArrow);
             } else {
+#ifndef QT_NO_STYLE_S60
+                if (s60Style) {
+                    rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height());
+                    leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height());
+                } else {
+#endif
                 rightB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height());
                 leftB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(),
                                     extra/2, arrows.height());
+#ifndef QT_NO_STYLE_S60
+                }
+#endif
                 rightB->setArrowType(Qt::LeftArrow);
                 leftB->setArrowType(Qt::RightArrow);
             }
         } else {
+#ifndef QT_NO_STYLE_S60
+            if (s60Style) {
+                QRect arrows = QRect(0, 0, size.width(), available );
+                leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra / 2);
+                leftB->setArrowType(Qt::UpArrow);
+                rightB->setGeometry(arrows.left(), arrows.bottom() - extra / 2 + 1,
+                                    arrows.width(), extra / 2);
+                rightB->setArrowType(Qt::DownArrow);
+            } else {
+#endif
             QRect arrows = QRect(0, available - extra, size.width(), extra );
             leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra/2);
@@ -505,4 +541,7 @@
                                 arrows.width(), extra/2);
             rightB->setArrowType(Qt::DownArrow);
+#ifndef QT_NO_STYLE_S60
+            }
+#endif
         }
         leftB->setEnabled(scrollOffset > 0);
Index: /trunk/src/gui/widgets/qtoolbar.cpp
===================================================================
--- /trunk/src/gui/widgets/qtoolbar.cpp	(revision 768)
+++ /trunk/src/gui/widgets/qtoolbar.cpp	(revision 769)
@@ -442,6 +442,5 @@
     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}
Index: /trunk/src/multimedia/audio/audio.pri
===================================================================
--- /trunk/src/multimedia/audio/audio.pri	(revision 768)
+++ /trunk/src/multimedia/audio/audio.pri	(revision 769)
@@ -42,4 +42,19 @@
     wince*:LIBS += -lcoredll
 
+} else:symbian {
+    INCLUDEPATH += /epoc32/include/mmf/common
+    INCLUDEPATH += /epoc32/include/mmf/server
+
+    HEADERS += $$PWD/qaudio_symbian_p.h \
+               $$PWD/qaudiodeviceinfo_symbian_p.h \
+               $$PWD/qaudioinput_symbian_p.h \
+               $$PWD/qaudiooutput_symbian_p.h
+
+    SOURCES += $$PWD/qaudio_symbian_p.cpp \
+               $$PWD/qaudiodeviceinfo_symbian_p.cpp \
+               $$PWD/qaudioinput_symbian_p.cpp \
+               $$PWD/qaudiooutput_symbian_p.cpp
+
+    LIBS += -lmmfdevsound
 } else:unix {
     unix:contains(QT_CONFIG, alsa) {
Index: /trunk/src/multimedia/audio/qaudio_symbian_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudio_symbian_p.cpp	(revision 769)
+++ /trunk/src/multimedia/audio/qaudio_symbian_p.cpp	(revision 769)
@@ -0,0 +1,624 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudio_symbian_p.h"
+#include <mmffourcc.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+namespace Utils {
+
+//-----------------------------------------------------------------------------
+// Static data
+//-----------------------------------------------------------------------------
+
+// Sample rate / frequency
+
+typedef TMMFSampleRate SampleRateNative;
+typedef int SampleRateQt;
+
+const int SampleRateCount = 12;
+
+const SampleRateNative SampleRateListNative[SampleRateCount] = {
+        EMMFSampleRate8000Hz
+    ,   EMMFSampleRate11025Hz
+    ,   EMMFSampleRate12000Hz
+    ,   EMMFSampleRate16000Hz
+    ,   EMMFSampleRate22050Hz
+    ,   EMMFSampleRate24000Hz
+    ,   EMMFSampleRate32000Hz
+    ,   EMMFSampleRate44100Hz
+    ,   EMMFSampleRate48000Hz
+    ,   EMMFSampleRate64000Hz
+    ,   EMMFSampleRate88200Hz
+    ,   EMMFSampleRate96000Hz
+};
+
+const SampleRateQt SampleRateListQt[SampleRateCount] = {
+        8000
+    ,   11025
+    ,   12000
+    ,   16000
+    ,   22050
+    ,   24000
+    ,   32000
+    ,   44100
+    ,   48000
+    ,   64000
+    ,   88200
+    ,   96000
+};
+
+// Channels
+
+typedef TMMFMonoStereo ChannelsNative;
+typedef int ChannelsQt;
+
+const int ChannelsCount = 2;
+
+const ChannelsNative ChannelsListNative[ChannelsCount] = {
+        EMMFMono
+    ,   EMMFStereo
+};
+
+const ChannelsQt ChannelsListQt[ChannelsCount] = {
+        1
+    ,   2
+};
+
+// Encoding
+
+const int EncodingCount = 6;
+
+const TUint32 EncodingFourCC[EncodingCount] = {
+        KMMFFourCCCodePCM8              // 0
+    ,   KMMFFourCCCodePCMU8             // 1
+    ,   KMMFFourCCCodePCM16             // 2
+    ,   KMMFFourCCCodePCMU16            // 3
+    ,   KMMFFourCCCodePCM16B            // 4
+    ,   KMMFFourCCCodePCMU16B           // 5
+};
+
+// The characterised DevSound API specification states that the iEncoding
+// field in TMMFCapabilities is ignored, and that the FourCC should be used
+// to specify the PCM encoding.
+// See "SGL.GT0287.102 Multimedia DevSound Baseline Compatibility.doc" in the
+// mm_info/mm_docs repository.
+const TMMFSoundEncoding EncodingNative[EncodingCount] = {
+        EMMFSoundEncoding16BitPCM       // 0
+    ,   EMMFSoundEncoding16BitPCM       // 1
+    ,   EMMFSoundEncoding16BitPCM       // 2
+    ,   EMMFSoundEncoding16BitPCM       // 3
+    ,   EMMFSoundEncoding16BitPCM       // 4
+    ,   EMMFSoundEncoding16BitPCM       // 5
+};
+
+
+const int EncodingSampleSize[EncodingCount] = {
+        8                               // 0
+    ,   8                               // 1
+    ,   16                              // 2
+    ,   16                              // 3
+    ,   16                              // 4
+    ,   16                              // 5
+};
+
+const QAudioFormat::Endian EncodingByteOrder[EncodingCount] = {
+        QAudioFormat::LittleEndian      // 0
+    ,   QAudioFormat::LittleEndian      // 1
+    ,   QAudioFormat::LittleEndian      // 2
+    ,   QAudioFormat::LittleEndian      // 3
+    ,   QAudioFormat::BigEndian         // 4
+    ,   QAudioFormat::BigEndian         // 5
+};
+
+const QAudioFormat::SampleType EncodingSampleType[EncodingCount] = {
+        QAudioFormat::SignedInt         // 0
+    ,   QAudioFormat::UnSignedInt       // 1
+    ,   QAudioFormat::SignedInt         // 2
+    ,   QAudioFormat::UnSignedInt       // 3
+    ,   QAudioFormat::SignedInt         // 4
+    ,   QAudioFormat::UnSignedInt       // 5
+};
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+// Helper functions for implementing parameter conversions
+
+template<typename Input>
+bool findValue(const Input *inputArray, int length, Input input, int &index) {
+    bool result = false;
+    for (int i=0; !result && i<length; ++i)
+        if (inputArray[i] == input) {
+            index = i;
+            result = true;
+        }
+    return result;
+}
+
+template<typename Input, typename Output>
+bool convertValue(const Input *inputArray, const Output *outputArray,
+    int length, Input input, Output &output) {
+    int index;
+    const bool result = findValue<Input>(inputArray, length, input, index);
+    if (result)
+        output = outputArray[index];
+    return result;
+}
+
+/**
+ * Macro which is used to generate the implementation of the conversion
+ * functions.  The implementation is just a wrapper around the templated
+ * convertValue function, e.g.
+ *
+ * CONVERSION_FUNCTION_IMPL(SampleRate, Qt, Native)
+ *
+ * expands to
+ *
+ * bool SampleRateQtToNative(int input, TMMFSampleRate &output) {
+ *      return convertValue<SampleRateQt, SampleRateNative>
+ *          (SampleRateListQt, SampleRateListNative, SampleRateCount,
+ *          input, output);
+ * }
+ */
+#define CONVERSION_FUNCTION_IMPL(FieldLc, Field, Input, Output)               \
+bool FieldLc##Input##To##Output(Field##Input input, Field##Output &output) {  \
+    return convertValue<Field##Input, Field##Output>(Field##List##Input,      \
+        Field##List##Output, Field##Count, input, output);                    \
+}
+
+//-----------------------------------------------------------------------------
+// Local helper functions
+//-----------------------------------------------------------------------------
+
+CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Qt, Native)
+CONVERSION_FUNCTION_IMPL(sampleRate, SampleRate, Native, Qt)
+CONVERSION_FUNCTION_IMPL(channels, Channels, Qt, Native)
+CONVERSION_FUNCTION_IMPL(channels, Channels, Native, Qt)
+
+bool sampleInfoQtToNative(int inputSampleSize,
+                          QAudioFormat::Endian inputByteOrder,
+                          QAudioFormat::SampleType inputSampleType,
+                          TUint32 &outputFourCC,
+                          TMMFSoundEncoding &outputEncoding) {
+
+    bool found = false;
+
+    for (int i=0; i<EncodingCount && !found; ++i) {
+        if (    EncodingSampleSize[i] == inputSampleSize
+            &&  EncodingByteOrder[i] == inputByteOrder
+            &&  EncodingSampleType[i] == inputSampleType) {
+            outputFourCC = EncodingFourCC[i];
+            outputEncoding = EncodingNative[i]; // EMMFSoundEncoding16BitPCM
+            found = true;
+        }
+    }
+
+    return found;
+}
+
+void capabilitiesNativeToQt(const TMMFCapabilities &caps,
+                            const TFourCC &fourcc,
+                            QList<int> &frequencies,
+                            QList<int> &channels,
+                            QList<int> &sampleSizes,
+                            QList<QAudioFormat::Endian> &byteOrders,
+                            QList<QAudioFormat::SampleType> &sampleTypes) {
+
+    frequencies.clear();
+    sampleSizes.clear();
+    byteOrders.clear();
+    sampleTypes.clear();
+    channels.clear();
+
+    for (int i=0; i<SampleRateCount; ++i)
+        if (caps.iRate & SampleRateListNative[i])
+            frequencies += SampleRateListQt[i];
+
+    for (int i=0; i<ChannelsCount; ++i)
+        if (caps.iChannels & ChannelsListNative[i])
+            channels += ChannelsListQt[i];
+
+    for (int i=0; i<EncodingCount; ++i) {
+        if (fourcc == EncodingFourCC[i]) {
+            sampleSizes += EncodingSampleSize[i];
+            byteOrders += EncodingByteOrder[i];
+            sampleTypes += EncodingSampleType[i];
+        }
+    }
+}
+
+bool formatQtToNative(const QAudioFormat &inputFormat,
+                      TUint32 &outputFourCC,
+                      TMMFCapabilities &outputFormat) {
+
+    bool result = false;
+
+    // Need to use temporary variables because TMMFCapabilities fields are all
+    // TInt, rather than MMF enumerated types.
+    TMMFSampleRate outputSampleRate;
+    TMMFMonoStereo outputChannels;
+    TMMFSoundEncoding outputEncoding;
+
+    if (inputFormat.codec() == QLatin1String("audio/pcm")) {
+        result =
+                sampleRateQtToNative(inputFormat.frequency(), outputSampleRate)
+            &&  channelsQtToNative(inputFormat.channels(), outputChannels)
+            &&  sampleInfoQtToNative(inputFormat.sampleSize(),
+                                     inputFormat.byteOrder(),
+                                     inputFormat.sampleType(),
+                                     outputFourCC,
+                                     outputEncoding);
+    }
+
+    if (result) {
+        outputFormat.iRate = outputSampleRate;
+        outputFormat.iChannels = outputChannels;
+        outputFormat.iEncoding = outputEncoding;
+    }
+
+    return result;
+}
+
+QAudio::State stateNativeToQt(State nativeState)
+{
+    switch (nativeState) {
+    case ClosedState:
+        return QAudio::StoppedState;
+    case InitializingState:
+        return QAudio::StoppedState;
+    case ActiveState:
+        return QAudio::ActiveState;
+    case IdleState:
+        return QAudio::IdleState;
+    case SuspendedState:
+        return QAudio::SuspendedState;
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid state");
+        return QAudio::StoppedState; // suppress compiler warning
+    }
+}
+
+qint64 bytesToSamples(const QAudioFormat &format, qint64 length)
+{
+    return length / ((format.sampleSize() / 8) * format.channels());
+}
+
+qint64 samplesToBytes(const QAudioFormat &format, qint64 samples)
+{
+    return samples * (format.sampleSize() / 8) * format.channels();
+}
+
+} // namespace Utils
+
+
+//-----------------------------------------------------------------------------
+// DevSoundWrapper
+//-----------------------------------------------------------------------------
+
+DevSoundWrapper::DevSoundWrapper(QAudio::Mode mode, QObject *parent)
+    :   QObject(parent)
+    ,   m_mode(mode)
+    ,   m_state(StateIdle)
+    ,   m_devsound(0)
+    ,   m_fourcc(0)
+{
+    QT_TRAP_THROWING(m_devsound = CMMFDevSound::NewL());
+
+    switch (mode) {
+    case QAudio::AudioOutput:
+        m_nativeMode = EMMFStatePlaying;
+        break;
+
+    case QAudio::AudioInput:
+        m_nativeMode = EMMFStateRecording;
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+
+    getSupportedCodecs();
+}
+
+DevSoundWrapper::~DevSoundWrapper()
+{
+    delete m_devsound;
+}
+
+const QList<QString>& DevSoundWrapper::supportedCodecs() const
+{
+    return m_supportedCodecs;
+}
+
+void DevSoundWrapper::initialize(const QString& codec)
+{
+    Q_ASSERT(StateInitializing != m_state);
+    m_state = StateInitializing;
+    if (QLatin1String("audio/pcm") == codec) {
+        m_fourcc = KMMFFourCCCodePCM16;
+        TRAPD(err, m_devsound->InitializeL(*this, m_fourcc, m_nativeMode));
+        if (KErrNone != err) {
+            m_state = StateIdle;
+            emit initializeComplete(err);
+        }
+    } else {
+        emit initializeComplete(KErrNotSupported);
+    }
+}
+
+const QList<int>& DevSoundWrapper::supportedFrequencies() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedFrequencies;
+}
+
+const QList<int>& DevSoundWrapper::supportedChannels() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedChannels;
+}
+
+const QList<int>& DevSoundWrapper::supportedSampleSizes() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedSampleSizes;
+}
+
+const QList<QAudioFormat::Endian>& DevSoundWrapper::supportedByteOrders() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedByteOrders;
+}
+
+const QList<QAudioFormat::SampleType>& DevSoundWrapper::supportedSampleTypes() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedSampleTypes;
+}
+
+bool DevSoundWrapper::isFormatSupported(const QAudioFormat &format) const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    return m_supportedCodecs.contains(format.codec())
+        && m_supportedFrequencies.contains(format.frequency())
+        && m_supportedChannels.contains(format.channels())
+        && m_supportedSampleSizes.contains(format.sampleSize())
+        && m_supportedSampleTypes.contains(format.sampleType())
+        && m_supportedByteOrders.contains(format.byteOrder());
+}
+
+int DevSoundWrapper::samplesProcessed() const
+{
+    Q_ASSERT(StateInitialized == m_state);
+    int result = 0;
+    switch (m_mode) {
+    case QAudio::AudioInput:
+        result = m_devsound->SamplesRecorded();
+        break;
+    case QAudio::AudioOutput:
+        result = m_devsound->SamplesPlayed();
+        break;
+    }
+    return result;
+}
+
+bool DevSoundWrapper::setFormat(const QAudioFormat &format)
+{
+    Q_ASSERT(StateInitialized == m_state);
+    bool result = false;
+    TUint32 fourcc;
+    TMMFCapabilities nativeFormat;
+    if (Utils::formatQtToNative(format, fourcc, nativeFormat)) {
+        TMMFCapabilities currentNativeFormat = m_devsound->Config();
+        nativeFormat.iBufferSize = currentNativeFormat.iBufferSize;
+        TRAPD(err, m_devsound->SetConfigL(nativeFormat));
+        result = (KErrNone == err);
+    }
+    return result;
+}
+
+bool DevSoundWrapper::start()
+{
+    Q_ASSERT(StateInitialized == m_state);
+    int err = KErrArgument;
+    switch (m_mode) {
+    case QAudio::AudioInput:
+        TRAP(err, m_devsound->RecordInitL());
+        break;
+    case QAudio::AudioOutput:
+        TRAP(err, m_devsound->PlayInitL());
+        break;
+    }
+    return (KErrNone == err);
+}
+
+void DevSoundWrapper::pause()
+{
+    Q_ASSERT(StateInitialized == m_state);
+    m_devsound->Pause();
+}
+
+void DevSoundWrapper::stop()
+{
+    m_devsound->Stop();
+}
+
+void DevSoundWrapper::bufferProcessed()
+{
+    Q_ASSERT(StateInitialized == m_state);
+    switch (m_mode) {
+    case QAudio::AudioInput:
+        m_devsound->RecordData();
+        break;
+    case QAudio::AudioOutput:
+        m_devsound->PlayData();
+        break;
+    }
+}
+
+void DevSoundWrapper::getSupportedCodecs()
+{
+/*
+ * TODO: once we support formats other than PCM, this function should
+ * convert the array of FourCC codes into MIME types for each codec.
+ *
+    RArray<TFourCC> fourcc;
+    QT_TRAP_THROWING(CleanupClosePushL(&fourcc));
+
+    TMMFPrioritySettings settings;
+    switch (mode) {
+    case QAudio::AudioOutput:
+        settings.iState = EMMFStatePlaying;
+        m_devsound->GetSupportedInputDataTypesL(fourcc, settings);
+        break;
+
+    case QAudio::AudioInput:
+        settings.iState = EMMFStateRecording;
+        m_devsound->GetSupportedInputDataTypesL(fourcc, settings);
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+
+    CleanupStack::PopAndDestroy(); // fourcc
+*/
+
+    m_supportedCodecs.append(QLatin1String("audio/pcm"));
+}
+
+void DevSoundWrapper::populateCapabilities()
+{
+    m_supportedFrequencies.clear();
+    m_supportedChannels.clear();
+    m_supportedSampleSizes.clear();
+    m_supportedByteOrders.clear();
+    m_supportedSampleTypes.clear();
+
+    const TMMFCapabilities caps = m_devsound->Capabilities();
+
+    for (int i=0; i<Utils::SampleRateCount; ++i)
+        if (caps.iRate & Utils::SampleRateListNative[i])
+            m_supportedFrequencies += Utils::SampleRateListQt[i];
+
+    for (int i=0; i<Utils::ChannelsCount; ++i)
+        if (caps.iChannels & Utils::ChannelsListNative[i])
+            m_supportedChannels += Utils::ChannelsListQt[i];
+
+    for (int i=0; i<Utils::EncodingCount; ++i) {
+        if (m_fourcc == Utils::EncodingFourCC[i]) {
+            m_supportedSampleSizes += Utils::EncodingSampleSize[i];
+            m_supportedByteOrders += Utils::EncodingByteOrder[i];
+            m_supportedSampleTypes += Utils::EncodingSampleType[i];
+        }
+    }
+}
+
+void DevSoundWrapper::InitializeComplete(TInt aError)
+{
+    Q_ASSERT(StateInitializing == m_state);
+    if (KErrNone == aError) {
+        m_state = StateInitialized;
+        populateCapabilities();
+    } else {
+        m_state = StateIdle;
+    }
+    emit initializeComplete(aError);
+}
+
+void DevSoundWrapper::ToneFinished(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's tone playback functions, so should
+    // never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void DevSoundWrapper::BufferToBeFilled(CMMFBuffer *aBuffer)
+{
+    Q_ASSERT(QAudio::AudioOutput == m_mode);
+    emit bufferToBeProcessed(aBuffer);
+}
+
+void DevSoundWrapper::PlayError(TInt aError)
+{
+    Q_ASSERT(QAudio::AudioOutput == m_mode);
+    emit processingError(aError);
+}
+
+void DevSoundWrapper::BufferToBeEmptied(CMMFBuffer *aBuffer)
+{
+    Q_ASSERT(QAudio::AudioInput == m_mode);
+    emit bufferToBeProcessed(aBuffer);
+}
+
+void DevSoundWrapper::RecordError(TInt aError)
+{
+    Q_ASSERT(QAudio::AudioInput == m_mode);
+    emit processingError(aError);
+}
+
+void DevSoundWrapper::ConvertError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound's format conversion functions, so
+    // should never receive this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void DevSoundWrapper::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
+{
+    Q_UNUSED(aMessageType)
+    Q_UNUSED(aMsg)
+    // Ignore this callback.
+}
+
+
+} // namespace SymbianAudio
+
+QT_END_NAMESPACE
+
+
Index: /trunk/src/multimedia/audio/qaudio_symbian_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudio_symbian_p.h	(revision 769)
+++ /trunk/src/multimedia/audio/qaudio_symbian_p.h	(revision 769)
@@ -0,0 +1,189 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIO_SYMBIAN_P_H
+#define QAUDIO_SYMBIAN_P_H
+
+#include <QtCore/QList>
+#include <QtCore/QString>
+#include <QtMultimedia/qaudioformat.h>
+#include <QtMultimedia/qaudio.h>
+#include <sounddevice.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+
+/**
+ * Default values used by audio input and output classes, when underlying
+ * DevSound instance has not yet been created.
+ */
+
+const int DefaultBufferSize = 4096; // bytes
+const int DefaultNotifyInterval = 1000; // ms
+
+/**
+ * Enumeration used to track state of internal DevSound instances.
+ * Values are translated to the corresponding QAudio::State values by
+ * SymbianAudio::Utils::stateNativeToQt.
+ */
+enum State {
+        ClosedState
+    ,   InitializingState
+    ,   ActiveState
+    ,   IdleState
+    ,   SuspendedState
+};
+
+/**
+ * Wrapper around DevSound instance
+ */
+class DevSoundWrapper
+    :   public QObject
+    ,   public MDevSoundObserver
+{
+    Q_OBJECT
+
+public:
+    DevSoundWrapper(QAudio::Mode mode, QObject *parent = 0);
+    ~DevSoundWrapper();
+
+public:
+    // List of supported codecs; can be called once object is constructed
+    const QList<QString>& supportedCodecs() const;
+
+    // Asynchronous initialization function; emits devsoundInitializeComplete
+    void initialize(const QString& codec);
+
+    // Capabilities, for selected codec.  Can be called once initialize has returned
+    // successfully.
+    const QList<int>& supportedFrequencies() const;
+    const QList<int>& supportedChannels() const;
+    const QList<int>& supportedSampleSizes() const;
+    const QList<QAudioFormat::Endian>& supportedByteOrders() const;
+    const QList<QAudioFormat::SampleType>& supportedSampleTypes() const;
+
+    bool isFormatSupported(const QAudioFormat &format) const;
+
+    int samplesProcessed() const;
+    bool setFormat(const QAudioFormat &format);
+    bool start();
+    void pause();
+    void stop();
+    void bufferProcessed();
+
+public:
+    // MDevSoundObserver
+    void InitializeComplete(TInt aError);
+    void ToneFinished(TInt aError);
+    void BufferToBeFilled(CMMFBuffer *aBuffer);
+    void PlayError(TInt aError);
+    void BufferToBeEmptied(CMMFBuffer *aBuffer);
+    void RecordError(TInt aError);
+    void ConvertError(TInt aError);
+    void DeviceMessage(TUid aMessageType, const TDesC8 &aMsg);
+
+signals:
+    void initializeComplete(int error);
+    void bufferToBeProcessed(CMMFBuffer *buffer);
+    void processingError(int error);
+
+private:
+    void getSupportedCodecs();
+    void populateCapabilities();
+
+private:
+    const QAudio::Mode              m_mode;
+    TMMFState                       m_nativeMode;
+
+    enum State {
+        StateIdle,
+        StateInitializing,
+        StateInitialized
+    }                               m_state;
+
+    CMMFDevSound*                   m_devsound;
+    TFourCC                         m_fourcc;
+
+    QList<QString>                  m_supportedCodecs;
+    QList<int>                      m_supportedFrequencies;
+    QList<int>                      m_supportedChannels;
+    QList<int>                      m_supportedSampleSizes;
+    QList<QAudioFormat::Endian>     m_supportedByteOrders;
+    QList<QAudioFormat::SampleType> m_supportedSampleTypes;
+
+};
+
+
+namespace Utils {
+
+/**
+ * Convert internal states to QAudio states.
+ */
+QAudio::State stateNativeToQt(State nativeState);
+
+/**
+ * Convert data length to number of samples.
+ */
+qint64 bytesToSamples(const QAudioFormat &format, qint64 length);
+
+/**
+ * Convert number of samples to data length.
+ */
+qint64 samplesToBytes(const QAudioFormat &format, qint64 samples);
+
+} // namespace Utils
+} // namespace SymbianAudio
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/multimedia/audio/qaudiodevicefactory.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiodevicefactory.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiodevicefactory.cpp	(revision 769)
@@ -59,4 +59,8 @@
 #include "qaudiooutput_alsa_p.h"
 #include "qaudioinput_alsa_p.h"
+#elif defined(Q_OS_SYMBIAN)
+#include "qaudiodeviceinfo_symbian_p.h"
+#include "qaudiooutput_symbian_p.h"
+#include "qaudioinput_symbian_p.h"
 #endif
 #endif
@@ -129,5 +133,5 @@
     QList<QAudioDeviceInfo> devices;
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     foreach (const QByteArray &handle, QAudioDeviceInfoInternal::availableDevices(mode))
         devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
@@ -159,5 +163,5 @@
     }
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
 #endif
@@ -176,5 +180,5 @@
     }
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
 #endif
@@ -188,5 +192,5 @@
 
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     if (realm == QLatin1String("builtin"))
         return new QAudioDeviceInfoInternal(handle, mode);
@@ -217,5 +221,5 @@
         return new QNullInputDevice();
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     if (deviceInfo.realm() == QLatin1String("builtin"))
         return new QAudioInputPrivate(deviceInfo.handle(), format);
@@ -236,5 +240,5 @@
         return new QNullOutputDevice();
 #ifndef QT_NO_AUDIO_BACKEND
-#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
+#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA) || defined(Q_OS_SYMBIAN))
     if (deviceInfo.realm() == QLatin1String("builtin"))
         return new QAudioOutputPrivate(deviceInfo.handle(), format);
Index: /trunk/src/multimedia/audio/qaudiodeviceinfo.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiodeviceinfo.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiodeviceinfo.cpp	(revision 769)
@@ -44,4 +44,5 @@
 #include <QtMultimedia/qaudiodeviceinfo.h>
 
+#include <QtCore/qmap.h>
 
 QT_BEGIN_NAMESPACE
@@ -239,5 +240,64 @@
 QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
 {
-    return isNull() ? QAudioFormat() : d->info->nearestFormat(settings);
+    if (isFormatSupported(settings))
+        return settings;
+
+    QAudioFormat nearest = settings;
+
+    nearest.setCodec(QLatin1String("audio/pcm"));
+
+    if (nearest.sampleType() == QAudioFormat::Unknown) {
+        QAudioFormat preferred = preferredFormat();
+        nearest.setSampleType(preferred.sampleType());
+    }
+
+    QMap<int,int> testFrequencies;
+    QList<int> frequenciesAvailable = supportedFrequencies();
+    QMap<int,int> testSampleSizes;
+    QList<int> sampleSizesAvailable = supportedSampleSizes();
+
+    // Get sorted sampleSizes (equal to and ascending values only)
+    if (sampleSizesAvailable.contains(settings.sampleSize()))
+        testSampleSizes.insert(0,settings.sampleSize());
+    sampleSizesAvailable.removeAll(settings.sampleSize());
+    foreach (int size, sampleSizesAvailable) {
+        int larger  = (size > settings.sampleSize()) ? size : settings.sampleSize();
+        int smaller = (size > settings.sampleSize()) ? settings.sampleSize() : size;
+        if (size >= settings.sampleSize()) {
+            int diff = larger - smaller;
+            testSampleSizes.insert(diff, size);
+        }
+    }
+
+    // Get sorted frequencies (equal to and ascending values only)
+    if (frequenciesAvailable.contains(settings.frequency()))
+        testFrequencies.insert(0,settings.frequency());
+    frequenciesAvailable.removeAll(settings.frequency());
+    foreach (int frequency, frequenciesAvailable) {
+        int larger  = (frequency > settings.frequency()) ? frequency : settings.frequency();
+        int smaller = (frequency > settings.frequency()) ? settings.frequency() : frequency;
+        if (frequency >= settings.frequency()) {
+            int diff = larger - smaller;
+            testFrequencies.insert(diff, frequency);
+        }
+    }
+
+    // Try to find nearest
+    // Check ascending frequencies, ascending sampleSizes
+    QMapIterator<int, int> sz(testSampleSizes);
+    while (sz.hasNext()) {
+        sz.next();
+        nearest.setSampleSize(sz.value());
+        QMapIterator<int, int> i(testFrequencies);
+        while (i.hasNext()) {
+            i.next();
+            nearest.setFrequency(i.value());
+            if (isFormatSupported(nearest))
+                return nearest;
+        }
+    }
+
+    //Fallback
+    return preferredFormat();
 }
 
Index: /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp	(revision 769)
+++ /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp	(revision 769)
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QCoreApplication>
+#include "qaudiodeviceinfo_symbian_p.h"
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray device,
+                                               QAudio::Mode mode)
+    :   m_deviceName(QLatin1String(device))
+    ,   m_mode(mode)
+    ,   m_updated(false)
+{
+
+}
+
+QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
+{
+
+}
+
+QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
+{
+    QAudioFormat format;
+    switch (m_mode) {
+    case QAudio::AudioOutput:
+        format.setFrequency(44100);
+        format.setChannels(2);
+        format.setSampleSize(16);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setSampleType(QAudioFormat::SignedInt);
+        format.setCodec(QLatin1String("audio/pcm"));
+        break;
+
+    case QAudio::AudioInput:
+        format.setFrequency(8000);
+        format.setChannels(1);
+        format.setSampleSize(16);
+        format.setByteOrder(QAudioFormat::LittleEndian);
+        format.setSampleType(QAudioFormat::SignedInt);
+        format.setCodec(QLatin1String("audio/pcm"));
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+
+    if (!isFormatSupported(format)) {
+        format = QAudioFormat();
+        format.setCodec(QLatin1String("audio/pcm"));
+        if (m_capabilities.contains(format.codec())) {
+            const Capabilities &codecCaps = m_capabilities[format.codec()];
+            if (codecCaps.m_frequencies.size())
+                format.setFrequency(codecCaps.m_frequencies[0]);
+            if (codecCaps.m_channels.size())
+                format.setChannels(codecCaps.m_channels[0]);
+            if (codecCaps.m_sampleSizes.size())
+                format.setSampleSize(codecCaps.m_sampleSizes[0]);
+            if (codecCaps.m_byteOrders.size())
+                format.setByteOrder(codecCaps.m_byteOrders[0]);
+            if (codecCaps.m_sampleTypes.size())
+                format.setSampleType(codecCaps.m_sampleTypes[0]);
+        }
+    }
+
+    return format;
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(
+                                 const QAudioFormat &format) const
+{
+    getSupportedFormats();
+    bool supported = false;
+    if (m_capabilities.contains(format.codec())) {
+        const Capabilities &codecCaps = m_capabilities[format.codec()];
+        supported = codecCaps.m_frequencies.contains(format.frequency())
+                &&  codecCaps.m_channels.contains(format.channels())
+                &&  codecCaps.m_sampleSizes.contains(format.sampleSize())
+                &&  codecCaps.m_byteOrders.contains(format.byteOrder())
+                &&  codecCaps.m_sampleTypes.contains(format.sampleType());
+    }
+    return supported;
+}
+
+QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat &format) const
+{
+    if (isFormatSupported(format))
+        return format;
+    else
+        return preferredFormat();
+}
+
+QString QAudioDeviceInfoInternal::deviceName() const
+{
+    return m_deviceName;
+}
+
+QStringList QAudioDeviceInfoInternal::codecList()
+{
+    getSupportedFormats();
+    return m_capabilities.keys();
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    getSupportedFormats();
+    return m_unionCapabilities.m_frequencies;
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    getSupportedFormats();
+    return m_unionCapabilities.m_channels;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    getSupportedFormats();
+    return m_unionCapabilities.m_sampleSizes;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    getSupportedFormats();
+    return m_unionCapabilities.m_byteOrders;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    getSupportedFormats();
+    return m_unionCapabilities.m_sampleTypes;
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
+{
+    return QByteArray("default");
+}
+
+QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
+{
+    return QByteArray("default");
+}
+
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode)
+{
+    QList<QByteArray> result;
+    result += QByteArray("default");
+    return result;
+}
+
+void QAudioDeviceInfoInternal::devsoundInitializeComplete(int err)
+{
+    m_intializationResult = err;
+    m_initializing = false;
+}
+
+// Helper function
+template<typename T>
+void appendUnique(QList<T> &left, const QList<T> &right)
+{
+    foreach (const T &value, right)
+        if (!left.contains(value))
+            left += value;
+}
+
+void QAudioDeviceInfoInternal::getSupportedFormats() const
+{
+    if (!m_updated) {
+        QScopedPointer<SymbianAudio::DevSoundWrapper> devsound(new SymbianAudio::DevSoundWrapper(m_mode));
+        connect(devsound.data(), SIGNAL(initializeComplete(int)),
+                this, SLOT(devsoundInitializeComplete(int)));
+
+        foreach (const QString& codec, devsound->supportedCodecs()) {
+            m_initializing = true;
+            devsound->initialize(codec);
+            while (m_initializing)
+                QCoreApplication::instance()->processEvents(QEventLoop::WaitForMoreEvents);
+            if (KErrNone == m_intializationResult) {
+                m_capabilities[codec].m_frequencies = devsound->supportedFrequencies();
+                appendUnique(m_unionCapabilities.m_frequencies, devsound->supportedFrequencies());
+
+                m_capabilities[codec].m_channels = devsound->supportedChannels();
+                appendUnique(m_unionCapabilities.m_channels, devsound->supportedChannels());
+
+                m_capabilities[codec].m_sampleSizes = devsound->supportedSampleSizes();
+                appendUnique(m_unionCapabilities.m_sampleSizes, devsound->supportedSampleSizes());
+
+                m_capabilities[codec].m_byteOrders = devsound->supportedByteOrders();
+                appendUnique(m_unionCapabilities.m_byteOrders, devsound->supportedByteOrders());
+
+                m_capabilities[codec].m_sampleTypes = devsound->supportedSampleTypes();
+                appendUnique(m_unionCapabilities.m_sampleTypes, devsound->supportedSampleTypes());
+            }
+        }
+
+        m_updated = true;
+    }
+}
+
+QT_END_NAMESPACE
Index: /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h	(revision 769)
+++ /trunk/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h	(revision 769)
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIODEVICEINFO_SYMBIAN_P_H
+#define QAUDIODEVICEINFO_SYMBIAN_P_H
+
+#include <QtCore/QMap>
+#include <QtMultimedia/qaudioengine.h>
+#include <sounddevice.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+class DevSoundWrapper;
+}
+
+class QAudioDeviceInfoInternal
+    :   public QAbstractAudioDeviceInfo
+{
+    Q_OBJECT
+
+public:
+    QAudioDeviceInfoInternal(QByteArray device, QAudio::Mode mode);
+    ~QAudioDeviceInfoInternal();
+
+    // QAbstractAudioDeviceInfo
+    QAudioFormat preferredFormat() const;
+    bool isFormatSupported(const QAudioFormat &format) const;
+    QAudioFormat nearestFormat(const QAudioFormat &format) const;
+    QString deviceName() const;
+    QStringList codecList();
+    QList<int> frequencyList();
+    QList<int> channelsList();
+    QList<int> sampleSizeList();
+    QList<QAudioFormat::Endian> byteOrderList();
+    QList<QAudioFormat::SampleType> sampleTypeList();
+    static QByteArray defaultInputDevice();
+    static QByteArray defaultOutputDevice();
+    static QList<QByteArray> availableDevices(QAudio::Mode);
+
+private slots:
+    void devsoundInitializeComplete(int err);
+
+private:
+    void getSupportedFormats() const;
+
+private:
+    mutable bool m_initializing;
+    int m_intializationResult;
+
+    QString m_deviceName;
+    QAudio::Mode m_mode;
+
+    struct Capabilities
+    {
+        QList<int> m_frequencies;
+        QList<int> m_channels;
+        QList<int> m_sampleSizes;
+        QList<QAudioFormat::Endian> m_byteOrders;
+        QList<QAudioFormat::SampleType> m_sampleTypes;
+    };
+
+    // Mutable to allow lazy initialization when called from const-qualified
+    // public functions (isFormatSupported, nearestFormat)
+    mutable bool m_updated;
+    mutable QMap<QString, Capabilities> m_capabilities;
+    mutable Capabilities m_unionCapabilities;
+};
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp	(revision 769)
@@ -79,4 +79,6 @@
     device = QLatin1String(dev);
     this->mode = mode;
+
+    updateLists();
 }
 
@@ -177,20 +179,68 @@
 
     bool failed = false;
-
-    // For now, just accept only audio/pcm codec
-    if(!format.codec().startsWith(QLatin1String("audio/pcm")))
-        failed = true;
-
-    if(!failed && !(format.channels() == 1 || format.channels() == 2))
-        failed = true;
-
-    if(!failed) {
-        if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 ||
-	   format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000))
-	    failed = true;
-    }
-
-    if(!failed && !(format.sampleSize() == 8 || format.sampleSize() == 16))
-        failed = true;
+    bool match = false;
+
+    // check codec
+    for( int i = 0; i < codecz.count(); i++) {
+        if (format.codec() == codecz.at(i))
+            match = true;
+    }
+    if (!match) failed = true;
+
+    // check channel
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < channelz.count(); i++) {
+            if (format.channels() == channelz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+    if (!match) failed = true;
+
+    // check frequency
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < freqz.count(); i++) {
+            if (format.frequency() == freqz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check sample size
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < sizez.count(); i++) {
+            if (format.sampleSize() == sizez.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check byte order
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < byteOrderz.count(); i++) {
+            if (format.byteOrder() == byteOrderz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // check sample type
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < typez.count(); i++) {
+            if (format.sampleType() == typez.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
 
     if(!failed) {
@@ -333,4 +383,6 @@
 	codecz.append(QLatin1String("audio/pcm"));
     }
+    if (freqz.count() > 0)
+        freqz.prepend(8000);
 }
 
Index: /trunk/src/multimedia/audio/qaudioinput.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput.cpp	(revision 769)
@@ -96,5 +96,5 @@
       format.setSampleType(QAudioFormat::UnSignedInt);
 
-      if (QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
+      QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
       if (!info.isFormatSupported(format)) {
           qWarning()<<"default format not supported try to use nearest";
@@ -147,4 +147,18 @@
 
     \sa QAudioOutput, QAudioDeviceInfo
+
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c UserEnvironment platform security capability.  If the client
+    process lacks this capability, calls to either overload of start()
+    will fail.
+    This failure is indicated by the QAudioInput object setting
+    its error() value to \l{QAudio::OpenError} and then emitting a
+    \l{stateChanged()}{stateChanged}(\l{QAudio::StoppedState}) signal.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
 */
 
@@ -191,4 +205,17 @@
      All that is required is to open the QIODevice.
 
+     If able to successfully get audio data from the systems audio device the
+     state() is set to either QAudio::ActiveState or QAudio::IdleState,
+     error() is set to QAudio::NoError and the stateChanged() signal is emitted.
+
+     If a problem occurs during this process the error() is set to QAudio::OpenError,
+     state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    In either case, the stateChanged() signal may be emitted either synchronously
+    during execution of the start() function or asynchronously after start() has
+    returned to the caller.
+
+     \sa {Symbian Platform Security Requirements}
+
      \sa QIODevice
 */
@@ -196,11 +223,4 @@
 void QAudioInput::start(QIODevice* device)
 {
-    /*
-       -If currently not StoppedState, stop
-       -If previous start was push mode, delete internal QIODevice.
-       -open audio input.
-       If ok, NoError and ActiveState, else OpenError and StoppedState.
-       -emit stateChanged()
-    */
     d->start(device);
 }
@@ -211,4 +231,17 @@
     directly.
 
+    If able to access the systems audio device the state() is set to
+    QAudio::IdleState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    In either case, the stateChanged() signal may be emitted either synchronously
+    during execution of the start() function or asynchronously after start() has
+    returned to the caller.
+
+    \sa {Symbian Platform Security Requirements}
+
     \sa QIODevice
 */
@@ -216,12 +249,4 @@
 QIODevice* QAudioInput::start()
 {
-    /*
-    -If currently not StoppedState, stop
-    -If no internal QIODevice, create one.
-    -open audio input.
-    -If ok, NoError and IdleState, else OpenError and StoppedState
-    -emit stateChanged()
-    -return internal QIODevice
-    */
     return d->start(0);
 }
@@ -237,15 +262,12 @@
 
 /*!
-    Stops the audio input.
+    Stops the audio input, detaching from the system resource.
+
+    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
+    emit stateChanged() signal.
 */
 
 void QAudioInput::stop()
 {
-    /*
-    -If StoppedState, return
-    -set to StoppedState
-    -detach from audio device
-    -emit stateChanged()
-    */
     d->stop();
 }
@@ -257,8 +279,4 @@
 void QAudioInput::reset()
 {
-    /*
-    -drop all buffered audio, set buffers to zero.
-    -call stop()
-    */
     d->reset();
 }
@@ -266,14 +284,13 @@
 /*!
     Stops processing audio data, preserving buffered audio data.
+
+    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
+    emit stateChanged() signal.
+
+    Note: signal will always be emitted during execution of the resume() function.
 */
 
 void QAudioInput::suspend()
 {
-    /*
-    -If not ActiveState|IdleState, return
-    -stop processing audio, saving all buffered audio data
-    -set NoError and SuspendedState
-    -emit stateChanged()
-    */
     d->suspend();
 }
@@ -281,21 +298,18 @@
 /*!
     Resumes processing audio data after a suspend().
+
+    Sets error() to QAudio::NoError.
+    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
+    Sets state() to QAudio::IdleState if you previously called start().
+    emits stateChanged() signal.
 */
 
 void QAudioInput::resume()
 {
-    /*
-    -If SuspendedState, return
-    -resume audio
-    -(PULL MODE): set ActiveState, NoError
-    -(PUSH MODE): set IdleState, NoError
-    -kick start audio if needed
-    -emit stateChanged()
-    */
      d->resume();
 }
 
 /*!
-    Sets the audio buffer size to \a value milliseconds.
+    Sets the audio buffer size to \a value bytes.
 
     Note: This function can be called anytime before start(), calls to this
@@ -312,5 +326,5 @@
 
 /*!
-    Returns the audio buffer size in milliseconds.
+    Returns the audio buffer size in bytes.
 
     If called before start(), returns platform default value.
@@ -328,4 +342,7 @@
 /*!
     Returns the amount of audio data available to read in bytes.
+
+    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
+    state, otherwise returns zero.
 */
 
@@ -353,5 +370,8 @@
     Sets the interval for notify() signal to be emitted.
     This is based on the \a ms of audio data processed
-    not on actual real-time. The resolution of the timer is platform specific.
+    not on actual real-time.
+    The minimum resolution of the timer is platform specific and values
+    should be checked with notifyInterval() to confirm actual value
+    being used.
 */
 
Index: /trunk/src/multimedia/audio/qaudioinput_alsa_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_alsa_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput_alsa_p.cpp	(revision 769)
@@ -59,6 +59,4 @@
 //#define DEBUG_AUDIO 1
 
-static const int minimumIntervalTime = 50;
-
 QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
     settings(audioFormat)
@@ -122,4 +120,9 @@
         if(err < 0)
             reset = true;
+        else {
+            bytesAvailable = bytesReady();
+            if (bytesAvailable <= 0)
+                reset = true;
+        }
 
     } else if((err == -ESTRPIPE)||(err == -EIO)) {
@@ -218,7 +221,9 @@
         pullMode = true;
         audioSource = device;
+        deviceState = QAudio::ActiveState;
     } else {
         //set to push mode
         pullMode = false;
+        deviceState = QAudio::IdleState;
         audioSource = new InputPrivate(this);
         audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
@@ -414,5 +419,4 @@
 
     errorState  = QAudio::NoError;
-    deviceState = QAudio::ActiveState;
 
     totalTimeValue = 0;
@@ -423,5 +427,4 @@
 void QAudioInputPrivate::close()
 {
-    deviceState = QAudio::StoppedState;
     timer->stop();
 
@@ -440,7 +443,8 @@
         return period_size;
 
-    if(deviceState != QAudio::ActiveState)
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
         return 0;
     int frames = snd_pcm_avail_update(handle);
+    if (frames < 0) return frames;
     if((int)frames > (int)buffer_frames)
         frames = buffer_frames;
@@ -451,6 +455,6 @@
 qint64 QAudioInputPrivate::read(char* data, qint64 len)
 {
-    Q_UNUSED(data)
     Q_UNUSED(len)
+
     // Read in some audio data and write it to QIODevice, pull mode
     if ( !handle )
@@ -458,4 +462,18 @@
 
     bytesAvailable = bytesReady();
+
+    if (bytesAvailable < 0) {
+        // bytesAvailable as negative is error code, try to recover from it.
+        xrun_recovery(bytesAvailable);
+        bytesAvailable = bytesReady();
+        if (bytesAvailable < 0) {
+            // recovery failed must stop and set error.
+            close();
+            errorState = QAudio::IOError;
+            deviceState = QAudio::StoppedState;
+            emit stateChanged(deviceState);
+            return 0;
+        }
+    }
 
     int count=0, err = 0;
@@ -469,5 +487,5 @@
             err = snd_pcm_frames_to_bytes(handle, readFrames);
 #ifdef DEBUG_AUDIO
-            qDebug()<<QString::fromLatin1("PULL: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData();
+            qDebug()<<QString::fromLatin1("read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData();
 #endif
             break;
@@ -490,26 +508,44 @@
         // got some send it onward
 #ifdef DEBUG_AUDIO
-        qDebug()<<"PULL: frames to write to QIODevice = "<<
+        qDebug()<<"frames to write to QIODevice = "<<
             snd_pcm_bytes_to_frames( handle, (int)err )<<" ("<<err<<") bytes";
 #endif
-        if(deviceState != QAudio::ActiveState)
+        if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
             return 0;
-
-        qint64 l = audioSource->write(audioBuffer,err);
-        if(l < 0) {
-            close();
-            errorState = QAudio::IOError;
-            deviceState = QAudio::StoppedState;
-            emit stateChanged(deviceState);
-        } else if(l == 0) {
-            errorState = QAudio::NoError;
-            deviceState = QAudio::IdleState;
+        if (pullMode) {
+            qint64 l = audioSource->write(audioBuffer,err);
+            if(l < 0) {
+                close();
+                errorState = QAudio::IOError;
+                deviceState = QAudio::StoppedState;
+                emit stateChanged(deviceState);
+            } else if(l == 0) {
+                if (deviceState != QAudio::IdleState) {
+                    errorState = QAudio::NoError;
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            } else {
+                totalTimeValue += err;
+                resuming = false;
+                if (deviceState != QAudio::ActiveState) {
+                    errorState = QAudio::NoError;
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
+            }
+            return l;
+
         } else {
-            totalTimeValue += snd_pcm_bytes_to_frames(handle, err)*1000000/settings.frequency();
+            memcpy(data,audioBuffer,err);
+            totalTimeValue += err;
             resuming = false;
-            errorState = QAudio::NoError;
-            deviceState = QAudio::ActiveState;
-        }
-        return l;
+            if (deviceState != QAudio::ActiveState) {
+                errorState = QAudio::NoError;
+                deviceState = QAudio::ActiveState;
+                emit stateChanged(deviceState);
+            }
+            return err;
+        }
     }
     return 0;
@@ -557,8 +593,5 @@
 void QAudioInputPrivate::setNotifyInterval(int ms)
 {
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
+    intervalTime = qMax(0, ms);
 }
 
@@ -570,5 +603,9 @@
 qint64 QAudioInputPrivate::processedUSecs() const
 {
-    return totalTimeValue;
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
 }
 
@@ -608,5 +645,5 @@
         return true;
 
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+    if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
         emit notify();
         elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
@@ -618,32 +655,8 @@
 qint64 QAudioInputPrivate::elapsedUSecs() const
 {
-    if(!handle)
-        return 0;
-
     if (deviceState == QAudio::StoppedState)
         return 0;
 
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-    snd_pcm_status_t* status;
-    snd_pcm_status_alloca(&status);
-
-    snd_timestamp_t t1,t2;
-    if( snd_pcm_status(handle, status) >= 0) {
-        snd_pcm_status_get_tstamp(status,&t1);
-        snd_pcm_status_get_trigger_tstamp(status,&t2);
-        t1.tv_sec-=t2.tv_sec;
-
-        signed long l = (signed long)t1.tv_usec - (signed long)t2.tv_usec;
-        if(l < 0) {
-            t1.tv_sec--;
-            l = -l;
-            l %= 1000000;
-        }
-        return ((t1.tv_sec * 1000000)+l);
-    } else
-        return 0;
-#else
     return clockStamp.elapsed()*1000;
-#endif
 }
 
@@ -671,41 +684,5 @@
 qint64 InputPrivate::readData( char* data, qint64 len)
 {
-    // push mode, user read() called
-    if((audioDevice->state() != QAudio::ActiveState) && !audioDevice->resuming)
-        return 0;
-
-    int readFrames;
-    int count=0, err = 0;
-
-    while(count < 5) {
-        int frames = snd_pcm_bytes_to_frames(audioDevice->handle, len);
-        readFrames = snd_pcm_readi(audioDevice->handle, data, frames);
-        if (readFrames >= 0) {
-            err = snd_pcm_frames_to_bytes(audioDevice->handle, readFrames);
-#ifdef DEBUG_AUDIO
-            qDebug()<<QString::fromLatin1("PUSH: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData();
-#endif
-            break;
-        } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) {
-            audioDevice->errorState = QAudio::IOError;
-            err = 0;
-            break;
-        } else {
-            if(readFrames == -EPIPE) {
-                audioDevice->errorState = QAudio::UnderrunError;
-                err = snd_pcm_prepare(audioDevice->handle);
-            } else if(readFrames == -ESTRPIPE) {
-                err = snd_pcm_prepare(audioDevice->handle);
-            }
-            if(err != 0) break;
-        }
-        count++;
-    }
-    if(err > 0 && readFrames > 0) {
-        audioDevice->totalTimeValue += readFrames*1000/audioDevice->settings.frequency()*1000;
-        audioDevice->deviceState = QAudio::ActiveState;
-        return err;
-    }
-    return 0;
+    return audioDevice->read(data,len);
 }
 
Index: /trunk/src/multimedia/audio/qaudioinput_mac_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_mac_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput_mac_p.cpp	(revision 769)
@@ -55,15 +55,14 @@
 #include <QtCore/qdebug.h>
 
-#include <QtMultimedia/qaudiodeviceinfo.h>
 #include <QtMultimedia/qaudioinput.h>
 
 #include "qaudio_mac_p.h"
 #include "qaudioinput_mac_p.h"
-
+#include "qaudiodeviceinfo_mac_p.h"
 
 QT_BEGIN_NAMESPACE
 
 
-namespace
+namespace QtMultimediaInternal
 {
 
@@ -170,6 +169,8 @@
     void reset()
     {
-        for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i)
+        for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i) {
             bfs->mBuffers[i].mDataByteSize = dataSize;
+            bfs->mBuffers[i].mData = 0;
+        }
     }
 
@@ -228,4 +229,5 @@
         QObject(parent),
         m_deviceError(false),
+        m_audioConverter(0),
         m_inputFormat(inputFormat),
         m_outputFormat(outputFormat)
@@ -239,5 +241,5 @@
         connect(m_flushTimer, SIGNAL(timeout()), SLOT(flushBuffer()));
 
-        if (inputFormat.mSampleRate != outputFormat.mSampleRate) {
+        if (toQAudioFormat(inputFormat) != toQAudioFormat(outputFormat)) {
             if (AudioConverterNew(&m_inputFormat, &m_outputFormat, &m_audioConverter) != noErr) {
                 qWarning() << "QAudioInput: Unable to create an Audio Converter";
@@ -518,4 +520,5 @@
         errorCode = QAudio::OpenError;
     else {
+        audioDeviceInfo = new QAudioDeviceInfoInternal(device, QAudio::AudioInput);
         isOpen = false;
         audioDeviceId = AudioDeviceID(did);
@@ -524,5 +527,5 @@
         totalFrames = 0;
         audioBuffer = 0;
-        internalBufferSize = default_buffer_size;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
         clockFrequency = AudioGetHostClockFrequency() / 1000;
         errorCode = QAudio::NoError;
@@ -538,4 +541,5 @@
 {
     close();
+    delete audioDeviceInfo;
 }
 
@@ -575,5 +579,5 @@
                                &enable,
                                sizeof(enable)) != noErr) {
-        qWarning() << "QAudioInput: Unabled to switch to input mode (Enable Input)";
+        qWarning() << "QAudioInput: Unable to switch to input mode (Enable Input)";
         return false;
     }
@@ -586,5 +590,5 @@
                             &enable,
                             sizeof(enable)) != noErr) {
-        qWarning() << "QAudioInput: Unabled to switch to input mode (Disable output)";
+        qWarning() << "QAudioInput: Unable to switch to input mode (Disable output)";
         return false;
     }
@@ -617,33 +621,38 @@
 
     // Set format
+    // Wanted
     streamFormat = toAudioStreamBasicDescription(audioFormat);
 
-    size = sizeof(deviceFormat);
-    if (AudioUnitGetProperty(audioUnit,
-                                kAudioUnitProperty_StreamFormat,
-                                kAudioUnitScope_Input,
-                                1,
-                                &deviceFormat,
-                                &size) != noErr) {
-        qWarning() << "QAudioInput: Unable to retrieve device format";
-        return false;
-    }
-
-    // If the device frequency is different to the requested use a converter
-    if (deviceFormat.mSampleRate != streamFormat.mSampleRate) {
-         AudioUnitSetProperty(audioUnit,
+    // Required on unit
+    if (audioFormat == audioDeviceInfo->preferredFormat()) {
+        deviceFormat = streamFormat;
+        AudioUnitSetProperty(audioUnit,
                                kAudioUnitProperty_StreamFormat,
                                kAudioUnitScope_Output,
                                1,
                                &deviceFormat,
-                               sizeof(streamFormat));
+                               sizeof(deviceFormat));
     }
     else {
-        AudioUnitSetProperty(audioUnit,
-                               kAudioUnitProperty_StreamFormat,
-                               kAudioUnitScope_Output,
-                               1,
-                               &streamFormat,
-                               sizeof(streamFormat));
+        size = sizeof(deviceFormat);
+        if (AudioUnitGetProperty(audioUnit,
+                                    kAudioUnitProperty_StreamFormat,
+                                    kAudioUnitScope_Input,
+                                    1,
+                                    &deviceFormat,
+                                    &size) != noErr) {
+            qWarning() << "QAudioInput: Unable to retrieve device format";
+            return false;
+        }
+
+        if (AudioUnitSetProperty(audioUnit,
+                                   kAudioUnitProperty_StreamFormat,
+                                   kAudioUnitScope_Output,
+                                   1,
+                                   &deviceFormat,
+                                   sizeof(deviceFormat)) != noErr) {
+            qWarning() << "QAudioInput: Unable to set device format";
+            return false;
+        }
     }
 
@@ -662,6 +671,6 @@
 
     // Allocate buffer
-    periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) *
-                        streamFormat.mBytesPerFrame;
+    periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame;
+
     if (internalBufferSize < periodSizeBytes * 2)
         internalBufferSize = periodSizeBytes * 2;
@@ -669,5 +678,5 @@
         internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
 
-    audioBuffer = new QAudioInputBuffer(internalBufferSize,
+    audioBuffer = new QtMultimediaInternal::QAudioInputBuffer(internalBufferSize,
                                         periodSizeBytes,
                                         deviceFormat,
@@ -675,5 +684,5 @@
                                         this);
 
-    audioIO = new MacInputDevice(audioBuffer, this);
+    audioIO = new QtMultimediaInternal::MacInputDevice(audioBuffer, this);
 
     // Init
@@ -708,5 +717,5 @@
     QIODevice*  op = device;
 
-    if (!open()) {
+    if (!audioFormat.isValid() || !open()) {
         stateCode = QAudio::StoppedState;
         errorCode = QAudio::OpenError;
@@ -805,4 +814,10 @@
 void QAudioInputPrivate::setNotifyInterval(int milliSeconds)
 {
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
     intervalTimer->setInterval(milliSeconds);
 }
@@ -884,5 +899,6 @@
 {
     audioBuffer->startFlushTimer();
-    intervalTimer->start();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
 }
 
Index: /trunk/src/multimedia/audio/qaudioinput_mac_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_mac_p.h	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput_mac_p.h	(revision 769)
@@ -75,6 +75,7 @@
 class QTimer;
 class QIODevice;
+class QAbstractAudioDeviceInfo;
 
-namespace
+namespace QtMultimediaInternal
 {
 class QAudioInputBuffer;
@@ -98,5 +99,5 @@
     QAudio::Error   errorCode;
     QAudio::State   stateCode;
-    QAudioInputBuffer*   audioBuffer;
+    QtMultimediaInternal::QAudioInputBuffer*   audioBuffer;
     QMutex          mutex;
     QWaitCondition  threadFinished;
@@ -105,4 +106,5 @@
     AudioStreamBasicDescription streamFormat;
     AudioStreamBasicDescription deviceFormat;
+    QAbstractAudioDeviceInfo *audioDeviceInfo;
 
     QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format);
Index: /trunk/src/multimedia/audio/qaudioinput_symbian_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_symbian_p.cpp	(revision 769)
+++ /trunk/src/multimedia/audio/qaudioinput_symbian_p.cpp	(revision 769)
@@ -0,0 +1,551 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudioinput_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const int PushInterval = 50; // ms
+
+
+//-----------------------------------------------------------------------------
+// Private class
+//-----------------------------------------------------------------------------
+
+SymbianAudioInputPrivate::SymbianAudioInputPrivate(
+                              QAudioInputPrivate *audioDevice)
+    :   m_audioDevice(audioDevice)
+{
+
+}
+
+SymbianAudioInputPrivate::~SymbianAudioInputPrivate()
+{
+
+}
+
+qint64 SymbianAudioInputPrivate::readData(char *data, qint64 len)
+{
+    qint64 totalRead = 0;
+
+    if (m_audioDevice->state() == QAudio::ActiveState ||
+        m_audioDevice->state() == QAudio::IdleState) {
+
+        while (totalRead < len) {
+            const qint64 read = m_audioDevice->read(data + totalRead,
+                                                    len - totalRead);
+            if (read > 0)
+                totalRead += read;
+            else
+                break;
+        }
+    }
+
+    return totalRead;
+}
+
+qint64 SymbianAudioInputPrivate::writeData(const char *data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+    return 0;
+}
+
+void SymbianAudioInputPrivate::dataReady()
+{
+    emit readyRead();
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device,
+                                     const QAudioFormat &format)
+    :   m_device(device)
+    ,   m_format(format)
+    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
+    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
+    ,   m_notifyTimer(new QTimer(this))
+    ,   m_error(QAudio::NoError)
+    ,   m_internalState(SymbianAudio::ClosedState)
+    ,   m_externalState(QAudio::StoppedState)
+    ,   m_pullMode(false)
+    ,   m_sink(0)
+    ,   m_pullTimer(new QTimer(this))
+    ,   m_devSound(0)
+    ,   m_devSoundBuffer(0)
+    ,   m_devSoundBufferSize(0)
+    ,   m_totalBytesReady(0)
+    ,   m_devSoundBufferPos(0)
+    ,   m_totalSamplesRecorded(0)
+{
+    qRegisterMetaType<CMMFBuffer *>("CMMFBuffer *");
+
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    m_pullTimer->setInterval(PushInterval);
+    connect(m_pullTimer.data(), SIGNAL(timeout()), this, SLOT(pullData()));
+}
+
+QAudioInputPrivate::~QAudioInputPrivate()
+{
+    close();
+}
+
+QIODevice* QAudioInputPrivate::start(QIODevice *device)
+{
+    stop();
+
+    open();
+    if (SymbianAudio::ClosedState != m_internalState) {
+        if (device) {
+            m_pullMode = true;
+            m_sink = device;
+        } else {
+            m_sink = new SymbianAudioInputPrivate(this);
+            m_sink->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+        }
+
+        m_elapsed.restart();
+    }
+
+    return m_sink;
+}
+
+void QAudioInputPrivate::stop()
+{
+    close();
+}
+
+void QAudioInputPrivate::reset()
+{
+    m_totalSamplesRecorded += getSamplesRecorded();
+    m_devSound->stop();
+    startRecording();
+}
+
+void QAudioInputPrivate::suspend()
+{
+    if (SymbianAudio::ActiveState == m_internalState
+        || SymbianAudio::IdleState == m_internalState) {
+        m_notifyTimer->stop();
+        m_pullTimer->stop();
+        m_devSound->pause();
+        const qint64 samplesRecorded = getSamplesRecorded();
+        m_totalSamplesRecorded += samplesRecorded;
+
+        if (m_devSoundBuffer) {
+            m_devSoundBufferQ.append(m_devSoundBuffer);
+            m_devSoundBuffer = 0;
+        }
+
+        setState(SymbianAudio::SuspendedState);
+    }
+}
+
+void QAudioInputPrivate::resume()
+{
+    if (SymbianAudio::SuspendedState == m_internalState) {
+        if (!m_pullMode && !bytesReady())
+            m_devSound->start();
+        startDataTransfer();
+    }
+}
+
+int QAudioInputPrivate::bytesReady() const
+{
+    Q_ASSERT(m_devSoundBufferPos <= m_totalBytesReady);
+    return m_totalBytesReady - m_devSoundBufferPos;
+}
+
+int QAudioInputPrivate::periodSize() const
+{
+    return bufferSize();
+}
+
+void QAudioInputPrivate::setBufferSize(int value)
+{
+    // Note that DevSound does not allow its client to specify the buffer size.
+    // This functionality is available via custom interfaces, but since these
+    // cannot be guaranteed to work across all DevSound implementations, we
+    // do not use them here.
+    // In order to comply with the expected bevahiour of QAudioInput, we store
+    // the value and return it from bufferSize(), but the underlying DevSound
+    // buffer size remains unchanged.
+    if (value > 0)
+        m_clientBufferSize = value;
+}
+
+int QAudioInputPrivate::bufferSize() const
+{
+    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
+}
+
+void QAudioInputPrivate::setNotifyInterval(int ms)
+{
+    if (ms >= 0) {
+        const int oldNotifyInterval = m_notifyInterval;
+        m_notifyInterval = ms;
+        if (m_notifyInterval && (SymbianAudio::ActiveState == m_internalState ||
+                                 SymbianAudio::IdleState == m_internalState))
+            m_notifyTimer->start(m_notifyInterval);
+        else
+            m_notifyTimer->stop();
+    }
+}
+
+int QAudioInputPrivate::notifyInterval() const
+{
+    return m_notifyInterval;
+}
+
+qint64 QAudioInputPrivate::processedUSecs() const
+{
+    int samplesPlayed = 0;
+    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+        samplesPlayed = getSamplesRecorded();
+
+    // Protect against division by zero
+    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
+
+    const qint64 result = qint64(1000000) *
+                          (samplesPlayed + m_totalSamplesRecorded)
+                        / m_format.frequency();
+
+    return result;
+}
+
+qint64 QAudioInputPrivate::elapsedUSecs() const
+{
+    const qint64 result = (QAudio::StoppedState == state()) ?
+                              0 : m_elapsed.elapsed() * 1000;
+    return result;
+}
+
+QAudio::Error QAudioInputPrivate::error() const
+{
+    return m_error;
+}
+
+QAudio::State QAudioInputPrivate::state() const
+{
+    return m_externalState;
+}
+
+QAudioFormat QAudioInputPrivate::format() const
+{
+    return m_format;
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void QAudioInputPrivate::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    Q_ASSERT(!m_devSound);
+    m_devSound = new SymbianAudio::DevSoundWrapper(QAudio::AudioInput, this);
+
+    connect(m_devSound, SIGNAL(initializeComplete(int)),
+            this, SLOT(devsoundInitializeComplete(int)));
+    connect(m_devSound, SIGNAL(bufferToBeProcessed(CMMFBuffer *)),
+            this, SLOT(devsoundBufferToBeEmptied(CMMFBuffer *)));
+    connect(m_devSound, SIGNAL(processingError(int)),
+            this, SLOT(devsoundRecordError(int)));
+
+    setState(SymbianAudio::InitializingState);
+    m_devSound->initialize(m_format.codec());
+}
+
+void QAudioInputPrivate::startRecording()
+{
+    const int samplesRecorded = m_devSound->samplesProcessed();
+    Q_ASSERT(samplesRecorded == 0);
+
+    bool ok = m_devSound->setFormat(m_format);
+    if (ok)
+        ok = m_devSound->start();
+
+    if (ok) {
+        startDataTransfer();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioInputPrivate::startDataTransfer()
+{
+    if (m_notifyInterval)
+        m_notifyTimer->start(m_notifyInterval);
+
+    if (m_pullMode)
+        m_pullTimer->start();
+
+    if (bytesReady()) {
+        setState(SymbianAudio::ActiveState);
+        if (!m_pullMode)
+            pushData();
+    } else {
+        if (SymbianAudio::SuspendedState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+        else
+            setState(SymbianAudio::IdleState);
+    }
+}
+
+CMMFDataBuffer* QAudioInputPrivate::currentBuffer() const
+{
+    CMMFDataBuffer *result = m_devSoundBuffer;
+    if (!result && !m_devSoundBufferQ.empty())
+        result = m_devSoundBufferQ.front();
+    return result;
+}
+
+void QAudioInputPrivate::pushData()
+{
+    Q_ASSERT_X(bytesReady(), Q_FUNC_INFO, "No data available");
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO, "pushData called when in pull mode");
+    qobject_cast<SymbianAudioInputPrivate *>(m_sink)->dataReady();
+}
+
+qint64 QAudioInputPrivate::read(char *data, qint64 len)
+{
+    // SymbianAudioInputPrivate is ready to read data
+
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
+        "read called when in pull mode");
+
+    qint64 bytesRead = 0;
+
+    CMMFDataBuffer *buffer = 0;
+    while ((buffer = currentBuffer()) && (bytesRead < len)) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDesC8 &inputBuffer = buffer->Data();
+
+        const qint64 inputBytes = bytesReady();
+        const qint64 outputBytes = len - bytesRead;
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        memcpy(data, inputBuffer.Ptr() + m_devSoundBufferPos, copyBytes);
+
+        m_devSoundBufferPos += copyBytes;
+        data += copyBytes;
+        bytesRead += copyBytes;
+
+        if (!bytesReady())
+            bufferEmptied();
+    }
+
+    return bytesRead;
+}
+
+void QAudioInputPrivate::pullData()
+{
+    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
+        "pullData called when in push mode");
+
+    CMMFDataBuffer *buffer = 0;
+    while (buffer = currentBuffer()) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDesC8 &inputBuffer = buffer->Data();
+
+        const qint64 inputBytes = bytesReady();
+        const qint64 bytesPushed = m_sink->write(
+            (char*)inputBuffer.Ptr() + m_devSoundBufferPos, inputBytes);
+
+        m_devSoundBufferPos += bytesPushed;
+
+        if (!bytesReady())
+            bufferEmptied();
+
+        if (!bytesPushed)
+            break;
+    }
+}
+
+void QAudioInputPrivate::devsoundInitializeComplete(int err)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (!err && m_devSound->isFormatSupported(m_format))
+        startRecording();
+    else
+        setError(QAudio::OpenError);
+}
+
+void QAudioInputPrivate::devsoundBufferToBeEmptied(CMMFBuffer *baseBuffer)
+{
+    // Following receipt of this signal, DevSound should not provide another
+    // buffer until we have returned the current one.
+    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
+
+    CMMFDataBuffer *const buffer = static_cast<CMMFDataBuffer*>(baseBuffer);
+
+    if (!m_devSoundBufferSize)
+        m_devSoundBufferSize = buffer->Data().MaxLength();
+
+    m_totalBytesReady += buffer->Data().Length();
+
+    if (SymbianAudio::SuspendedState == m_internalState) {
+        m_devSoundBufferQ.append(buffer);
+    } else {
+        // Will be returned to DevSoundWrapper by bufferProcessed().
+        m_devSoundBuffer = buffer;
+        m_devSoundBufferPos = 0;
+
+        if (bytesReady() && !m_pullMode)
+            pushData();
+    }
+}
+
+void QAudioInputPrivate::devsoundRecordError(int err)
+{
+    Q_UNUSED(err)
+    setError(QAudio::IOError);
+}
+
+void QAudioInputPrivate::bufferEmptied()
+{
+    m_devSoundBufferPos = 0;
+
+    if (m_devSoundBuffer) {
+        m_totalBytesReady -= m_devSoundBuffer->Data().Length();
+        m_devSoundBuffer = 0;
+        m_devSound->bufferProcessed();
+    } else {
+        Q_ASSERT(!m_devSoundBufferQ.empty());
+        m_totalBytesReady -= m_devSoundBufferQ.front()->Data().Length();
+        m_devSoundBufferQ.erase(m_devSoundBufferQ.begin());
+
+        // If the queue has been emptied, resume transfer from the hardware
+        if (m_devSoundBufferQ.empty())
+            if (!m_devSound->start())
+                setError(QAudio::IOError);
+    }
+
+    Q_ASSERT(m_totalBytesReady >= 0);
+}
+
+void QAudioInputPrivate::close()
+{
+    m_notifyTimer->stop();
+    m_pullTimer->stop();
+
+    m_error = QAudio::NoError;
+
+    if (m_devSound)
+        m_devSound->stop();
+    delete m_devSound;
+    m_devSound = 0;
+
+    m_devSoundBuffer = 0;
+    m_devSoundBufferSize = 0;
+    m_totalBytesReady = 0;
+
+    if (!m_pullMode) // m_sink is owned
+        delete m_sink;
+    m_pullMode = false;
+    m_sink = 0;
+
+    m_devSoundBufferQ.clear();
+    m_devSoundBufferPos = 0;
+    m_totalSamplesRecorded = 0;
+
+    setState(SymbianAudio::ClosedState);
+}
+
+qint64 QAudioInputPrivate::getSamplesRecorded() const
+{
+    qint64 result = 0;
+    if (m_devSound)
+        result = qint64(m_devSound->samplesProcessed());
+    return result;
+}
+
+void QAudioInputPrivate::setError(QAudio::Error error)
+{
+    m_error = error;
+
+    // Although no state transition actually occurs here, a stateChanged event
+    // must be emitted to inform the client that the call to start() was
+    // unsuccessful.
+    if (QAudio::OpenError == error) {
+        emit stateChanged(QAudio::StoppedState);
+    } else {
+        if (QAudio::UnderrunError == error)
+            setState(SymbianAudio::IdleState);
+        else
+            // Close the DevSound instance.  This causes a transition to
+            // StoppedState.  This must be done asynchronously in case the
+            // current function was called from a DevSound event handler, in which
+            // case deleting the DevSound instance may cause an exception.
+            QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
+    }
+}
+
+void QAudioInputPrivate::setState(SymbianAudio::State newInternalState)
+{
+    const QAudio::State oldExternalState = m_externalState;
+    m_internalState = newInternalState;
+    m_externalState = SymbianAudio::Utils::stateNativeToQt(m_internalState);
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+QT_END_NAMESPACE
Index: /trunk/src/multimedia/audio/qaudioinput_symbian_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_symbian_p.h	(revision 769)
+++ /trunk/src/multimedia/audio/qaudioinput_symbian_p.h	(revision 769)
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOINPUT_SYMBIAN_P_H
+#define QAUDIOINPUT_SYMBIAN_P_H
+
+#include <QtMultimedia/qaudioengine.h>
+#include <QTime>
+#include <QTimer>
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QAudioInputPrivate;
+
+class SymbianAudioInputPrivate : public QIODevice
+{
+    friend class QAudioInputPrivate;
+    Q_OBJECT
+public:
+    SymbianAudioInputPrivate(QAudioInputPrivate *audio);
+    ~SymbianAudioInputPrivate();
+
+    qint64 readData(char *data, qint64 len);
+    qint64 writeData(const char *data, qint64 len);
+
+    void dataReady();
+
+private:
+    QAudioInputPrivate *const m_audioDevice;
+};
+
+class QAudioInputPrivate
+    :   public QAbstractAudioInput
+{
+    friend class SymbianAudioInputPrivate;
+    Q_OBJECT
+public:
+    QAudioInputPrivate(const QByteArray &device,
+                      const QAudioFormat &audioFormat);
+    ~QAudioInputPrivate();
+
+    // QAbstractAudioInput
+    QIODevice* start(QIODevice *device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesReady() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+
+private slots:
+    void pullData();
+    void devsoundInitializeComplete(int err);
+    void devsoundBufferToBeEmptied(CMMFBuffer *);
+    void devsoundRecordError(int err);
+
+private:
+   void open();
+   void startRecording();
+   void startDataTransfer();
+   CMMFDataBuffer* currentBuffer() const;
+   void pushData();
+   qint64 read(char *data, qint64 len);
+   void bufferEmptied();
+   Q_INVOKABLE void close();
+
+   qint64 getSamplesRecorded() const;
+
+   void setError(QAudio::Error error);
+   void setState(SymbianAudio::State state);
+
+private:
+    const QByteArray m_device;
+    const QAudioFormat m_format;
+
+    int m_clientBufferSize;
+    int m_notifyInterval;
+    QScopedPointer<QTimer> m_notifyTimer;
+    QTime m_elapsed;
+    QAudio::Error m_error;
+
+    SymbianAudio::State m_internalState;
+    QAudio::State m_externalState;
+
+    bool m_pullMode;
+    QIODevice *m_sink;
+
+    QScopedPointer<QTimer> m_pullTimer;
+
+    SymbianAudio::DevSoundWrapper* m_devSound;
+
+    // Latest buffer provided by DevSound, to be empied of data.
+    CMMFDataBuffer *m_devSoundBuffer;
+
+    int m_devSoundBufferSize;
+
+    // Total amount of data in buffers provided by DevSound
+    int m_totalBytesReady;
+
+    // Queue of buffers returned after call to CMMFDevSound::Pause().
+    QList<CMMFDataBuffer *> m_devSoundBufferQ;
+
+    // Current read position within m_devSoundBuffer
+    qint64 m_devSoundBufferPos;
+
+    // Samples recorded up to the last call to suspend().  It is necessary
+    // to cache this because suspend() is implemented using
+    // CMMFDevSound::Stop(), which resets DevSound's SamplesRecorded() counter.
+    quint32 m_totalSamplesRecorded;
+
+};
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/multimedia/audio/qaudioinput_win32_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_win32_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput_win32_p.cpp	(revision 769)
@@ -57,8 +57,4 @@
 
 //#define DEBUG_AUDIO 1
-
-static CRITICAL_SECTION waveInCriticalSection;
-
-static const int minimumIntervalTime = 50;
 
 QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
@@ -77,8 +73,4 @@
     resuming = false;
     finished = false;
-
-    connect(this,SIGNAL(processMore()),SLOT(deviceReady()));
-
-    InitializeCriticalSection(&waveInCriticalSection);
 }
 
@@ -86,5 +78,4 @@
 {
     stop();
-    DeleteCriticalSection(&waveInCriticalSection);
 }
 
@@ -101,18 +92,16 @@
         return;
 
+    QMutexLocker(&qAudio->mutex);
+
     switch(uMsg) {
         case WIM_OPEN:
             break;
         case WIM_DATA:
-            EnterCriticalSection(&waveInCriticalSection);
             if(qAudio->waveFreeBlockCount > 0)
                 qAudio->waveFreeBlockCount--;
             qAudio->feedback();
-            LeaveCriticalSection(&waveInCriticalSection);
             break;
         case WIM_CLOSE:
-            EnterCriticalSection(&waveInCriticalSection);
             qAudio->finished = true;
-            LeaveCriticalSection(&waveInCriticalSection);
             break;
         default:
@@ -159,5 +148,5 @@
 
     for(int i = 0; i < count; i++) {
-        waveInUnprepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
+        waveInUnprepareHeader(hWaveIn,blocks, sizeof(WAVEHDR));
         blocks+=sizeof(WAVEHDR);
     }
@@ -193,7 +182,9 @@
         pullMode = true;
         audioSource = device;
+        deviceState = QAudio::ActiveState;
     } else {
         //set to push mode
         pullMode = false;
+        deviceState = QAudio::IdleState;
         audioSource = new InputPrivate(this);
         audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
@@ -225,6 +216,6 @@
     header = 0;
     if(buffer_size == 0) {
-        // Default buffer size, 100ms, default period size is 20ms
-        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.1;
+        // Default buffer size, 200ms, default period size is 40ms
+        buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2;
 	period_size = buffer_size/5;
     } else {
@@ -279,7 +270,7 @@
     }
 
-    EnterCriticalSection(&waveInCriticalSection);
+    mutex.lock();
     waveFreeBlockCount = buffer_size/period_size;
-    LeaveCriticalSection(&waveInCriticalSection);
+    mutex.unlock();
 
     waveCurrentBlock = 0;
@@ -307,5 +298,4 @@
     totalTimeValue = 0;
     errorState  = QAudio::NoError;
-    deviceState = QAudio::ActiveState;
     return true;
 }
@@ -316,7 +306,7 @@
         return;
 
+    deviceState = QAudio::StoppedState;
     waveInReset(hWaveIn);
     waveInClose(hWaveIn);
-    deviceState = QAudio::StoppedState;
 
     int count = 0;
@@ -326,11 +316,9 @@
     }
 
-    EnterCriticalSection(&waveInCriticalSection);
-    for(int i=0; i<waveFreeBlockCount; i++) {
-        if(waveBlocks[i].dwFlags & WHDR_PREPARED)
-            waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
-    }
-    LeaveCriticalSection(&waveInCriticalSection);
+    mutex.lock();
+    for(int i=0; i<waveFreeBlockCount; i++)
+        waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
     freeBlocks(waveBlocks);
+    mutex.unlock();
 }
 
@@ -353,5 +341,4 @@
     qint64 l = 0;
     qint64 written = 0;
-
     while(!done) {
         // Read in some audio data
@@ -374,9 +361,10 @@
 
                 } else {
-                    totalTimeValue += waveBlocks[header].dwBytesRecorded
-                        /((settings.channels()*settings.sampleSize()/8))
-                        *10000/settings.frequency()*100;
+                    totalTimeValue += waveBlocks[header].dwBytesRecorded;
                     errorState = QAudio::NoError;
-                    deviceState = QAudio::ActiveState;
+                    if (deviceState != QAudio::ActiveState) {
+                        deviceState = QAudio::ActiveState;
+                        emit stateChanged(deviceState);
+                    }
 		    resuming = false;
                 }
@@ -388,21 +376,23 @@
                 qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
 #endif
-                totalTimeValue += waveBlocks[header].dwBytesRecorded
-                    /((settings.channels()*settings.sampleSize()/8))
-                    *10000/settings.frequency()*100;
+                totalTimeValue += waveBlocks[header].dwBytesRecorded;
                 errorState = QAudio::NoError;
-                deviceState = QAudio::ActiveState;
+                if (deviceState != QAudio::ActiveState) {
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
 		resuming = false;
             }
         } else {
             //no data, not ready yet, next time
-            return 0;
+            break;
         }
 
         waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
 
-        EnterCriticalSection(&waveInCriticalSection);
+        mutex.lock();
         waveFreeBlockCount++;
-        LeaveCriticalSection(&waveInCriticalSection);
+        mutex.unlock();
+
         waveBlocks[header].dwBytesRecorded=0;
         waveBlocks[header].dwFlags = 0L;
@@ -412,7 +402,9 @@
             qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result);
             errorState = QAudio::IOError;
-            EnterCriticalSection(&waveInCriticalSection);
+
+            mutex.lock();
             waveFreeBlockCount--;
-            LeaveCriticalSection(&waveInCriticalSection);
+            mutex.unlock();
+
             return 0;
         }
@@ -421,7 +413,9 @@
             qWarning("QAudioInput: failed to setup block %d,err=%d",header,result);
             errorState = QAudio::IOError;
-            EnterCriticalSection(&waveInCriticalSection);
+
+            mutex.lock();
             waveFreeBlockCount--;
-            LeaveCriticalSection(&waveInCriticalSection);
+            mutex.unlock();
+
             return 0;
         }
@@ -431,5 +425,5 @@
         p+=l;
 
-        EnterCriticalSection(&waveInCriticalSection);
+        mutex.lock();
         if(!pullMode) {
 	    if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
@@ -439,5 +433,5 @@
 	        done = true;
 	}
-        LeaveCriticalSection(&waveInCriticalSection);
+        mutex.unlock();
 
 	written+=l;
@@ -463,7 +457,8 @@
             }
         }
-        EnterCriticalSection(&waveInCriticalSection);
+
+        mutex.lock();
         waveFreeBlockCount = buffer_size/period_size;
-        LeaveCriticalSection(&waveInCriticalSection);
+        mutex.unlock();
 
         waveCurrentBlock = 0;
@@ -493,8 +488,5 @@
 void QAudioInputPrivate::setNotifyInterval(int ms)
 {
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
+    intervalTime = qMax(0, ms);
 }
 
@@ -506,5 +498,11 @@
 qint64 QAudioInputPrivate::processedUSecs() const
 {
-    return totalTimeValue;
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
 }
 
@@ -524,16 +522,18 @@
     qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback() INPUT "<<this;
 #endif
+    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
+        QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
+}
+
+bool QAudioInputPrivate::deviceReady()
+{
     bytesAvailable = bytesReady();
-
-    if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
-        emit processMore();
-}
-
-bool QAudioInputPrivate::deviceReady()
-{
 #ifdef DEBUG_AUDIO
     QTime now(QTime::currentTime());
     qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT";
 #endif
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return true;
+
     if(pullMode) {
         // reads some audio data and writes it to QIODevice
@@ -544,8 +544,6 @@
 	a->trigger();
     }
-    if(deviceState != QAudio::ActiveState)
-        return true;
-
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+
+    if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
         emit notify();
         elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
@@ -578,5 +576,6 @@
 {
     // push mode, user read() called
-    if(audioDevice->deviceState != QAudio::ActiveState)
+    if(audioDevice->deviceState != QAudio::ActiveState &&
+            audioDevice->deviceState != QAudio::IdleState)
         return 0;
     // Read in some audio data
Index: /trunk/src/multimedia/audio/qaudioinput_win32_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudioinput_win32_p.h	(revision 768)
+++ /trunk/src/multimedia/audio/qaudioinput_win32_p.h	(revision 769)
@@ -63,4 +63,5 @@
 #include <QtCore/qstringlist.h>
 #include <QtCore/qdatetime.h>
+#include <QtCore/qmutex.h>
 
 #include <QtMultimedia/qaudio.h>
@@ -123,4 +124,6 @@
     int waveCurrentBlock;
 
+    QMutex mutex;
+
     static void CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
             DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
Index: /trunk/src/multimedia/audio/qaudiooutput.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput.cpp	(revision 769)
@@ -203,4 +203,15 @@
     All that is required is to open the QIODevice.
 
+    If able to successfully output audio data to the systems audio device the
+    state() is set to QAudio::ActiveState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    In either case, the stateChanged() signal may be emitted either synchronously
+    during execution of the start() function or asynchronously after start() has
+    returned to the caller.
+
     \sa QIODevice
 */
@@ -208,11 +219,4 @@
 void QAudioOutput::start(QIODevice* device)
 {
-    /*
-    -If currently not StoppedState, stop.
-    -If previous start was push mode, delete internal QIODevice.
-    -open audio output.
-    -If ok, NoError and ActiveState, else OpenError and StoppedState
-    -emit stateChanged()
-    */
     d->start(device);
 }
@@ -222,4 +226,15 @@
     transfer. This QIODevice can be used to write() audio data directly.
 
+    If able to access the systems audio device the state() is set to
+    QAudio::IdleState, error() is set to QAudio::NoError
+    and the stateChanged() signal is emitted.
+
+    If a problem occurs during this process the error() is set to QAudio::OpenError,
+    state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
+
+    In either case, the stateChanged() signal may be emitted either synchronously
+    during execution of the start() function or asynchronously after start() has
+    returned to the caller.
+
     \sa QIODevice
 */
@@ -227,27 +242,16 @@
 QIODevice* QAudioOutput::start()
 {
-    /*
-    -If currently not StoppedState, stop.
-    -If no internal QIODevice, create one.
-    -open audio output.
-    -If ok, NoError and IdleState, else OpenError and StoppedState
-    -emit stateChanged()
-    -return internal QIODevice
-    */
     return d->start(0);
 }
 
 /*!
-    Stops the audio output.
+    Stops the audio output, detaching from the system resource.
+
+    Sets error() to QAudio::NoError, state() to QAudio::StoppedState and
+    emit stateChanged() signal.
 */
 
 void QAudioOutput::stop()
 {
-    /*
-    -If StoppedState, return
-    -set to StoppedState
-    -detach from audio device
-    -emit stateChanged()
-    */
     d->stop();
 }
@@ -259,8 +263,4 @@
 void QAudioOutput::reset()
 {
-    /*
-    -drop all buffered audio, set buffers to zero.
-    -call stop()
-    */
     d->reset();
 }
@@ -268,14 +268,11 @@
 /*!
     Stops processing audio data, preserving buffered audio data.
+
+    Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and
+    emit stateChanged() signal.
 */
 
 void QAudioOutput::suspend()
 {
-    /*
-    -If not ActiveState|IdleState, return
-    -stop processing audio, saving all buffered audio data
-    -set NoError and SuspendedState
-    -emit stateChanged()
-    */
     d->suspend();
 }
@@ -283,16 +280,15 @@
 /*!
     Resumes processing audio data after a suspend().
+
+    Sets error() to QAudio::NoError.
+    Sets state() to QAudio::ActiveState if you previously called start(QIODevice*).
+    Sets state() to QAudio::IdleState if you previously called start().
+    emits stateChanged() signal.
+
+    Note: signal will always be emitted during execution of the resume() function.
 */
 
 void QAudioOutput::resume()
 {
-    /*
-    -If SuspendedState, return
-    -resume audio
-    -(PULL MODE): set ActiveState, NoError
-    -(PUSH MODE): set IdleState, NoError
-    -kick start audio if needed
-    -emit stateChanged()
-    */
      d->resume();
 }
@@ -300,12 +296,11 @@
 /*!
     Returns the free space available in bytes in the audio buffer.
+
+    NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState
+    state, otherwise returns zero.
 */
 
 int QAudioOutput::bytesFree() const
 {
-    /*
-    -If not ActiveState|IdleState, return 0
-    -return space available in audio buffer in bytes
-    */
     return d->bytesFree();
 }
@@ -354,5 +349,8 @@
     Sets the interval for notify() signal to be emitted.
     This is based on the \a ms of audio data processed
-    not on actual real-time. The resolution of the timer is platform specific.
+    not on actual real-time.
+    The minimum resolution of the timer is platform specific and values
+    should be checked with notifyInterval() to confirm actual value
+    being used.
 */
 
@@ -372,6 +370,15 @@
 
 /*!
-    Returns the amount of audio data processed since start()
+    Returns the amount of audio data processed by the class since start()
     was called in microseconds.
+
+    Note: The amount of audio data played can be determined by subtracting
+    the microseconds of audio data still in the systems audio buffer.
+
+    \code
+    qint64 bytesInBuffer = bufferSize() - bytesFree();
+    qint64 usInBuffer = (qint64)(1000000) * bytesInBuffer / ( channels() * sampleSize() / 8 ) / frequency();
+    qint64 usPlayed = processedUSecs() - usInBuffer;
+    \endcode
 */
 
Index: /trunk/src/multimedia/audio/qaudiooutput_alsa_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_alsa_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput_alsa_p.cpp	(revision 769)
@@ -59,6 +59,4 @@
 //#define DEBUG_AUDIO 1
 
-static const int minimumIntervalTime = 50;
-
 QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
     settings(audioFormat)
@@ -85,6 +83,5 @@
     opened = false;
 
-    QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":"));
-    m_device = QByteArray(list1.at(0).toLocal8Bit().constData());
+    m_device = device;
 
     timer = new QTimer(this);
@@ -260,4 +257,5 @@
     if(deviceState == QAudio::StoppedState)
         return;
+    errorState = QAudio::NoError;
     deviceState = QAudio::StoppedState;
     close();
@@ -282,9 +280,9 @@
     unsigned int freakuency=settings.frequency();
 
-    QString dev = QLatin1String(m_device.constData());
+    QString dev = QString(QLatin1String(m_device.constData()));
     QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
     if(dev.compare(QLatin1String("default")) == 0) {
 #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-        dev = QLatin1String(devices.first().constData());
+        dev = QLatin1String(devices.first());
 #else
         dev = QLatin1String("hw:0,0");
@@ -369,8 +367,50 @@
     }
     if ( !fatal ) {
+        unsigned int maxBufferTime = 0;
+        unsigned int minBufferTime = 0;
+        unsigned int maxPeriodTime = 0;
+        unsigned int minPeriodTime = 0;
+
+        err = snd_pcm_hw_params_get_buffer_time_max(hwparams, &maxBufferTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_buffer_time_min(hwparams, &minBufferTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_period_time_max(hwparams, &maxPeriodTime, &dir);
+        if ( err >= 0)
+            err = snd_pcm_hw_params_get_period_time_min(hwparams, &minPeriodTime, &dir);
+
+        if ( err < 0 ) {
+            fatal = true;
+            errMessage = QString::fromLatin1("QAudioOutput: buffer/period min and max: err = %1").arg(err);
+        } else {
+            if (maxBufferTime < buffer_time || buffer_time < minBufferTime || maxPeriodTime < period_time || minPeriodTime > period_time) {
+#ifdef DEBUG_AUDIO
+                qDebug()<<"defaults out of range";
+                qDebug()<<"pmin="<<minPeriodTime<<", pmax="<<maxPeriodTime<<", bmin="<<minBufferTime<<", bmax="<<maxBufferTime;
+#endif
+                period_time = minPeriodTime;
+                if (period_time*4 <= maxBufferTime) {
+                    // Use 4 periods if possible
+                    buffer_time = period_time*4;
+                    chunks = 4;
+                } else if (period_time*2 <= maxBufferTime) {
+                    // Use 2 periods if possible
+                    buffer_time = period_time*2;
+                    chunks = 2;
+                } else {
+                    qWarning()<<"QAudioOutput: alsa only supports single period!";
+                    fatal = true;
+                }
+#ifdef DEBUG_AUDIO
+                qDebug()<<"used: buffer_time="<<buffer_time<<", period_time="<<period_time;
+#endif
+            }
+        }
+    }
+    if ( !fatal ) {
         err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir);
         if ( err < 0 ) {
             fatal = true;
-                errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
+            errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err);
         }
     }
@@ -443,5 +483,4 @@
 void QAudioOutputPrivate::close()
 {
-    deviceState = QAudio::StoppedState;
     timer->stop();
 
@@ -495,8 +534,11 @@
     }
     if(err > 0) {
-        totalTimeValue += err*1000000/settings.frequency();
+        totalTimeValue += err;
         resuming = false;
         errorState = QAudio::NoError;
-        deviceState = QAudio::ActiveState;
+        if (deviceState != QAudio::ActiveState) {
+            deviceState = QAudio::ActiveState;
+            emit stateChanged(deviceState);
+        }
         return snd_pcm_frames_to_bytes( handle, err );
     } else
@@ -530,8 +572,5 @@
 void QAudioOutputPrivate::setNotifyInterval(int ms)
 {
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
+    intervalTime = qMax(0, ms);
 }
 
@@ -543,5 +582,5 @@
 qint64 QAudioOutputPrivate::processedUSecs() const
 {
-    return totalTimeValue;
+    return qint64(1000000) * totalTimeValue / settings.frequency();
 }
 
@@ -563,8 +602,6 @@
         }
         resuming = true;
-        if(pullMode)
-            deviceState = QAudio::ActiveState;
-        else
-            deviceState = QAudio::IdleState;
+
+        deviceState = QAudio::ActiveState;
 
         errorState = QAudio::NoError;
@@ -605,6 +642,7 @@
 void QAudioOutputPrivate::feedback()
 {
-    QMetaObject::invokeMethod(this, SLOT(updateAvailable()), Qt::QueuedConnection);
-}
+    updateAvailable();
+}
+
 
 void QAudioOutputPrivate::updateAvailable()
@@ -638,5 +676,7 @@
             if(deviceState != QAudio::ActiveState)
                 return true;
-            write(audioBuffer,l);
+            qint64 bytesWritten = write(audioBuffer,l);
+            if (bytesWritten != l)
+                audioSource->seek(audioSource->pos()-(l-bytesWritten));
             bytesAvailable = bytesFree();
 
@@ -646,21 +686,33 @@
             if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
                 // Underrun
+                if (deviceState != QAudio::IdleState) {
+                    errorState = QAudio::UnderrunError;
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            }
+
+        } else if(l < 0) {
+            close();
+            deviceState = QAudio::StoppedState;
+            errorState = QAudio::IOError;
+            emit stateChanged(deviceState);
+        }
+    } else {
+        bytesAvailable = bytesFree();
+        if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) {
+            // Underrun
+            if (deviceState != QAudio::IdleState) {
                 errorState = QAudio::UnderrunError;
                 deviceState = QAudio::IdleState;
                 emit stateChanged(deviceState);
             }
-
-        } else if(l < 0) {
-            close();
-            errorState = QAudio::IOError;
-            emit stateChanged(deviceState);
-        }
-    } else
-        bytesAvailable = bytesFree();
+        }
+    }
 
     if(deviceState != QAudio::ActiveState)
         return true;
 
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+    if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
         emit notify();
         elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
@@ -672,33 +724,8 @@
 qint64 QAudioOutputPrivate::elapsedUSecs() const
 {
-    if(!handle)
-        return 0;
-
     if (deviceState == QAudio::StoppedState)
         return 0;
 
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
-    snd_pcm_status_t* status;
-    snd_pcm_status_alloca(&status);
-
-    snd_timestamp_t t1,t2;
-    if( snd_pcm_status(handle, status) >= 0) {
-        snd_pcm_status_get_tstamp(status,&t1);
-        snd_pcm_status_get_trigger_tstamp(status,&t2);
-        t1.tv_sec-=t2.tv_sec;
-
-        signed long l = (signed long)t1.tv_usec - (signed long)t2.tv_usec;
-        if(l < 0) {
-            t1.tv_sec--;
-            l = -l;
-            l %= 1000000;
-        }
-        return ((t1.tv_sec * 1000000)+l);
-    } else
-        return 0;
-#else
     return clockStamp.elapsed()*1000;
-#endif
-    return 0;
 }
 
Index: /trunk/src/multimedia/audio/qaudiooutput_mac_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_mac_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput_mac_p.cpp	(revision 769)
@@ -71,5 +71,5 @@
 
 
-namespace
+namespace QtMultimediaInternal
 {
 
@@ -238,5 +238,5 @@
 
 public:
-    MacOutputDevice(QAudioOutputBuffer* audioBuffer, QObject* parent):
+    MacOutputDevice(QtMultimediaInternal::QAudioOutputBuffer* audioBuffer, QObject* parent):
         QIODevice(parent),
         m_audioBuffer(audioBuffer)
@@ -264,5 +264,5 @@
 
 private:
-    QAudioOutputBuffer*    m_audioBuffer;
+    QtMultimediaInternal::QAudioOutputBuffer*    m_audioBuffer;
 };
 
@@ -286,5 +286,5 @@
         totalFrames = 0;
         audioBuffer = 0;
-        internalBufferSize = default_buffer_size;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
         clockFrequency = AudioGetHostClockFrequency() / 1000;
         errorCode = QAudio::NoError;
@@ -400,5 +400,5 @@
         internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
 
-    audioBuffer = new QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
+    audioBuffer = new QtMultimediaInternal::QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
     connect(audioBuffer, SIGNAL(readyRead()), SLOT(inputReady()));  // Pull
 
@@ -436,5 +436,5 @@
     QIODevice*  op = device;
 
-    if (!open()) {
+    if (!audioFormat.isValid() || !open()) {
         stateCode = QAudio::StoppedState;
         errorCode = QAudio::OpenError;
@@ -537,4 +537,10 @@
 void QAudioOutputPrivate::setNotifyInterval(int milliSeconds)
 {
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
     intervalTimer->setInterval(milliSeconds);
 }
@@ -623,5 +629,6 @@
 {
     audioBuffer->startFillTimer();
-    intervalTimer->start();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
 }
 
Index: /trunk/src/multimedia/audio/qaudiooutput_mac_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_mac_p.h	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput_mac_p.h	(revision 769)
@@ -75,5 +75,5 @@
 class QIODevice;
 
-namespace
+namespace QtMultimediaInternal
 {
 class QAudioOutputBuffer;
@@ -97,5 +97,5 @@
     AudioStreamBasicDescription deviceFormat;
     AudioStreamBasicDescription streamFormat;
-    QAudioOutputBuffer*   audioBuffer;
+    QtMultimediaInternal::QAudioOutputBuffer*   audioBuffer;
     QAtomicInt      audioThreadState;
     QWaitCondition  threadFinished;
Index: /trunk/src/multimedia/audio/qaudiooutput_symbian_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_symbian_p.cpp	(revision 769)
+++ /trunk/src/multimedia/audio/qaudiooutput_symbian_p.cpp	(revision 769)
@@ -0,0 +1,646 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudiooutput_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+//-----------------------------------------------------------------------------
+// Constants
+//-----------------------------------------------------------------------------
+
+const int UnderflowTimerInterval = 50; // ms
+
+
+//-----------------------------------------------------------------------------
+// Private class
+//-----------------------------------------------------------------------------
+
+SymbianAudioOutputPrivate::SymbianAudioOutputPrivate(
+                               QAudioOutputPrivate *audioDevice)
+    :   m_audioDevice(audioDevice)
+{
+
+}
+
+SymbianAudioOutputPrivate::~SymbianAudioOutputPrivate()
+{
+
+}
+
+qint64 SymbianAudioOutputPrivate::readData(char *data, qint64 len)
+{
+    Q_UNUSED(data)
+    Q_UNUSED(len)
+    return 0;
+}
+
+qint64 SymbianAudioOutputPrivate::writeData(const char *data, qint64 len)
+{
+    qint64 totalWritten = 0;
+
+    if (m_audioDevice->state() == QAudio::ActiveState ||
+        m_audioDevice->state() == QAudio::IdleState) {
+
+        while (totalWritten < len) {
+            const qint64 written = m_audioDevice->pushData(data + totalWritten,
+                                                           len - totalWritten);
+            if (written > 0)
+                totalWritten += written;
+            else
+                break;
+        }
+    }
+
+    return totalWritten;
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device,
+                                       const QAudioFormat &format)
+    :   m_device(device)
+    ,   m_format(format)
+    ,   m_clientBufferSize(SymbianAudio::DefaultBufferSize)
+    ,   m_notifyInterval(SymbianAudio::DefaultNotifyInterval)
+    ,   m_notifyTimer(new QTimer(this))
+    ,   m_error(QAudio::NoError)
+    ,   m_internalState(SymbianAudio::ClosedState)
+    ,   m_externalState(QAudio::StoppedState)
+    ,   m_pullMode(false)
+    ,   m_source(0)
+    ,   m_devSound(0)
+    ,   m_devSoundBuffer(0)
+    ,   m_devSoundBufferSize(0)
+    ,   m_bytesWritten(0)
+    ,   m_pushDataReady(false)
+    ,   m_bytesPadding(0)
+    ,   m_underflow(false)
+    ,   m_lastBuffer(false)
+    ,   m_underflowTimer(new QTimer(this))
+    ,   m_samplesPlayed(0)
+    ,   m_totalSamplesPlayed(0)
+{
+    qRegisterMetaType<CMMFBuffer *>("CMMFBuffer *");
+
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    m_underflowTimer->setInterval(UnderflowTimerInterval);
+    connect(m_underflowTimer.data(), SIGNAL(timeout()), this,
+            SLOT(underflowTimerExpired()));
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    close();
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice *device)
+{
+    stop();
+
+    if (device) {
+        m_pullMode = true;
+        m_source = device;
+    }
+
+    open();
+
+    if (SymbianAudio::ClosedState != m_internalState) {
+        if (device) {
+            connect(m_source, SIGNAL(readyRead()), this, SLOT(dataReady()));
+        } else {
+            m_source = new SymbianAudioOutputPrivate(this);
+            m_source->open(QIODevice::WriteOnly | QIODevice::Unbuffered);
+        }
+
+        m_elapsed.restart();
+    }
+
+    return m_source;
+}
+
+void QAudioOutputPrivate::stop()
+{
+    close();
+}
+
+void QAudioOutputPrivate::reset()
+{
+    m_totalSamplesPlayed += getSamplesPlayed();
+    m_devSound->stop();
+    m_bytesPadding = 0;
+    startPlayback();
+}
+
+void QAudioOutputPrivate::suspend()
+{
+    if (SymbianAudio::ActiveState == m_internalState
+        || SymbianAudio::IdleState == m_internalState) {
+        m_notifyTimer->stop();
+        m_underflowTimer->stop();
+
+        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
+                                          m_format, m_bytesWritten);
+
+        const qint64 samplesPlayed = getSamplesPlayed();
+
+        m_bytesWritten = 0;
+
+        // CMMFDevSound::Pause() is not guaranteed to work correctly in all
+        // implementations, for play-mode DevSound sessions.  We therefore
+        // have to implement suspend() by calling CMMFDevSound::Stop().
+        // Because this causes buffered data to be dropped, we replace the
+        // lost data with silence following a call to resume(), in order to
+        // ensure that processedUSecs() returns the correct value.
+        m_devSound->stop();
+        m_totalSamplesPlayed += samplesPlayed;
+
+        // Calculate the amount of data dropped
+        const qint64 paddingSamples = samplesWritten - samplesPlayed;
+        Q_ASSERT(paddingSamples >= 0);
+        m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
+                                                             paddingSamples);
+
+        setState(SymbianAudio::SuspendedState);
+    }
+}
+
+void QAudioOutputPrivate::resume()
+{
+    if (SymbianAudio::SuspendedState == m_internalState) {
+        if (!m_pullMode && m_devSoundBuffer && m_devSoundBuffer->Data().Length())
+            bufferFilled();
+        startPlayback();
+    }
+}
+
+int QAudioOutputPrivate::bytesFree() const
+{
+    int result = 0;
+    if (m_devSoundBuffer) {
+        const TDes8 &outputBuffer = m_devSoundBuffer->Data();
+        result = outputBuffer.MaxLength() - outputBuffer.Length();
+    }
+    return result;
+}
+
+int QAudioOutputPrivate::periodSize() const
+{
+    return bufferSize();
+}
+
+void QAudioOutputPrivate::setBufferSize(int value)
+{
+    // Note that DevSound does not allow its client to specify the buffer size.
+    // This functionality is available via custom interfaces, but since these
+    // cannot be guaranteed to work across all DevSound implementations, we
+    // do not use them here.
+    // In order to comply with the expected bevahiour of QAudioOutput, we store
+    // the value and return it from bufferSize(), but the underlying DevSound
+    // buffer size remains unchanged.
+    if (value > 0)
+        m_clientBufferSize = value;
+}
+
+int QAudioOutputPrivate::bufferSize() const
+{
+    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
+}
+
+void QAudioOutputPrivate::setNotifyInterval(int ms)
+{
+    if (ms >= 0) {
+        const int oldNotifyInterval = m_notifyInterval;
+        m_notifyInterval = ms;
+        if (m_notifyInterval && (SymbianAudio::ActiveState == m_internalState ||
+                                 SymbianAudio::IdleState == m_internalState))
+            m_notifyTimer->start(m_notifyInterval);
+        else
+            m_notifyTimer->stop();
+    }
+}
+
+int QAudioOutputPrivate::notifyInterval() const
+{
+    return m_notifyInterval;
+}
+
+qint64 QAudioOutputPrivate::processedUSecs() const
+{
+    int samplesPlayed = 0;
+    if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+        samplesPlayed = getSamplesPlayed();
+
+    // Protect against division by zero
+    Q_ASSERT_X(m_format.frequency() > 0, Q_FUNC_INFO, "Invalid frequency");
+
+    const qint64 result = qint64(1000000) *
+                          (samplesPlayed + m_totalSamplesPlayed)
+                        / m_format.frequency();
+
+    return result;
+}
+
+qint64 QAudioOutputPrivate::elapsedUSecs() const
+{
+    const qint64 result = (QAudio::StoppedState == state()) ?
+                              0 : m_elapsed.elapsed() * 1000;
+    return result;
+}
+
+QAudio::Error QAudioOutputPrivate::error() const
+{
+    return m_error;
+}
+
+QAudio::State QAudioOutputPrivate::state() const
+{
+    return m_externalState;
+}
+
+QAudioFormat QAudioOutputPrivate::format() const
+{
+    return m_format;
+}
+
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void QAudioOutputPrivate::dataReady()
+{
+    // Client-provided QIODevice has data ready to read.
+
+    Q_ASSERT_X(m_source->bytesAvailable(), Q_FUNC_INFO,
+        "readyRead signal received, but no data available");
+
+    if (!m_bytesPadding)
+        pullData();
+}
+
+void QAudioOutputPrivate::underflowTimerExpired()
+{
+    const TInt samplesPlayed = getSamplesPlayed();
+    if (m_samplesPlayed && (samplesPlayed == m_samplesPlayed)) {
+        setError(QAudio::UnderrunError);
+    } else {
+        m_samplesPlayed = samplesPlayed;
+        m_underflowTimer->start();
+    }
+}
+
+void QAudioOutputPrivate::devsoundInitializeComplete(int err)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (!err && m_devSound->isFormatSupported(m_format))
+        startPlayback();
+    else
+        setError(QAudio::OpenError);
+}
+
+void QAudioOutputPrivate::devsoundBufferToBeFilled(CMMFBuffer *bufferBase)
+{
+    // Following receipt of this signal, DevSound should not provide another
+    // buffer until we have returned the current one.
+    Q_ASSERT_X(!m_devSoundBuffer, Q_FUNC_INFO, "Buffer already held");
+
+    // Will be returned to DevSoundWrapper by bufferProcessed().
+    m_devSoundBuffer = static_cast<CMMFDataBuffer*>(bufferBase);
+
+    if (!m_devSoundBufferSize)
+        m_devSoundBufferSize = m_devSoundBuffer->Data().MaxLength();
+
+    writePaddingData();
+
+    if (m_pullMode && isDataReady() && !m_bytesPadding)
+        pullData();
+}
+
+void QAudioOutputPrivate::devsoundPlayError(int err)
+{
+    switch (err) {
+    case KErrUnderflow:
+        m_underflow = true;
+        if (m_pullMode && !m_lastBuffer)
+            setError(QAudio::UnderrunError);
+        else
+            setState(SymbianAudio::IdleState);
+        break;
+    default:
+        setError(QAudio::IOError);
+        break;
+    }
+}
+
+void QAudioOutputPrivate::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    Q_ASSERT(!m_devSound);
+    m_devSound = new SymbianAudio::DevSoundWrapper(QAudio::AudioOutput, this);
+
+    connect(m_devSound, SIGNAL(initializeComplete(int)),
+            this, SLOT(devsoundInitializeComplete(int)));
+    connect(m_devSound, SIGNAL(bufferToBeProcessed(CMMFBuffer *)),
+            this, SLOT(devsoundBufferToBeFilled(CMMFBuffer *)));
+    connect(m_devSound, SIGNAL(processingError(int)),
+            this, SLOT(devsoundPlayError(int)));
+
+    setState(SymbianAudio::InitializingState);
+    m_devSound->initialize(m_format.codec());
+}
+
+void QAudioOutputPrivate::startPlayback()
+{
+    bool ok = m_devSound->setFormat(m_format);
+    if (ok)
+        ok = m_devSound->start();
+
+    if (ok) {
+        if (isDataReady())
+            setState(SymbianAudio::ActiveState);
+        else
+            setState(SymbianAudio::IdleState);
+
+        if (m_notifyInterval)
+            m_notifyTimer->start(m_notifyInterval);
+        m_underflow = false;
+
+        Q_ASSERT(m_devSound->samplesProcessed() == 0);
+
+        writePaddingData();
+
+        if (m_pullMode && m_source->bytesAvailable() && !m_bytesPadding)
+            dataReady();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioOutputPrivate::writePaddingData()
+{
+    // See comments in suspend()
+
+    while (m_devSoundBuffer && m_bytesPadding) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+        const qint64 outputBytes = bytesFree();
+        const qint64 paddingBytes = outputBytes < m_bytesPadding ?
+                                        outputBytes : m_bytesPadding;
+        unsigned char *ptr = const_cast<unsigned char*>(outputBuffer.Ptr());
+        Mem::FillZ(ptr, paddingBytes);
+        outputBuffer.SetLength(outputBuffer.Length() + paddingBytes);
+        m_bytesPadding -= paddingBytes;
+        Q_ASSERT(m_bytesPadding >= 0);
+
+        if (m_pullMode && m_source->atEnd())
+            lastBufferFilled();
+        if ((paddingBytes == outputBytes) || !m_bytesPadding)
+            bufferFilled();
+    }
+}
+
+qint64 QAudioOutputPrivate::pushData(const char *data, qint64 len)
+{
+    // Data has been written to SymbianAudioOutputPrivate
+
+    Q_ASSERT_X(!m_pullMode, Q_FUNC_INFO,
+        "pushData called when in pull mode");
+
+    const unsigned char *const inputPtr =
+        reinterpret_cast<const unsigned char*>(data);
+    qint64 bytesWritten = 0;
+
+    if (SymbianAudio::IdleState == m_internalState)
+        setState(SymbianAudio::ActiveState);
+
+    while (m_devSoundBuffer && (bytesWritten < len)) {
+        // writePaddingData() is called from BufferToBeFilled(), so we should
+        // never have any padding data left at this point.
+        Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
+            "Padding bytes remaining in pushData");
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+
+        const qint64 outputBytes = bytesFree();
+        const qint64 inputBytes = len - bytesWritten;
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        outputBuffer.Append(inputPtr + bytesWritten, copyBytes);
+        bytesWritten += copyBytes;
+
+        bufferFilled();
+    }
+
+    m_pushDataReady = (bytesWritten < len);
+
+    // If DevSound is still initializing (m_internalState == InitializingState),
+    // we cannot transition m_internalState to ActiveState, but we must emit
+    // an (external) state change from IdleState to ActiveState.  The following
+    // call triggers this signal.
+    setState(m_internalState);
+
+    return bytesWritten;
+}
+
+void QAudioOutputPrivate::pullData()
+{
+    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
+        "pullData called when in push mode");
+
+    // writePaddingData() is called by BufferToBeFilled() before pullData(),
+    // so we should never have any padding data left at this point.
+    Q_ASSERT_X(0 == m_bytesPadding, Q_FUNC_INFO,
+        "Padding bytes remaining in pullData");
+
+    qint64 inputBytes = m_source->bytesAvailable();
+    while (m_devSoundBuffer && inputBytes) {
+        if (SymbianAudio::IdleState == m_internalState)
+            setState(SymbianAudio::ActiveState);
+
+        TDes8 &outputBuffer = m_devSoundBuffer->Data();
+
+        const qint64 outputBytes = bytesFree();
+        const qint64 copyBytes = outputBytes < inputBytes ?
+                                     outputBytes : inputBytes;
+
+        char *outputPtr = (char*)(outputBuffer.Ptr() + outputBuffer.Length());
+        const qint64 bytesCopied = m_source->read(outputPtr, copyBytes);
+        Q_ASSERT(bytesCopied == copyBytes);
+        outputBuffer.SetLength(outputBuffer.Length() + bytesCopied);
+        inputBytes -= bytesCopied;
+
+        if (m_source->atEnd())
+            lastBufferFilled();
+        else if (copyBytes == outputBytes)
+            bufferFilled();
+    }
+}
+
+void QAudioOutputPrivate::bufferFilled()
+{
+    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to return");
+
+    const TDes8 &outputBuffer = m_devSoundBuffer->Data();
+    m_bytesWritten += outputBuffer.Length();
+
+    m_devSoundBuffer = 0;
+
+    m_samplesPlayed = getSamplesPlayed();
+    m_underflowTimer->start();
+
+    if (QAudio::UnderrunError == m_error)
+        m_error = QAudio::NoError;
+
+    m_devSound->bufferProcessed();
+}
+
+void QAudioOutputPrivate::lastBufferFilled()
+{
+    Q_ASSERT_X(m_devSoundBuffer, Q_FUNC_INFO, "No buffer to fill");
+    Q_ASSERT_X(!m_lastBuffer, Q_FUNC_INFO, "Last buffer already sent");
+    m_lastBuffer = true;
+    m_devSoundBuffer->SetLastBuffer(ETrue);
+    bufferFilled();
+}
+
+void QAudioOutputPrivate::close()
+{
+    m_notifyTimer->stop();
+    m_underflowTimer->stop();
+
+    m_error = QAudio::NoError;
+
+    if (m_devSound)
+        m_devSound->stop();
+    delete m_devSound;
+    m_devSound = 0;
+
+    m_devSoundBuffer = 0;
+    m_devSoundBufferSize = 0;
+
+    if (!m_pullMode) // m_source is owned
+        delete m_source;
+    m_pullMode = false;
+    m_source = 0;
+
+    m_bytesWritten = 0;
+    m_pushDataReady = false;
+    m_bytesPadding = 0;
+    m_underflow = false;
+    m_lastBuffer = false;
+    m_samplesPlayed = 0;
+    m_totalSamplesPlayed = 0;
+
+    setState(SymbianAudio::ClosedState);
+}
+
+qint64 QAudioOutputPrivate::getSamplesPlayed() const
+{
+    qint64 result = 0;
+    if (m_devSound) {
+        const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
+                                          m_format, m_bytesWritten);
+
+        if (m_underflow) {
+            result = samplesWritten;
+        } else {
+            // This is necessary because some DevSound implementations report
+            // that they have played more data than has actually been provided to them
+            // by the client.
+            const qint64 devSoundSamplesPlayed(m_devSound->samplesProcessed());
+            result = qMin(devSoundSamplesPlayed, samplesWritten);
+        }
+    }
+    return result;
+}
+
+void QAudioOutputPrivate::setError(QAudio::Error error)
+{
+    m_error = error;
+
+    // Although no state transition actually occurs here, a stateChanged event
+    // must be emitted to inform the client that the call to start() was
+    // unsuccessful.
+    if (QAudio::OpenError == error) {
+        emit stateChanged(QAudio::StoppedState);
+    } else {
+        if (QAudio::UnderrunError == error)
+            setState(SymbianAudio::IdleState);
+        else
+            // Close the DevSound instance.  This causes a transition to
+            // StoppedState.  This must be done asynchronously in case the
+            // current function was called from a DevSound event handler, in which
+            // case deleting the DevSound instance may cause an exception.
+            QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);
+    }
+}
+
+void QAudioOutputPrivate::setState(SymbianAudio::State newInternalState)
+{
+    const QAudio::State oldExternalState = m_externalState;
+    m_internalState = newInternalState;
+    m_externalState = SymbianAudio::Utils::stateNativeToQt(m_internalState);
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+bool QAudioOutputPrivate::isDataReady() const
+{
+    return (m_source && m_source->bytesAvailable())
+        ||  m_bytesPadding
+        ||  m_pushDataReady;
+}
+
+QT_END_NAMESPACE
Index: /trunk/src/multimedia/audio/qaudiooutput_symbian_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_symbian_p.h	(revision 769)
+++ /trunk/src/multimedia/audio/qaudiooutput_symbian_p.h	(revision 769)
@@ -0,0 +1,198 @@
+/****************************************************************************
+**
+** 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 QtMultimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists for the convenience
+// of other Qt classes.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QAUDIOOUTPUT_SYMBIAN_P_H
+#define QAUDIOOUTPUT_SYMBIAN_P_H
+
+#include <QtMultimedia/qaudioengine.h>
+#include <QTime>
+#include <QTimer>
+#include <sounddevice.h>
+#include "qaudio_symbian_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QAudioOutputPrivate;
+
+class SymbianAudioOutputPrivate : public QIODevice
+{
+    friend class QAudioOutputPrivate;
+    Q_OBJECT
+public:
+    SymbianAudioOutputPrivate(QAudioOutputPrivate *audio);
+    ~SymbianAudioOutputPrivate();
+
+    qint64 readData(char *data, qint64 len);
+    qint64 writeData(const char *data, qint64 len);
+
+private:
+    QAudioOutputPrivate *const m_audioDevice;
+};
+
+class QAudioOutputPrivate
+    :   public QAbstractAudioOutput
+{
+    friend class SymbianAudioOutputPrivate;
+    Q_OBJECT
+public:
+    QAudioOutputPrivate(const QByteArray &device,
+                       const QAudioFormat &audioFormat);
+    ~QAudioOutputPrivate();
+
+    // QAbstractAudioOutput
+    QIODevice* start(QIODevice *device = 0);
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    int bytesFree() const;
+    int periodSize() const;
+    void setBufferSize(int value);
+    int bufferSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+    QAudioFormat format() const;
+
+private slots:
+    void dataReady();
+    void underflowTimerExpired();
+    void devsoundInitializeComplete(int err);
+    void devsoundBufferToBeFilled(CMMFBuffer *);
+    void devsoundPlayError(int err);
+
+private:
+   void open();
+   void startPlayback();
+   void writePaddingData();
+   qint64 pushData(const char *data, qint64 len);
+   void pullData();
+   void bufferFilled();
+   void lastBufferFilled();
+   Q_INVOKABLE void close();
+
+   qint64 getSamplesPlayed() const;
+
+   void setError(QAudio::Error error);
+   void setState(SymbianAudio::State state);
+
+   bool isDataReady() const;
+
+private:
+    const QByteArray m_device;
+    const QAudioFormat m_format;
+
+    int m_clientBufferSize;
+    int m_notifyInterval;
+    QScopedPointer<QTimer> m_notifyTimer;
+    QTime m_elapsed;
+    QAudio::Error m_error;
+
+    SymbianAudio::State m_internalState;
+    QAudio::State m_externalState;
+
+    bool m_pullMode;
+    QIODevice *m_source;
+
+    SymbianAudio::DevSoundWrapper* m_devSound;
+
+    // Buffer provided by DevSound, to be filled with data.
+    CMMFDataBuffer *m_devSoundBuffer;
+
+    int m_devSoundBufferSize;
+
+    // Number of bytes transferred from QIODevice to QAudioOutput.  It is
+    // necessary to count this because data is dropped when suspend() is
+    // called.  The difference between the position reported by DevSound and
+    // this value allows us to calculate m_bytesPadding;
+    quint32 m_bytesWritten;
+
+    // True if client has provided data while the audio subsystem was not
+    // ready to consume it.
+    bool m_pushDataReady;
+
+    // Number of zero bytes which will be written when client calls resume().
+    quint32 m_bytesPadding;
+
+    // True if PlayError(KErrUnderflow) has been called.
+    bool m_underflow;
+
+    // True if a buffer marked with the "last buffer" flag has been provided
+    // to DevSound.
+    bool m_lastBuffer;
+
+    // Some DevSound implementations ignore all underflow errors raised by the
+    // audio driver, unless the last buffer flag has been set by the client.
+    // In push-mode playback, this flag will never be set, so the underflow
+    // error will never be reported.  In order to work around this, a timer
+    // is used, which gets reset every time the client provides more data.  If
+    // the timer expires, an underflow error is raised by this object.
+    QScopedPointer<QTimer> m_underflowTimer;
+
+    // Result of previous call to CMMFDevSound::SamplesPlayed().  This value is
+    // used to determine whether, when m_underflowTimer expires, an
+    // underflow error has actually occurred.
+    quint32 m_samplesPlayed;
+
+    // Samples played up to the last call to suspend().  It is necessary
+    // to cache this because suspend() is implemented using
+    // CMMFDevSound::Stop(), which resets DevSound's SamplesPlayed() counter.
+    quint32 m_totalSamplesPlayed;
+
+};
+
+QT_END_NAMESPACE
+
+#endif
Index: /trunk/src/multimedia/audio/qaudiooutput_win32_p.cpp
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_win32_p.cpp	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput_win32_p.cpp	(revision 769)
@@ -56,8 +56,4 @@
 
 QT_BEGIN_NAMESPACE
-
-static CRITICAL_SECTION waveOutCriticalSection;
-
-static const int minimumIntervalTime = 50;
 
 QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
@@ -76,15 +72,13 @@
     pullMode = true;
     finished = false;
-    InitializeCriticalSection(&waveOutCriticalSection);
 }
 
 QAudioOutputPrivate::~QAudioOutputPrivate()
 {
-    EnterCriticalSection(&waveOutCriticalSection);
+    mutex.lock();
     finished = true;
-    LeaveCriticalSection(&waveOutCriticalSection);
+    mutex.unlock();
 
     close();
-    DeleteCriticalSection(&waveOutCriticalSection);
 }
 
@@ -100,4 +94,6 @@
     if(!qAudio)
         return;
+
+    QMutexLocker(&qAudio->mutex);
 
     switch(uMsg) {
@@ -108,7 +104,5 @@
             return;
         case WOM_DONE:
-            EnterCriticalSection(&waveOutCriticalSection);
             if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) {
-                LeaveCriticalSection(&waveOutCriticalSection);
                 return;
 	    }
@@ -117,5 +111,4 @@
                 qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size;
             qAudio->feedback();
-            LeaveCriticalSection(&waveOutCriticalSection);
             break;
         default:
@@ -153,5 +146,5 @@
 
     for(int i = 0; i < count; i++) {
-        waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR));
+        waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR));
         blocks+=sizeof(WAVEHDR);
     }
@@ -212,4 +205,11 @@
     qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
 #endif
+    if (!(settings.frequency() >= 8000 && settings.frequency() <= 48000)) {
+        errorState = QAudio::OpenError;
+        deviceState = QAudio::StoppedState;
+        emit stateChanged(deviceState);
+        qWarning("QAudioOutput: open error, frequency out of range.");
+        return false;
+    }
     if(buffer_size == 0) {
         // Default buffer size, 200ms, default period size is 40ms
@@ -221,7 +221,7 @@
     waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
 
-    EnterCriticalSection(&waveOutCriticalSection);
+    mutex.lock();
     waveFreeBlockCount = buffer_size/period_size;
-    LeaveCriticalSection(&waveOutCriticalSection);
+    mutex.unlock();
 
     waveCurrentBlock = 0;
@@ -290,4 +290,5 @@
 
     deviceState = QAudio::StoppedState;
+    errorState = QAudio::NoError;
     int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
                   *settings.channels()*(settings.sampleSize()/8));
@@ -328,8 +329,5 @@
 void QAudioOutputPrivate::setNotifyInterval(int ms)
 {
-    if(ms >= minimumIntervalTime)
-        intervalTime = ms;
-    else
-        intervalTime = minimumIntervalTime;
+    intervalTime = qMax(0, ms);
 }
 
@@ -341,5 +339,11 @@
 qint64 QAudioOutputPrivate::processedUSecs() const
 {
-    return totalTimeValue;
+    if (deviceState == QAudio::StoppedState)
+        return 0;
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
 }
 
@@ -347,4 +351,6 @@
 {
     // Write out some audio data
+    if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
+        return 0;
 
     char* p = (char*)data;
@@ -355,10 +361,10 @@
     current = &waveBlocks[waveCurrentBlock];
     while(l > 0) {
-        EnterCriticalSection(&waveOutCriticalSection);
+        mutex.lock();
         if(waveFreeBlockCount==0) {
-            LeaveCriticalSection(&waveOutCriticalSection);
+            mutex.unlock();
             break;
         }
-        LeaveCriticalSection(&waveOutCriticalSection);
+        mutex.unlock();
 
         if(current->dwFlags & WHDR_PREPARED)
@@ -377,20 +383,21 @@
         waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
 
-        EnterCriticalSection(&waveOutCriticalSection);
+        mutex.lock();
         waveFreeBlockCount--;
-        LeaveCriticalSection(&waveOutCriticalSection);
 #ifdef DEBUG_AUDIO
-        EnterCriticalSection(&waveOutCriticalSection);
         qDebug("write out l=%d, waveFreeBlockCount=%d",
                 current->dwBufferLength,waveFreeBlockCount);
-        LeaveCriticalSection(&waveOutCriticalSection);
 #endif
-        totalTimeValue += current->dwBufferLength
-            /(settings.channels()*(settings.sampleSize()/8))
-            *1000000/settings.frequency();;
+        mutex.unlock();
+        totalTimeValue += current->dwBufferLength;
         waveCurrentBlock++;
         waveCurrentBlock %= buffer_size/period_size;
         current = &waveBlocks[waveCurrentBlock];
         current->dwUser = 0;
+        errorState = QAudio::NoError;
+        if (deviceState != QAudio::ActiveState) {
+            deviceState = QAudio::ActiveState;
+            emit stateChanged(deviceState);
+        }
     }
     return (len-l);
@@ -410,6 +417,9 @@
 void QAudioOutputPrivate::suspend()
 {
-    if(deviceState == QAudio::ActiveState) {
+    if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) {
+        int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
+                *settings.channels()*(settings.sampleSize()/8));
         waveOutPause(hWaveOut);
+        Sleep(delay+10);
         deviceState = QAudio::SuspendedState;
         errorState = QAudio::NoError;
@@ -434,4 +444,7 @@
 bool QAudioOutputPrivate::deviceReady()
 {
+    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
+        return false;
+
     if(pullMode) {
         int chunks = bytesAvailable/period_size;
@@ -445,12 +458,14 @@
 
 	bool full=false;
-	EnterCriticalSection(&waveOutCriticalSection);
+
+        mutex.lock();
 	if(waveFreeBlockCount==0) full = true;
-	LeaveCriticalSection(&waveOutCriticalSection);
+        mutex.unlock();
+
 	if (full){
 #ifdef DEBUG_AUDIO
             qDebug() << "Skipping data as unable to write";
 #endif
-	    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
+	    if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
                 emit notify();
 		elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
@@ -466,6 +481,14 @@
         if(l > 0) {
             int out= write(audioBuffer,l);
-            if(out > 0)
-                deviceState = QAudio::ActiveState;
+            if(out > 0) {
+                if (deviceState != QAudio::ActiveState) {
+                    deviceState = QAudio::ActiveState;
+                    emit stateChanged(deviceState);
+                }
+            }
+            if ( out < l) {
+                // Didnt write all data
+                audioSource->seek(audioSource->pos()-(l-out));
+            }
 	    if(startup)
 	        waveOutRestart(hWaveOut);
@@ -474,22 +497,40 @@
 
             int check = 0;
-            EnterCriticalSection(&waveOutCriticalSection);
+
+            mutex.lock();
             check = waveFreeBlockCount;
-            LeaveCriticalSection(&waveOutCriticalSection);
+            mutex.unlock();
+
             if(check == buffer_size/period_size) {
+                if (deviceState != QAudio::IdleState) {
+                    errorState = QAudio::UnderrunError;
+                    deviceState = QAudio::IdleState;
+                    emit stateChanged(deviceState);
+                }
+            }
+
+        } else if(l < 0) {
+            bytesAvailable = bytesFree();
+            errorState = QAudio::IOError;
+        }
+    } else {
+        int buffered;
+
+        mutex.lock();
+	buffered = waveFreeBlockCount;
+        mutex.unlock();
+
+        if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) {
+            if (deviceState != QAudio::IdleState) {
                 errorState = QAudio::UnderrunError;
                 deviceState = QAudio::IdleState;
                 emit stateChanged(deviceState);
             }
-
-        } else if(l < 0) {
-            bytesAvailable = bytesFree();
-            errorState = QAudio::IOError;
         }
     }
-    if(deviceState != QAudio::ActiveState)
+    if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
         return true;
 
-    if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+    if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
         emit notify();
 	elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
Index: /trunk/src/multimedia/audio/qaudiooutput_win32_p.h
===================================================================
--- /trunk/src/multimedia/audio/qaudiooutput_win32_p.h	(revision 768)
+++ /trunk/src/multimedia/audio/qaudiooutput_win32_p.h	(revision 769)
@@ -62,4 +62,5 @@
 #include <QtCore/qstringlist.h>
 #include <QtCore/qdatetime.h>
+#include <QtCore/qmutex.h>
 
 #include <QtMultimedia/qaudio.h>
@@ -120,4 +121,6 @@
             DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
 
+    QMutex mutex;
+
     WAVEHDR* allocateBlocks(int size, int count);
     void freeBlocks(WAVEHDR* blockArray);
Index: /trunk/src/multimedia/video/qabstractvideobuffer.cpp
===================================================================
--- /trunk/src/multimedia/video/qabstractvideobuffer.cpp	(revision 768)
+++ /trunk/src/multimedia/video/qabstractvideobuffer.cpp	(revision 769)
@@ -49,5 +49,4 @@
     \class QAbstractVideoBuffer
     \brief The QAbstractVideoBuffer class is an abstraction for video data.
-    \preliminary
     \since 4.6
 
Index: /trunk/src/multimedia/video/qabstractvideosurface.cpp
===================================================================
--- /trunk/src/multimedia/video/qabstractvideosurface.cpp	(revision 768)
+++ /trunk/src/multimedia/video/qabstractvideosurface.cpp	(revision 769)
@@ -47,5 +47,4 @@
     \class QAbstractVideoSurface
     \brief The QAbstractVideoSurface class is a base class for video presentation surfaces.
-    \preliminary
     \since 4.6
 
Index: /trunk/src/multimedia/video/qvideoframe.cpp
===================================================================
--- /trunk/src/multimedia/video/qvideoframe.cpp	(revision 768)
+++ /trunk/src/multimedia/video/qvideoframe.cpp	(revision 769)
@@ -103,5 +103,4 @@
     \class QVideoFrame
     \brief The QVideoFrame class provides a representation of a frame of video data.
-    \preliminary
     \since 4.6
 
Index: /trunk/src/multimedia/video/qvideosurfaceformat.cpp
===================================================================
--- /trunk/src/multimedia/video/qvideosurfaceformat.cpp	(revision 768)
+++ /trunk/src/multimedia/video/qvideosurfaceformat.cpp	(revision 769)
@@ -137,5 +137,4 @@
     \brief The QVideoSurfaceFormat class specifies the stream format of a video presentation
     surface.
-    \preliminary
     \since 4.6
 
Index: /trunk/src/network/access/qfilenetworkreply.cpp
===================================================================
--- /trunk/src/network/access/qfilenetworkreply.cpp	(revision 768)
+++ /trunk/src/network/access/qfilenetworkreply.cpp	(revision 769)
@@ -50,6 +50,11 @@
 
 QFileNetworkReplyPrivate::QFileNetworkReplyPrivate()
-    : QNetworkReplyPrivate(), realFileSize(0)
-{
+    : QNetworkReplyPrivate(), fileEngine(0), fileSize(0), filePos(0)
+{
+}
+
+QFileNetworkReplyPrivate::~QFileNetworkReplyPrivate()
+{
+    delete fileEngine;
 }
 
@@ -95,7 +100,6 @@
         fileName = url.toString(QUrl::RemoveAuthority | QUrl::RemoveFragment | QUrl::RemoveQuery);
     }
-    d->realFile.setFileName(fileName);
-
-    QFileInfo fi(d->realFile);
+
+    QFileInfo fi(fileName);
     if (fi.isDir()) {
         QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Cannot open %1: Path is a directory").arg(url.toString());
@@ -107,12 +111,13 @@
     }
 
-    bool opened = d->realFile.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+    d->fileEngine = QAbstractFileEngine::create(fileName);
+    bool opened = d->fileEngine->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
 
     // could we open the file?
     if (!opened) {
         QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Error opening %1: %2")
-                      .arg(d->realFile.fileName(), d->realFile.errorString());
-
-        if (d->realFile.exists()) {
+                      .arg(fileName, d->fileEngine->errorString());
+
+        if (fi.exists()) {
             setError(QNetworkReply::ContentAccessDenied, msg);
             QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
@@ -127,11 +132,11 @@
     }
 
-    d->realFileSize = fi.size();
+    d->fileSize = fi.size();
     setHeader(QNetworkRequest::LastModifiedHeader, fi.lastModified());
-    setHeader(QNetworkRequest::ContentLengthHeader, d->realFileSize);
+    setHeader(QNetworkRequest::ContentLengthHeader, d->fileSize);
 
     QMetaObject::invokeMethod(this, "metaDataChanged", Qt::QueuedConnection);
     QMetaObject::invokeMethod(this, "downloadProgress", Qt::QueuedConnection,
-        Q_ARG(qint64, d->realFileSize), Q_ARG(qint64, d->realFileSize));
+        Q_ARG(qint64, d->fileSize), Q_ARG(qint64, d->fileSize));
     QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection);
     QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
@@ -147,5 +152,6 @@
     Q_D(QFileNetworkReply);
     QNetworkReply::close();
-    d->realFile.close();
+    if (d->fileEngine)
+        d->fileEngine->close();
 }
 
@@ -154,5 +160,6 @@
     Q_D(QFileNetworkReply);
     QNetworkReply::close();
-    d->realFile.close();
+    if (d->fileEngine)
+        d->fileEngine->close();
 }
 
@@ -160,5 +167,8 @@
 {
     Q_D(const QFileNetworkReply);
-    return QNetworkReply::bytesAvailable() + d->realFile.bytesAvailable();
+    if (!d->fileEngine)
+        return 0;
+
+    return QNetworkReply::bytesAvailable() + d->fileSize - d->filePos;
 }
 
@@ -171,5 +181,5 @@
 {
     Q_D(const QFileNetworkReply);
-    return d->realFileSize;
+    return d->fileSize;
 }
 
@@ -180,9 +190,15 @@
 {
     Q_D(QFileNetworkReply);
-    qint64 ret = d->realFile.read(data, maxlen);
-    if (ret == 0 && bytesAvailable() == 0)
+    if (!d->fileEngine)
+        return -1;
+
+    qint64 ret = d->fileEngine->read(data, maxlen);
+    if (ret == 0 && bytesAvailable() == 0) {
         return -1; // everything had been read
-    else
-        return ret;
+    } else if (ret > 0) {
+        d->filePos += ret;
+    }
+
+    return ret;
 }
 
Index: /trunk/src/network/access/qfilenetworkreply_p.h
===================================================================
--- /trunk/src/network/access/qfilenetworkreply_p.h	(revision 768)
+++ /trunk/src/network/access/qfilenetworkreply_p.h	(revision 769)
@@ -58,4 +58,5 @@
 #include "qnetworkaccessmanager.h"
 #include <QFile>
+#include <QAbstractFileEngine>
 
 QT_BEGIN_NAMESPACE
@@ -86,7 +87,9 @@
 public:
     QFileNetworkReplyPrivate();
+    ~QFileNetworkReplyPrivate();
 
-    QFile realFile;
-    qint64 realFileSize;
+    QAbstractFileEngine *fileEngine;
+    qint64 fileSize;
+    qint64 filePos;
 
     virtual bool isFinished() const;
Index: /trunk/src/network/access/qftp.cpp
===================================================================
--- /trunk/src/network/access/qftp.cpp	(revision 768)
+++ /trunk/src/network/access/qftp.cpp	(revision 769)
@@ -2310,4 +2310,10 @@
 {
     Q_Q(QFtp);
+
+    if (pending.isEmpty()) {
+        qWarning() << "QFtpPrivate::_q_piError was called without pending command!";
+        return;
+    }
+
     QFtpCommand *c = pending.first();
 
Index: /trunk/src/network/access/qhttpnetworkconnection.cpp
===================================================================
--- /trunk/src/network/access/qhttpnetworkconnection.cpp	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkconnection.cpp	(revision 769)
@@ -72,7 +72,9 @@
 #endif
 
-// the maximum amount of requests that might be pipelined into a socket
-// from what was suggested, 3 seems to be OK
+// The pipeline length. So there will be 4 requests in flight.
 const int QHttpNetworkConnectionPrivate::defaultPipelineLength = 3;
+// Only re-fill the pipeline if there's defaultRePipelineLength slots free in the pipeline.
+// This means that there are 2 requests in flight and 2 slots free that will be re-filled.
+const int QHttpNetworkConnectionPrivate::defaultRePipelineLength = 2;
 
 
@@ -405,4 +407,5 @@
     reply->setRequest(request);
     reply->d_func()->connection = q;
+    reply->d_func()->connectionChannel = &channels[0]; // will have the correct one set later
     HttpMessagePair pair = qMakePair(request, reply);
 
@@ -416,6 +419,16 @@
         break;
     }
+
     // this used to be called via invokeMethod and a QueuedConnection
+    // It is the only place _q_startNextRequest is called directly without going
+    // through the event loop using a QueuedConnection.
+    // This is dangerous because of recursion that might occur when emitting
+    // signals as DirectConnection from this code path. Therefore all signal
+    // emissions that can come out from this code path need to
+    // be QueuedConnection.
+    // We are currently trying to fine-tune this.
     _q_startNextRequest();
+
+
     return reply;
 }
@@ -423,4 +436,6 @@
 void QHttpNetworkConnectionPrivate::requeueRequest(const HttpMessagePair &pair)
 {
+    Q_Q(QHttpNetworkConnection);
+
     QHttpNetworkRequest request = pair.first;
     switch (request.priority()) {
@@ -433,6 +448,6 @@
         break;
     }
-    // this used to be called via invokeMethod and a QueuedConnection
-    _q_startNextRequest();
+
+    QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection);
 }
 
@@ -475,52 +490,70 @@
     int i = indexOf(socket);
 
-    bool highPriorityQueueProcessingDone = false;
-    bool lowPriorityQueueProcessingDone = false;
-
-    while (!highPriorityQueueProcessingDone && !lowPriorityQueueProcessingDone) {
-        // this loop runs once per request we intend to pipeline in.
-
-        if (channels[i].pipeliningSupported != QHttpNetworkConnectionChannel::PipeliningProbablySupported)
-            return;
-
-        // the current request that is in must already support pipelining
-        if (!channels[i].request.isPipeliningAllowed())
-            return;
-
-        // the current request must be a idempotent (right now we only check GET)
-        if (channels[i].request.operation() != QHttpNetworkRequest::Get)
-            return;
-
-        // check if socket is connected
-        if (socket->state() != QAbstractSocket::ConnectedState)
-            return;
-
-        // check for resendCurrent
-        if (channels[i].resendCurrent)
-            return;
-
-        // we do not like authentication stuff
-        // ### make sure to be OK with this in later releases
-        if (!channels[i].authenticator.isNull() || !channels[i].authenticator.user().isEmpty())
-            return;
-        if (!channels[i].proxyAuthenticator.isNull() || !channels[i].proxyAuthenticator.user().isEmpty())
-            return;
-
-        // check for pipeline length
+    // return fast if there was no reply right now processed
+    if (channels[i].reply == 0)
+        return;
+
+    if (! (defaultPipelineLength - channels[i].alreadyPipelinedRequests.length() >= defaultRePipelineLength)) {
+        return;
+    }
+
+    if (channels[i].pipeliningSupported != QHttpNetworkConnectionChannel::PipeliningProbablySupported)
+        return;
+
+    // the current request that is in must already support pipelining
+    if (!channels[i].request.isPipeliningAllowed())
+        return;
+
+    // the current request must be a idempotent (right now we only check GET)
+    if (channels[i].request.operation() != QHttpNetworkRequest::Get)
+        return;
+
+    // check if socket is connected
+    if (socket->state() != QAbstractSocket::ConnectedState)
+        return;
+
+    // check for resendCurrent
+    if (channels[i].resendCurrent)
+        return;
+
+    // we do not like authentication stuff
+    // ### make sure to be OK with this in later releases
+    if (!channels[i].authenticator.isNull() || !channels[i].authenticator.user().isEmpty())
+        return;
+    if (!channels[i].proxyAuthenticator.isNull() || !channels[i].proxyAuthenticator.user().isEmpty())
+        return;
+
+    // must be in ReadingState or WaitingState
+    if (! (channels[i].state == QHttpNetworkConnectionChannel::WaitingState
+           || channels[i].state == QHttpNetworkConnectionChannel::ReadingState))
+        return;
+
+
+    //qDebug() << "QHttpNetworkConnectionPrivate::fillPipeline processing highPriorityQueue, size=" << highPriorityQueue.size() << " alreadyPipelined=" << channels[i].alreadyPipelinedRequests.length();
+    int lengthBefore;
+    while (!highPriorityQueue.isEmpty()) {
+        lengthBefore = channels[i].alreadyPipelinedRequests.length();
+        fillPipeline(highPriorityQueue, channels[i]);
+
         if (channels[i].alreadyPipelinedRequests.length() >= defaultPipelineLength)
             return;
 
-        // must be in ReadingState or WaitingState
-        if (! (channels[i].state == QHttpNetworkConnectionChannel::WaitingState
-               || channels[i].state == QHttpNetworkConnectionChannel::ReadingState))
+        if (lengthBefore == channels[i].alreadyPipelinedRequests.length())
+            break; // did not process anything, now do the low prio queue
+    }
+
+    //qDebug() << "QHttpNetworkConnectionPrivate::fillPipeline processing lowPriorityQueue, size=" << lowPriorityQueue.size() << " alreadyPipelined=" << channels[i].alreadyPipelinedRequests.length();
+    while (!lowPriorityQueue.isEmpty()) {
+        lengthBefore = channels[i].alreadyPipelinedRequests.length();
+        fillPipeline(lowPriorityQueue, channels[i]);
+
+        if (channels[i].alreadyPipelinedRequests.length() >= defaultPipelineLength)
             return;
 
-        highPriorityQueueProcessingDone = fillPipeline(highPriorityQueue, channels[i]);
-        // not finished with highPriorityQueue? then loop again
-        if (!highPriorityQueueProcessingDone)
-            continue;
-        // highPriorityQueue was processed, now deal with the lowPriorityQueue
-        lowPriorityQueueProcessingDone = fillPipeline(lowPriorityQueue, channels[i]);
-    }
+        if (lengthBefore == channels[i].alreadyPipelinedRequests.length())
+            break; // did not process anything
+    }
+
+
 }
 
@@ -682,4 +715,7 @@
 
 
+// This function must be called from the event loop. The only
+// exception is documented in QHttpNetworkConnectionPrivate::queueRequest
+// although it is called _q_startNextRequest, it will actually start multiple requests when possible
 void QHttpNetworkConnectionPrivate::_q_startNextRequest()
 {
@@ -689,6 +725,9 @@
             channels[i].resendCurrent = false;
             channels[i].state = QHttpNetworkConnectionChannel::IdleState;
-            if (channels[i].reply)
-                channels[i].sendRequest();
+
+            // if this is not possible, error will be emitted and connection terminated
+            if (!channels[i].resetUploadData())
+                continue;
+            channels[i].sendRequest();
         }
     }
@@ -696,24 +735,21 @@
     // dequeue new ones
 
-    QAbstractSocket *socket = 0;
+    // return fast if there is nothing to do
+    if (highPriorityQueue.isEmpty() && lowPriorityQueue.isEmpty())
+        return;
+    // try to get a free AND connected socket
     for (int i = 0; i < channelCount; ++i) {
-        QAbstractSocket *chSocket = channels[i].socket;
-        // try to get a free AND connected socket
         if (!channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
-            socket = chSocket;
-            dequeueAndSendRequest(socket);
-            break;
-        }
-    }
-
-    if (!socket) {
-        for (int i = 0; i < channelCount; ++i) {
-            QAbstractSocket *chSocket = channels[i].socket;
-            // try to get a free unconnected socket
-            if (!channels[i].isSocketBusy()) {
-                socket = chSocket;
-                dequeueAndSendRequest(socket);
-                break;
-            }
+            dequeueAndSendRequest(channels[i].socket);
+        }
+    }
+
+    // return fast if there is nothing to do
+    if (highPriorityQueue.isEmpty() && lowPriorityQueue.isEmpty())
+        return;
+    // try to get a free unconnected socket
+    for (int i = 0; i < channelCount; ++i) {
+        if (!channels[i].isSocketBusy()) {
+            dequeueAndSendRequest(channels[i].socket);
         }
     }
@@ -729,6 +765,7 @@
     if (highPriorityQueue.isEmpty() && lowPriorityQueue.isEmpty())
         return;
-    for (int j = 0; j < channelCount; j++)
-        fillPipeline(channels[j].socket);
+    for (int i = 0; i < channelCount; i++)
+        if (channels[i].socket->state() == QAbstractSocket::ConnectedState)
+            fillPipeline(channels[i].socket);
 }
 
@@ -856,15 +893,4 @@
 // SSL support below
 #ifndef QT_NO_OPENSSL
-QSslConfiguration QHttpNetworkConnectionPrivate::sslConfiguration(const QHttpNetworkReply &reply) const
-{
-    if (!encrypt)
-        return QSslConfiguration();
-
-    for (int i = 0; i < channelCount; ++i)
-        if (channels[i].reply == &reply)
-            return static_cast<QSslSocket *>(channels[0].socket)->sslConfiguration();
-    return QSslConfiguration(); // pending or done request
-}
-
 void QHttpNetworkConnection::setSslConfiguration(const QSslConfiguration &config)
 {
Index: /trunk/src/network/access/qhttpnetworkconnection_p.h
===================================================================
--- /trunk/src/network/access/qhttpnetworkconnection_p.h	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkconnection_p.h	(revision 769)
@@ -157,4 +157,5 @@
     static const int defaultChannelCount;
     static const int defaultPipelineLength;
+    static const int defaultRePipelineLength;
 
     QHttpNetworkConnectionPrivate(const QString &hostName, quint16 port, bool encrypt);
@@ -211,9 +212,4 @@
     bool handleAuthenticateChallenge(QAbstractSocket *socket, QHttpNetworkReply *reply, bool isProxy, bool &resend);
 
-
-#ifndef QT_NO_OPENSSL
-    QSslConfiguration sslConfiguration(const QHttpNetworkReply &reply) const;
-#endif
-
 #ifndef QT_NO_NETWORKPROXY
     QNetworkProxy networkProxy;
Index: /trunk/src/network/access/qhttpnetworkconnectionchannel.cpp
===================================================================
--- /trunk/src/network/access/qhttpnetworkconnectionchannel.cpp	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkconnectionchannel.cpp	(revision 769)
@@ -59,4 +59,26 @@
 // TODO: Put channel specific stuff here so it does not polute qhttpnetworkconnection.cpp
 
+QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel()
+    : socket(0)
+    , state(IdleState)
+    , reply(0)
+    , written(0)
+    , bytesTotal(0)
+    , resendCurrent(false)
+    , lastStatus(0)
+    , pendingEncrypt(false)
+    , reconnectAttempts(2)
+    , authMehtod(QAuthenticatorPrivate::None)
+    , proxyAuthMehtod(QAuthenticatorPrivate::None)
+#ifndef QT_NO_OPENSSL
+    , ignoreAllSslErrors(false)
+#endif
+    , pipeliningSupported(PipeliningSupportUnknown)
+    , connection(0)
+{
+    // Inlining this function in the header leads to compiler error on
+    // release-armv5, on at least timebox 9.2 and 10.1.
+}
+
 void QHttpNetworkConnectionChannel::init()
 {
@@ -125,4 +147,11 @@
 bool QHttpNetworkConnectionChannel::sendRequest()
 {
+    if (!reply) {
+        // heh, how should that happen!
+        qWarning() << "QHttpNetworkConnectionChannel::sendRequest() called without QHttpNetworkReply";
+        state = QHttpNetworkConnectionChannel::IdleState;
+        return false;
+    }
+
     switch (state) {
     case QHttpNetworkConnectionChannel::IdleState: { // write the header
@@ -135,11 +164,11 @@
         written = 0; // excluding the header
         bytesTotal = 0;
-        if (reply) {
-            reply->d_func()->clear();
-            reply->d_func()->connection = connection;
-            reply->d_func()->autoDecompress = request.d->autoDecompress;
-            reply->d_func()->pipeliningUsed = false;
-        }
-        state = QHttpNetworkConnectionChannel::WritingState;
+
+        reply->d_func()->clear();
+        reply->d_func()->connection = connection;
+        reply->d_func()->connectionChannel = this;
+        reply->d_func()->autoDecompress = request.d->autoDecompress;
+        reply->d_func()->pipeliningUsed = false;
+
         pendingEncrypt = false;
         // if the url contains authentication parameters, use the new ones
@@ -175,11 +204,13 @@
 
             bytesTotal = request.contentLength();
+
+            state = QHttpNetworkConnectionChannel::WritingState; // start writing data
+            sendRequest(); //recurse
         } else {
-            state = QHttpNetworkConnectionChannel::WaitingState;
-            sendRequest();
-            break;
-        }
-        // write the initial chunk together with the headers
-        // fall through
+            state = QHttpNetworkConnectionChannel::WaitingState; // now wait for response
+            sendRequest(); //recurse
+        }
+
+        break;
     }
     case QHttpNetworkConnectionChannel::WritingState:
@@ -191,5 +222,5 @@
                 emit reply->dataSendProgress(written, bytesTotal);
             state = QHttpNetworkConnectionChannel::WaitingState; // now wait for response
-            sendRequest();
+            sendRequest(); // recurse
             break;
         }
@@ -255,11 +286,12 @@
 
         // HTTP pipelining
-        connection->d_func()->fillPipeline(socket);
-        socket->flush();
+        //connection->d_func()->fillPipeline(socket);
+        //socket->flush();
 
         // ensure we try to receive a reply in all cases, even if _q_readyRead_ hat not been called
         // this is needed if the sends an reply before we have finished sending the request. In that
         // case receiveReply had been called before but ignored the server reply
-        QMetaObject::invokeMethod(this, "_q_receiveReply", Qt::QueuedConnection);
+        if (socket->bytesAvailable())
+            QMetaObject::invokeMethod(this, "_q_receiveReply", Qt::QueuedConnection);
         break;
     }
@@ -279,4 +311,19 @@
     Q_ASSERT(socket);
 
+    if (!reply) {
+        // heh, how should that happen!
+        qWarning() << "QHttpNetworkConnectionChannel::_q_receiveReply() called without QHttpNetworkReply,"
+                << socket->bytesAvailable() << "bytes on socket.";
+        close();
+        return;
+    }
+
+    // only run when the QHttpNetworkConnection is not currently being destructed, e.g.
+    // this function is called from _q_disconnected which is called because
+    // of ~QHttpNetworkConnectionPrivate
+    if (!qobject_cast<QHttpNetworkConnection*>(connection)) {
+        return;
+    }
+
     qint64 bytes = 0;
     QAbstractSocket::SocketState socketState = socket->state();
@@ -284,19 +331,16 @@
     // connection might be closed to signal the end of data
     if (socketState == QAbstractSocket::UnconnectedState) {
-        if (!socket->bytesAvailable()) {
-            if (reply && reply->d_func()->state == QHttpNetworkReplyPrivate::ReadingDataState) {
+        if (socket->bytesAvailable() <= 0) {
+            if (reply->d_func()->state == QHttpNetworkReplyPrivate::ReadingDataState) {
+                // finish this reply. this case happens when the server did not send a content length
                 reply->d_func()->state = QHttpNetworkReplyPrivate::AllDoneState;
-                this->state = QHttpNetworkConnectionChannel::IdleState;
                 allDone();
+                return;
             } else {
-                // try to reconnect/resend before sending an error.
-                if (reconnectAttempts-- > 0) {
-                    closeAndResendCurrentRequest();
-                } else if (reply) {
-                    reply->d_func()->errorString = connection->d_func()->errorDetail(QNetworkReply::RemoteHostClosedError, socket);
-                    emit reply->finishedWithError(QNetworkReply::RemoteHostClosedError, reply->d_func()->errorString);
-                    QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
-                }
-            }
+                handleUnexpectedEOF();
+                return;
+            }
+        } else {
+            // socket not connected but still bytes for reading.. just continue in this function
         }
     }
@@ -304,22 +348,18 @@
     // read loop for the response
     while (socket->bytesAvailable()) {
-        QHttpNetworkReplyPrivate::ReplyState state = reply ? reply->d_func()->state : QHttpNetworkReplyPrivate::AllDoneState;
+        QHttpNetworkReplyPrivate::ReplyState state = reply->d_func()->state;
         switch (state) {
-        case QHttpNetworkReplyPrivate::NothingDoneState:
+        case QHttpNetworkReplyPrivate::NothingDoneState: {
+            // only eat whitespace on the first call
+            eatWhitespace();
+            state = reply->d_func()->state = QHttpNetworkReplyPrivate::ReadingStatusState;
+            // fallthrough
+        }
         case QHttpNetworkReplyPrivate::ReadingStatusState: {
-            eatWhitespace();
             qint64 statusBytes = reply->d_func()->readStatus(socket);
-            if (statusBytes == -1 && reconnectAttempts <= 0) {
-                // too many errors reading/receiving/parsing the status, close the socket and emit error
-                close();
-                reply->d_func()->errorString = connection->d_func()->errorDetail(QNetworkReply::ProtocolFailure, socket);
-                emit reply->finishedWithError(QNetworkReply::ProtocolFailure, reply->d_func()->errorString);
-                QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
-                break;
-            } else if (statusBytes == -1) {
-                reconnectAttempts--;
-                reply->d_func()->clear();
-                closeAndResendCurrentRequest();
-                break;
+            if (statusBytes == -1) {
+                // connection broke while reading status. also handled if later _q_disconnected is called
+                handleUnexpectedEOF();
+                return;
             }
             bytes += statusBytes;
@@ -329,5 +369,11 @@
         case QHttpNetworkReplyPrivate::ReadingHeaderState: {
             QHttpNetworkReplyPrivate *replyPrivate = reply->d_func();
-            bytes += replyPrivate->readHeader(socket);
+            qint64 headerBytes = replyPrivate->readHeader(socket);
+            if (headerBytes == -1) {
+                // connection broke while reading headers. also handled if later _q_disconnected is called
+                handleUnexpectedEOF();
+                return;
+            }
+            bytes += headerBytes;
             if (replyPrivate->state == QHttpNetworkReplyPrivate::ReadingDataState) {
                 if (replyPrivate->isGzipped() && replyPrivate->autoDecompress) {
@@ -338,4 +384,5 @@
                 }
                 if (replyPrivate->statusCode == 100) {
+                    replyPrivate->clearHttpLayerInformation();
                     replyPrivate->state = QHttpNetworkReplyPrivate::ReadingStatusState;
                     break; // ignore
@@ -345,7 +392,6 @@
                 if (!replyPrivate->expectContent()) {
                     replyPrivate->state = QHttpNetworkReplyPrivate::AllDoneState;
-                    this->state = QHttpNetworkConnectionChannel::IdleState;
                     allDone();
-                    return;
+                    break;
                 }
             }
@@ -417,10 +463,11 @@
                 }
             }
+            // still in ReadingDataState? This function will be called again by the socket's readyRead
             if (replyPrivate->state == QHttpNetworkReplyPrivate::ReadingDataState)
                 break;
+
             // everything done, fall through
             }
       case QHttpNetworkReplyPrivate::AllDoneState:
-            this->state = QHttpNetworkConnectionChannel::IdleState;
             allDone();
             break;
@@ -428,4 +475,23 @@
             break;
         }
+    }
+}
+
+// called when unexpectedly reading a -1 or when data is expected but socket is closed
+void QHttpNetworkConnectionChannel::handleUnexpectedEOF()
+{
+    if (reconnectAttempts <= 0) {
+        // too many errors reading/receiving/parsing the status, close the socket and emit error
+        requeueCurrentlyPipelinedRequests();
+        close();
+        reply->d_func()->errorString = connection->d_func()->errorDetail(QNetworkReply::RemoteHostClosedError, socket);
+        emit reply->finishedWithError(QNetworkReply::RemoteHostClosedError, reply->d_func()->errorString);
+        QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
+    } else {
+        reconnectAttempts--;
+        reply->d_func()->clear();
+        reply->d_func()->connection = connection;
+        reply->d_func()->connectionChannel = this;
+        closeAndResendCurrentRequest();
     }
 }
@@ -557,5 +623,6 @@
     // ### at this point there should be no more data on the socket
     // close if server requested
-    if (reply->d_func()->isConnectionCloseEnabled())
+    bool connectionCloseEnabled = reply->d_func()->isConnectionCloseEnabled();
+    if (connectionCloseEnabled)
         close();
     // queue the finished signal, this is required since we might send new requests from
@@ -570,7 +637,18 @@
     detectPipeliningSupport();
 
+    // now the channel can be seen as free/idle again, all signal emissions for the reply have been done
+    this->state = QHttpNetworkConnectionChannel::IdleState;
+
+    // if it does not need to be sent again we can set it to 0
+    // the previous code did not do that and we had problems with accidental re-sending of a
+    // finished request.
+    // Note that this may trigger a segfault at some other point. But then we can fix the underlying
+    // problem.
+    if (!resendCurrent)
+        reply = 0;
+
     // move next from pipeline to current request
     if (!alreadyPipelinedRequests.isEmpty()) {
-        if (resendCurrent || reply->d_func()->isConnectionCloseEnabled() || socket->state() != QAbstractSocket::ConnectedState) {
+        if (resendCurrent || connectionCloseEnabled || socket->state() != QAbstractSocket::ConnectedState) {
             // move the pipelined ones back to the main queue
             requeueCurrentlyPipelinedRequests();
@@ -592,5 +670,6 @@
 
             // continue reading
-            _q_receiveReply();
+            //_q_receiveReply();
+            // this was wrong, allDone gets called from that function anyway.
         }
     } else if (alreadyPipelinedRequests.isEmpty() && socket->bytesAvailable() > 0) {
@@ -608,17 +687,19 @@
 {
     // detect HTTP Pipelining support
-    QByteArray serverHeaderField = reply->headerField("Server");
+    QByteArray serverHeaderField;
     if (
-            // check for broken servers in server reply header
-            // this is adapted from http://mxr.mozilla.org/firefox/ident?i=SupportsPipelining
-            (!serverHeaderField.contains("Microsoft-IIS/4."))
-            && (!serverHeaderField.contains("Microsoft-IIS/5."))
-            && (!serverHeaderField.contains("Netscape-Enterprise/3."))
             // check for HTTP/1.1
-            && (reply->d_func()->majorVersion == 1 && reply->d_func()->minorVersion == 1)
+            (reply->d_func()->majorVersion == 1 && reply->d_func()->minorVersion == 1)
             // check for not having connection close
             && (!reply->d_func()->isConnectionCloseEnabled())
             // check if it is still connected
             && (socket->state() == QAbstractSocket::ConnectedState)
+            // check for broken servers in server reply header
+            // this is adapted from http://mxr.mozilla.org/firefox/ident?i=SupportsPipelining
+            && (serverHeaderField = reply->headerField("Server"), !serverHeaderField.contains("Microsoft-IIS/4."))
+            && (!serverHeaderField.contains("Microsoft-IIS/5."))
+            && (!serverHeaderField.contains("Netscape-Enterprise/3."))
+            // this is adpoted from the knowledge of the Nokia 7.x browser team (DEF143319)
+            && (!serverHeaderField.contains("WebLogic"))
             ) {
         pipeliningSupported = QHttpNetworkConnectionChannel::PipeliningProbablySupported;
@@ -635,5 +716,9 @@
     alreadyPipelinedRequests.clear();
 
-    QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
+    // only run when the QHttpNetworkConnection is not currently being destructed, e.g.
+    // this function is called from _q_disconnected which is called because
+    // of ~QHttpNetworkConnectionPrivate
+    if (qobject_cast<QHttpNetworkConnection*>(connection))
+        QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
 }
 
@@ -675,13 +760,6 @@
         if (connection->d_func()->handleAuthenticateChallenge(socket, reply, (statusCode == 407), resend)) {
             if (resend) {
-                QNonContiguousByteDevice* uploadByteDevice = request.uploadByteDevice();
-                if (uploadByteDevice) {
-                    if (uploadByteDevice->reset()) {
-                        written = 0;
-                    } else {
-                        connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ContentReSendError);
-                        break;
-                    }
-                }
+                if (!resetUploadData())
+                    break;
 
                 reply->d_func()->eraseData();
@@ -713,4 +791,20 @@
 }
 
+bool QHttpNetworkConnectionChannel::resetUploadData()
+{
+    QNonContiguousByteDevice* uploadByteDevice = request.uploadByteDevice();
+    if (!uploadByteDevice)
+        return true;
+
+    if (uploadByteDevice->reset()) {
+        written = 0;
+        return true;
+    } else {
+        connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ContentReSendError);
+        return false;
+    }
+}
+
+
 void  QHttpNetworkConnectionChannel::pipelineInto(HttpMessagePair &pair)
 {
@@ -719,10 +813,9 @@
     QHttpNetworkRequest &request = pair.first;
     QHttpNetworkReply *reply = pair.second;
-    if (reply) {
-        reply->d_func()->clear();
-        reply->d_func()->connection = connection;
-        reply->d_func()->autoDecompress = request.d->autoDecompress;
-        reply->d_func()->pipeliningUsed = true;
-    }
+    reply->d_func()->clear();
+    reply->d_func()->connection = connection;
+    reply->d_func()->connectionChannel = this;
+    reply->d_func()->autoDecompress = request.d->autoDecompress;
+    reply->d_func()->pipeliningUsed = true;
 
 #ifndef QT_NO_NETWORKPROXY
@@ -788,7 +881,8 @@
     // read the available data before closing
     if (isSocketWaiting() || isSocketReading()) {
-        state = QHttpNetworkConnectionChannel::ReadingState;
-        if (reply)
+        if (reply) {
+            state = QHttpNetworkConnectionChannel::ReadingState;
             _q_receiveReply();
+        }
     } else if (state == QHttpNetworkConnectionChannel::IdleState && resendCurrent) {
         // re-sending request because the socket was in ClosingState
@@ -805,5 +899,12 @@
 {
     // improve performance since we get the request sent by the kernel ASAP
-    socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
+    //socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
+    // We have this commented out now. It did not have the effect we wanted. If we want to
+    // do this properly, Qt has to combine multiple HTTP requests into one buffer
+    // and send this to the kernel in one syscall and then the kernel immediately sends
+    // it as one TCP packet because of TCP_NODELAY.
+    // However, this code is currently not in Qt, so we rely on the kernel combining
+    // the requests into one TCP packet.
+
     // not sure yet if it helps, but it makes sense
     socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
@@ -872,5 +973,5 @@
         break;
     }
-    QPointer<QObject> that = connection;
+    QPointer<QHttpNetworkConnection> that = connection;
     QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString());
     if (send2Reply) {
@@ -927,5 +1028,13 @@
     // otherwise we do nothing
 }
-#endif
+
+#endif
+
+void QHttpNetworkConnectionChannel::setConnection(QHttpNetworkConnection *c)
+{
+    // Inlining this function in the header leads to compiler error on
+    // release-armv5, on at least timebox 9.2 and 10.1.
+    connection = c;
+}
 
 QT_END_NAMESPACE
Index: /trunk/src/network/access/qhttpnetworkconnectionchannel_p.h
===================================================================
--- /trunk/src/network/access/qhttpnetworkconnectionchannel_p.h	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkconnectionchannel_p.h	(revision 769)
@@ -66,4 +66,5 @@
 #include <private/qhttpnetworkreply_p.h>
 
+#include <private/qhttpnetworkconnection_p.h>
 
 #ifndef QT_NO_HTTP
@@ -81,5 +82,4 @@
 class QHttpNetworkReply;
 class QByteArray;
-class QHttpNetworkConnection;
 
 #ifndef HttpMessagePair
@@ -128,16 +128,8 @@
 
 
-    QHttpNetworkConnectionChannel() : socket(0), state(IdleState), reply(0), written(0), bytesTotal(0), resendCurrent(false),
-    lastStatus(0), pendingEncrypt(false), reconnectAttempts(2),
-    authMehtod(QAuthenticatorPrivate::None), proxyAuthMehtod(QAuthenticatorPrivate::None)
-#ifndef QT_NO_OPENSSL
-    , ignoreAllSslErrors(false)
-#endif
-    , pipeliningSupported(PipeliningSupportUnknown)
-    , connection(0)
-    {}
-
-    void setConnection(QHttpNetworkConnection *c) {connection = c;}
-    QHttpNetworkConnection *connection;
+    QHttpNetworkConnectionChannel();
+    
+    void setConnection(QHttpNetworkConnection *c);
+    QPointer<QHttpNetworkConnection> connection;
 
     void init();
@@ -152,8 +144,11 @@
     void handleStatus(); // called from allDone()
 
+    bool resetUploadData(); // return true if resetting worked or there is no upload data
+
     void pipelineInto(HttpMessagePair &pair);
     void requeueCurrentlyPipelinedRequests();
     void detectPipeliningSupport();
 
+    void handleUnexpectedEOF();
     void closeAndResendCurrentRequest();
 
@@ -185,6 +180,4 @@
 };
 
-
-
 QT_END_NAMESPACE
 
Index: /trunk/src/network/access/qhttpnetworkheader.cpp
===================================================================
--- /trunk/src/network/access/qhttpnetworkheader.cpp	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkheader.cpp	(revision 769)
@@ -81,5 +81,5 @@
     QByteArray result;
     bool first = true;
-    foreach (QByteArray value, allValues) {
+    foreach (const QByteArray &value, allValues) {
         if (!first)
             result += ", ";
Index: /trunk/src/network/access/qhttpnetworkreply.cpp
===================================================================
--- /trunk/src/network/access/qhttpnetworkreply.cpp	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkreply.cpp	(revision 769)
@@ -180,4 +180,7 @@
 {
     Q_D(QHttpNetworkReply);
+    if (d->responseData.bufferCount() == 0)
+        return QByteArray();
+
     // we'll take the last buffer, so schedule another read from http
     if (d->downstreamLimited && d->responseData.bufferCount() == 1)
@@ -220,5 +223,5 @@
 }
 
-void QHttpNetworkReplyPrivate::clear()
+void QHttpNetworkReplyPrivate::clearHttpLayerInformation()
 {
     state = NothingDoneState;
@@ -230,5 +233,4 @@
     currentChunkRead = 0;
     connectionCloseEnabled = true;
-    connection = 0;
 #ifndef QT_NO_COMPRESS
     if (initInflate)
@@ -237,6 +239,14 @@
     initInflate = false;
     streamEnd = false;
+    fields.clear();
+}
+
+// TODO: Isn't everything HTTP layer related? We don't need to set connection and connectionChannel to 0 at all
+void QHttpNetworkReplyPrivate::clear()
+{
+    connection = 0;
+    connectionChannel = 0;
     autoDecompress = false;
-    fields.clear();
+    clearHttpLayerInformation();
 }
 
@@ -424,11 +434,24 @@
 qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
 {
+    if (fragment.isEmpty()) {
+        // reserve bytes for the status line. This is better than always append() which reallocs the byte array
+        fragment.reserve(32);
+    }
+
     qint64 bytes = 0;
     char c;
-
-    while (socket->bytesAvailable()) {
+    qint64 haveRead = 0;
+
+    do {
+        haveRead = socket->read(&c, 1);
+        if (haveRead == -1)
+            return -1; // unexpected EOF
+        else if (haveRead == 0)
+            break; // read more later
+
+        bytes++;
+
         // allow both CRLF & LF (only) line endings
-        if (socket->peek(&c, 1) == 1 && c == '\n') {
-            bytes += socket->read(&c, 1); // read the "n"
+        if (c == '\n') {
             // remove the CR at the end
             if (fragment.endsWith('\r')) {
@@ -443,9 +466,4 @@
             break;
         } else {
-            c = 0;
-            int haveRead = socket->read(&c, 1);
-            if (haveRead == -1)
-                return -1;
-            bytes += haveRead;
             fragment.append(c);
         }
@@ -457,6 +475,5 @@
             return -1;
         }
-
-    }
+    } while (haveRead == 1);
 
     return bytes;
@@ -501,18 +518,44 @@
 qint64 QHttpNetworkReplyPrivate::readHeader(QAbstractSocket *socket)
 {
+    if (fragment.isEmpty()) {
+        // according to http://dev.opera.com/articles/view/mama-http-headers/ the average size of the header
+        // block is 381 bytes.
+        // reserve bytes. This is better than always append() which reallocs the byte array.
+        fragment.reserve(512);
+    }
+
     qint64 bytes = 0;
     char c = 0;
     bool allHeaders = false;
-    while (!allHeaders && socket->bytesAvailable()) {
-        if (socket->peek(&c, 1) == 1 && c == '\n') {
-            // check for possible header endings. As per HTTP rfc,
-            // the header endings will be marked by CRLFCRLF. But
-            // we will allow CRLFLF, LFLF & CRLFCRLF
-            if (fragment.endsWith("\n\r") || fragment.endsWith('\n'))
-                allHeaders = true;
-        }
-        bytes += socket->read(&c, 1);
-        fragment.append(c);
-    }
+    qint64 haveRead = 0;
+    do {
+        haveRead = socket->read(&c, 1);
+        if (haveRead == 0) {
+            // read more later
+            break;
+        } else if (haveRead == -1) {
+            // connection broke down
+            return -1;
+        } else {
+            fragment.append(c);
+            bytes++;
+
+            if (c == '\n') {
+                // check for possible header endings. As per HTTP rfc,
+                // the header endings will be marked by CRLFCRLF. But
+                // we will allow CRLFCRLF, CRLFLF, LFLF
+                if (fragment.endsWith("\r\n\r\n")
+                    || fragment.endsWith("\r\n\n")
+                    || fragment.endsWith("\n\n"))
+                    allHeaders = true;
+
+                // there is another case: We have no headers. Then the fragment equals just the line ending
+                if ((fragment.length() == 2 && fragment.endsWith("\r\n"))
+                    || (fragment.length() == 1 && fragment.endsWith("\n")))
+                    allHeaders = true;
+            }
+        }
+    } while (!allHeaders && haveRead > 0);
+
     // we received all headers now parse them
     if (allHeaders) {
@@ -776,7 +819,13 @@
 {
     Q_D(const QHttpNetworkReply);
-    if (d->connection)
-        return d->connection->d_func()->sslConfiguration(*this);
-    return QSslConfiguration();
+
+    if (!d->connectionChannel)
+        return QSslConfiguration();
+
+    QSslSocket *sslSocket = qobject_cast<QSslSocket*>(d->connectionChannel->socket);
+    if (!sslSocket)
+        return QSslConfiguration();
+
+    return sslSocket->sslConfiguration();
 }
 
Index: /trunk/src/network/access/qhttpnetworkreply_p.h
===================================================================
--- /trunk/src/network/access/qhttpnetworkreply_p.h	(revision 768)
+++ /trunk/src/network/access/qhttpnetworkreply_p.h	(revision 769)
@@ -87,4 +87,5 @@
 
 class QHttpNetworkConnection;
+class QHttpNetworkConnectionChannel;
 class QHttpNetworkRequest;
 class QHttpNetworkConnectionPrivate;
@@ -172,4 +173,5 @@
     QAuthenticatorPrivate::Method authenticationMethod(bool isProxy) const;
     void clear();
+    void clearHttpLayerInformation();
 
     qint64 readReplyBodyRaw(QIODevice *in, QByteDataBuffer *out, qint64 size);
@@ -219,4 +221,5 @@
     qint64 currentChunkRead;
     QPointer<QHttpNetworkConnection> connection;
+    QPointer<QHttpNetworkConnectionChannel> connectionChannel;
     bool initInflate;
     bool streamEnd;
Index: /trunk/src/network/access/qnetworkaccessbackend.cpp
===================================================================
--- /trunk/src/network/access/qnetworkaccessbackend.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkaccessbackend.cpp	(revision 769)
@@ -73,5 +73,5 @@
 {
     QMutexLocker locker(&factoryData()->mutex);
-    factoryData()->prepend(this);
+    factoryData()->append(this);
 }
 
Index: /trunk/src/network/access/qnetworkaccesshttpbackend.cpp
===================================================================
--- /trunk/src/network/access/qnetworkaccesshttpbackend.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkaccesshttpbackend.cpp	(revision 769)
@@ -681,6 +681,5 @@
 
     while (httpReply->bytesAvailable() != 0 && nextDownstreamBlockSize() != 0 && nextDownstreamBlockSize() > list.byteAmount()) {
-        QByteArray data = httpReply->readAny();
-        list.append(data);
+        list.append(httpReply->readAny());
     }
 
@@ -754,5 +753,5 @@
         if (!value.isEmpty()) {
             if (qstricmp(it->first.constData(), "set-cookie") == 0)
-                value += "\n";
+                value += '\n';
             else
                 value += ", ";
@@ -977,5 +976,5 @@
         // write to disk when only the date changes).
         // However, without the date we cannot calculate the age of the page
-        // anymore. Consider a proper fix of that problem for 4.6.1.
+        // anymore.
         //if (header == "date")
             //continue;
Index: /trunk/src/network/access/qnetworkaccesshttpbackend_p.h
===================================================================
--- /trunk/src/network/access/qnetworkaccesshttpbackend_p.h	(revision 768)
+++ /trunk/src/network/access/qnetworkaccesshttpbackend_p.h	(revision 769)
@@ -95,6 +95,4 @@
     QNetworkCacheMetaData fetchCacheMetaData(const QNetworkCacheMetaData &metaData) const;
 
-    qint64 deviceReadData(char *buffer, qint64 maxlen);
-
     // we return true since HTTP needs to send PUT/POST data again after having authenticated
     bool needsResetableUploadData() { return true; }
Index: /trunk/src/network/access/qnetworkaccessmanager.cpp
===================================================================
--- /trunk/src/network/access/qnetworkaccessmanager.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkaccessmanager.cpp	(revision 769)
@@ -108,5 +108,6 @@
     it sends. It contains the proxy and cache configuration, as well as the
     signals related to such issues, and reply signals that can be used to
-    monitor the progress of a network operation.
+    monitor the progress of a network operation. One QNetworkAccessManager
+    should be enough for the whole Qt application.
 
     Once a QNetworkAccessManager object has been created, the application can
@@ -119,4 +120,5 @@
     \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 0
 
+    QNetworkAccessManager has an asynchronous API.
     When the \tt replyFinished slot above is called, the parameter it
     takes is the QNetworkReply object containing the downloaded data
@@ -128,7 +130,22 @@
     deleteLater() function.
 
+    \note QNetworkAccessManager queues the requests it receives. The number
+    of requests executed in parallel is dependent on the protocol.
+    Currently, for the HTTP protocol on desktop platforms, 6 requests are
+    executed in parallel for one host/port combination.
+
     A more involved example, assuming the manager is already existent,
     can be:
     \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 1
+
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c NetworkServices platform security capability. If the client
+    process lacks this capability, operations will result in a panic.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
 
     \sa QNetworkRequest, QNetworkReply, QNetworkProxy
@@ -550,5 +567,5 @@
 /*!
     Posts a request to obtain the network headers for \a request
-    and returns a new QNetworkReply object which will contain such headers
+    and returns a new QNetworkReply object which will contain such headers.
 
     The function is named after the HTTP request associated (HEAD).
Index: /trunk/src/network/access/qnetworkcookie.h
===================================================================
--- /trunk/src/network/access/qnetworkcookie.h	(revision 768)
+++ /trunk/src/network/access/qnetworkcookie.h	(revision 769)
@@ -115,5 +115,5 @@
 
 // ### Qt5 remove this include
-#include "qnetworkcookiejar.h"
+#include <QtNetwork/QNetworkCookieJar>
 
 Q_DECLARE_METATYPE(QNetworkCookie)
Index: /trunk/src/network/access/qnetworkcookiejar.h
===================================================================
--- /trunk/src/network/access/qnetworkcookiejar.h	(revision 768)
+++ /trunk/src/network/access/qnetworkcookiejar.h	(revision 769)
@@ -47,5 +47,5 @@
 
 // ### Qt5 remove this include
-#include "qnetworkcookie.h"
+#include <QtNetwork/QNetworkCookie>
 
 QT_BEGIN_HEADER
Index: /trunk/src/network/access/qnetworkdiskcache.cpp
===================================================================
--- /trunk/src/network/access/qnetworkdiskcache.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkdiskcache.cpp	(revision 769)
@@ -42,5 +42,4 @@
 //#define QNETWORKDISKCACHE_DEBUG
 
-#ifndef QT_NO_NETWORKDISKCACHE
 
 #include "qnetworkdiskcache.h"
@@ -60,4 +59,6 @@
 #define CACHE_POSTFIX QLatin1String(".cache")
 #define MAX_COMPRESSION_SIZE (1024 * 1024 * 3)
+
+#ifndef QT_NO_NETWORKDISKCACHE
 
 QT_BEGIN_NAMESPACE
Index: /trunk/src/network/access/qnetworkdiskcache_p.h
===================================================================
--- /trunk/src/network/access/qnetworkdiskcache_p.h	(revision 768)
+++ /trunk/src/network/access/qnetworkdiskcache_p.h	(revision 769)
@@ -60,4 +60,6 @@
 #include <qtemporaryfile.h>
 
+#ifndef QT_NO_NETWORKDISKCACHE
+
 QT_BEGIN_NAMESPACE
 
@@ -120,3 +122,5 @@
 QT_END_NAMESPACE
 
+#endif // QT_NO_NETWORKDISKCACHE
+
 #endif // QNETWORKDISKCACHE_P_H
Index: /trunk/src/network/access/qnetworkreplyimpl.cpp
===================================================================
--- /trunk/src/network/access/qnetworkreplyimpl.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkreplyimpl.cpp	(revision 769)
@@ -404,4 +404,35 @@
 }
 
+void QNetworkReplyImplPrivate::initCacheSaveDevice()
+{
+    Q_Q(QNetworkReplyImpl);
+
+    // save the meta data
+    QNetworkCacheMetaData metaData;
+    metaData.setUrl(url);
+    metaData = backend->fetchCacheMetaData(metaData);
+
+    // save the redirect request also in the cache
+    QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute);
+    if (redirectionTarget.isValid()) {
+        QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes();
+        attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget);
+        metaData.setAttributes(attributes);
+    }
+
+    cacheSaveDevice = networkCache()->prepare(metaData);
+
+    if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) {
+        if (cacheSaveDevice && !cacheSaveDevice->isOpen())
+            qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- "
+                  "class %s probably needs to be fixed",
+                  networkCache()->metaObject()->className());
+
+        networkCache()->remove(url);
+        cacheSaveDevice = 0;
+        cacheEnabled = false;
+    }
+}
+
 // we received downstream data and send this to the cache
 // and to our readBuffer (which in turn gets read by the user of QNetworkReply)
@@ -413,34 +444,10 @@
 
     if (cacheEnabled && !cacheSaveDevice) {
-        // save the meta data
-        QNetworkCacheMetaData metaData;
-        metaData.setUrl(url);
-        metaData = backend->fetchCacheMetaData(metaData);
-
-        // save the redirect request also in the cache
-        QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute);
-        if (redirectionTarget.isValid()) {
-            QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes();
-            attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget);
-            metaData.setAttributes(attributes);
-        }
-
-        cacheSaveDevice = networkCache()->prepare(metaData);
-
-        if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) {
-            if (cacheSaveDevice && !cacheSaveDevice->isOpen())
-                qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- "
-                      "class %s probably needs to be fixed",
-                      networkCache()->metaObject()->className());
-
-            networkCache()->remove(url);
-            cacheSaveDevice = 0;
-            cacheEnabled = false;
-        }
+        initCacheSaveDevice();
     }
 
     qint64 bytesWritten = 0;
     for (int i = 0; i < data.bufferCount(); i++) {
-        QByteArray item = data[i];
+        QByteArray const &item = data[i];
 
         if (cacheSaveDevice)
@@ -454,4 +461,11 @@
     bytesDownloaded += bytesWritten;
     lastBytesDownloaded = bytesDownloaded;
+
+    appendDownstreamDataSignalEmissions();
+}
+
+void QNetworkReplyImplPrivate::appendDownstreamDataSignalEmissions()
+{
+    Q_Q(QNetworkReplyImpl);
 
     QPointer<QNetworkReplyImpl> qq = q;
@@ -496,4 +510,13 @@
 }
 
+void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data)
+{
+    // TODO implement
+
+    // TODO call
+
+    qFatal("QNetworkReplyImplPrivate::appendDownstreamData not implemented");
+}
+
 void QNetworkReplyImplPrivate::finished()
 {
@@ -581,6 +604,11 @@
 {
     Q_D(QNetworkReplyImpl);
+
+    // This code removes the data from the cache if it was prematurely aborted.
+    // See QNetworkReplyImplPrivate::completeCacheSave(), we disable caching there after the cache
+    // save had been properly finished. So if it is still enabled it means we got deleted/aborted.
     if (d->isCachingEnabled())
         d->networkCache()->remove(url());
+
     if (d->outgoingDataBuffer)
         delete d->outgoingDataBuffer;
Index: /trunk/src/network/access/qnetworkreplyimpl_p.h
===================================================================
--- /trunk/src/network/access/qnetworkreplyimpl_p.h	(revision 768)
+++ /trunk/src/network/access/qnetworkreplyimpl_p.h	(revision 769)
@@ -146,6 +146,11 @@
     void emitUploadProgress(qint64 bytesSent, qint64 bytesTotal);
     qint64 nextDownstreamBlockSize() const;
+
+    void initCacheSaveDevice();
+    void appendDownstreamDataSignalEmissions();
     void appendDownstreamData(QByteDataBuffer &data);
     void appendDownstreamData(QIODevice *data);
+    void appendDownstreamData(const QByteArray &data);
+
     void finished();
     void error(QNetworkReply::NetworkError code, const QString &errorString);
Index: /trunk/src/network/access/qnetworkrequest.cpp
===================================================================
--- /trunk/src/network/access/qnetworkrequest.cpp	(revision 768)
+++ /trunk/src/network/access/qnetworkrequest.cpp	(revision 769)
@@ -139,4 +139,6 @@
         determine if the requested redirection should be allowed,
         according to its security policies.
+        The returned URL might be relative. Use QUrl::resolved()
+        to create an absolute URL out of it.
 
     \value ConnectionEncryptedAttribute
@@ -650,5 +652,5 @@
     QList<QNetworkCookie> result;
     QList<QByteArray> cookieList = raw.split(';');
-    foreach (QByteArray cookie, cookieList) {
+    foreach (const QByteArray &cookie, cookieList) {
         QList<QNetworkCookie> parsed = QNetworkCookie::parseCookies(cookie.trimmed());
         if (parsed.count() != 1)
Index: /trunk/src/network/kernel/qauthenticator.cpp
===================================================================
--- /trunk/src/network/kernel/qauthenticator.cpp	(revision 768)
+++ /trunk/src/network/kernel/qauthenticator.cpp	(revision 769)
@@ -271,5 +271,5 @@
     case Ntlm:
         // #### extract from header
-        realm = QString();
+        realm.clear();
         break;
     case DigestMd5: {
@@ -282,5 +282,5 @@
     }
     default:
-        realm = QString();
+        realm.clear();
         challenge = QByteArray();
         phase = Invalid;
Index: /trunk/src/network/kernel/qhostinfo.cpp
===================================================================
--- /trunk/src/network/kernel/qhostinfo.cpp	(revision 768)
+++ /trunk/src/network/kernel/qhostinfo.cpp	(revision 769)
@@ -45,12 +45,8 @@
 #include "QtCore/qscopedpointer.h"
 #include <qabstracteventdispatcher.h>
-#include <private/qunicodetables_p.h>
 #include <qcoreapplication.h>
 #include <qmetaobject.h>
-#include <qregexp.h>
-#include <private/qnativesocketengine_p.h>
 #include <qstringlist.h>
 #include <qthread.h>
-#include <qtimer.h>
 #include <qurl.h>
 
@@ -112,4 +108,11 @@
     To retrieve the name of the local host, use the static
     QHostInfo::localHostName() function.
+
+    \note Since Qt 4.6.1 QHostInfo is using multiple threads for DNS lookup
+    instead of one dedicated DNS thread. This improves performance,
+    but also changes the order of signal emissions when using lookupHost()
+    compared to previous versions of Qt.
+    \note Since Qt 4.6.3 QHostInfo is using a small internal 60 second DNS cache
+    for performance improvements.
 
     \sa QAbstractSocket, {http://www.rfc-editor.org/rfc/rfc3492.txt}{RFC 3492}
@@ -182,7 +185,24 @@
     result.data()->emitResultsReady(hostInfo);
 #else
-    QHostInfoRunnable* runnable = new QHostInfoRunnable(name, id);
-    QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection);
-    theHostInfoLookupManager()->scheduleLookup(runnable);
+    QHostInfoLookupManager *manager = theHostInfoLookupManager();
+    if (manager) {
+        // the application is still alive
+        if (manager->cache.isEnabled()) {
+            // check cache first
+            bool valid = false;
+            QHostInfo info = manager->cache.get(name, &valid);
+            if (valid) {
+                info.setLookupId(id);
+                QHostInfoResult result;
+                QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection);
+                result.emitResultsReady(info);
+                return id;
+            }
+        }
+        // cache is not enabled or it was not in the cache, do normal lookup
+        QHostInfoRunnable* runnable = new QHostInfoRunnable(name, id);
+        QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection);
+        manager->scheduleLookup(runnable);
+    }
 #endif
 
@@ -419,12 +439,22 @@
     }
 
-    // check cache
-    // FIXME
-
-    // if not in cache: OS lookup
-    QHostInfo hostInfo = QHostInfoAgent::fromName(toBeLookedUp);
-
-    // save to cache
-    // FIXME
+    QHostInfo hostInfo;
+
+    // QHostInfo::lookupHost already checks the cache. However we need to check
+    // it here too because it might have been cache saved by another QHostInfoRunnable
+    // in the meanwhile while this QHostInfoRunnable was scheduled but not running
+    if (manager->cache.isEnabled()) {
+        // check the cache first
+        bool valid = false;
+        hostInfo = manager->cache.get(toBeLookedUp, &valid);
+        if (!valid) {
+            // not in cache, we need to do the lookup and store the result in the cache
+            hostInfo = QHostInfoAgent::fromName(toBeLookedUp);
+            manager->cache.put(toBeLookedUp, hostInfo);
+        }
+    } else {
+        // cache is not enabled, just do the lookup and continue
+        hostInfo = QHostInfoAgent::fromName(toBeLookedUp);
+    }
 
     // check aborted again
@@ -446,4 +476,5 @@
 {
     moveToThread(QCoreApplicationPrivate::mainThread());
+    connect(QCoreApplication::instance(), SIGNAL(destroyed()), SLOT(waitForThreadPoolDone()), Qt::DirectConnection);
     threadPool.setMaxThreadCount(5); // do 5 DNS lookups in parallel
 }
@@ -452,4 +483,9 @@
 {
     wasDeleted = true;
+
+    // don't qDeleteAll currentLookups, the QThreadPool has ownership
+    qDeleteAll(postponedLookups);
+    qDeleteAll(scheduledLookups);
+    qDeleteAll(finishedLookups);
 }
 
@@ -512,11 +548,9 @@
             }
 
-            if (scheduled && threadPool.tryStart(scheduled)) {
+            if (scheduled && currentLookups.size() < threadPool.maxThreadCount()) {
                 // runnable now running in new thread, track this in currentLookups
+                threadPool.start(scheduled);
                 iterator.remove();
                 currentLookups.append(scheduled);
-            } else if (scheduled) {
-                // wanted to start, but could not because thread pool is busy
-                break;
             } else {
                 // was postponed, continue iterating
@@ -571,4 +605,104 @@
 }
 
+// This function returns immediatly when we had a result in the cache, else it will later emit a signal
+QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id)
+{
+    *valid = false;
+    *id = -1;
+
+    // check cache
+    QHostInfoLookupManager* manager = theHostInfoLookupManager();
+    if (manager && manager->cache.isEnabled()) {
+        QHostInfo info = manager->cache.get(name, valid);
+        if (*valid) {
+            return info;
+        }
+    }
+
+    // was not in cache, trigger lookup
+    *id = QHostInfo::lookupHost(name, receiver, member);
+
+    // return empty response, valid==false
+    return QHostInfo();
+}
+
+void qt_qhostinfo_clear_cache()
+{
+    QHostInfoLookupManager* manager = theHostInfoLookupManager();
+    if (manager) {
+        manager->cache.clear();
+    }
+}
+
+void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(bool e)
+{
+    QHostInfoLookupManager* manager = theHostInfoLookupManager();
+    if (manager) {
+        manager->cache.setEnabled(e);
+    }
+}
+
+// cache for 60 seconds
+// cache 64 items
+QHostInfoCache::QHostInfoCache() : max_age(60), enabled(true), cache(64)
+{
+#ifdef QT_QHOSTINFO_CACHE_DISABLED_BY_DEFAULT
+    enabled = false;
+#endif
+}
+
+bool QHostInfoCache::isEnabled()
+{
+    return enabled;
+}
+
+// this function is currently only used for the auto tests
+// and not usable by public API
+void QHostInfoCache::setEnabled(bool e)
+{
+    enabled = e;
+}
+
+
+QHostInfo QHostInfoCache::get(const QString &name, bool *valid)
+{
+    QMutexLocker locker(&this->mutex);
+
+    *valid = false;
+    if (cache.contains(name)) {
+        QHostInfoCacheElement *element = cache.object(name);
+        if (element->age.elapsed() < max_age*1000)
+            *valid = true;
+        return element->info;
+
+        // FIXME idea:
+        // if too old but not expired, trigger a new lookup
+        // to freshen our cache
+    }
+
+    return QHostInfo();
+}
+
+void QHostInfoCache::put(const QString &name, const QHostInfo &info)
+{
+    // if the lookup failed, don't cache
+    if (info.error() != QHostInfo::NoError)
+        return;
+
+    QHostInfoCacheElement* element = new QHostInfoCacheElement();
+    element->info = info;
+    element->age = QTime();
+    element->age.start();
+
+    QMutexLocker locker(&this->mutex);
+    cache.insert(name, element); // cache will take ownership
+}
+
+void QHostInfoCache::clear()
+{
+    QMutexLocker locker(&this->mutex);
+    cache.clear();
+}
+
 #endif // QT_NO_THREAD
 
Index: /trunk/src/network/kernel/qhostinfo_p.h
===================================================================
--- /trunk/src/network/kernel/qhostinfo_p.h	(revision 768)
+++ /trunk/src/network/kernel/qhostinfo_p.h	(revision 769)
@@ -69,4 +69,6 @@
 #include "QtCore/qlist.h"
 #include "QtCore/qqueue.h"
+#include <QTime>
+#include <QCache>
 #endif
 
@@ -112,4 +114,32 @@
 
 #ifndef QT_NO_THREAD
+// These functions are outside of the QHostInfo class and strictly internal.
+// Do NOT use them outside of QAbstractSocket.
+QHostInfo Q_NETWORK_EXPORT qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id);
+void Q_NETWORK_EXPORT qt_qhostinfo_clear_cache();
+void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(bool e);
+
+class QHostInfoCache
+{
+public:
+    QHostInfoCache();
+    const int max_age; // seconds
+
+    QHostInfo get(const QString &name, bool *valid);
+    void put(const QString &name, const QHostInfo &info);
+    void clear();
+
+    bool isEnabled();
+    void setEnabled(bool e);
+private:
+    bool enabled;
+    struct QHostInfoCacheElement {
+        QHostInfo info;
+        QTime age;
+    };
+    QCache<QString,QHostInfoCacheElement> cache;
+    QMutex mutex;
+};
+
 // the following classes are used for the (normal) case: We use multiple threads to lookup DNS
 
@@ -142,4 +172,5 @@
     bool wasAborted(int id);
 
+    QHostInfoCache cache;
 protected:
     QList<QHostInfoRunnable*> currentLookups; // in progress
@@ -154,5 +185,9 @@
 
     bool wasDeleted;
+
+private slots:
+    void waitForThreadPoolDone() { threadPool.waitForDone(); }
 };
+
 #endif
 
Index: /trunk/src/network/kernel/qhostinfo_unix.cpp
===================================================================
--- /trunk/src/network/kernel/qhostinfo_unix.cpp	(revision 768)
+++ /trunk/src/network/kernel/qhostinfo_unix.cpp	(revision 769)
@@ -45,4 +45,5 @@
 
 #include "qhostinfo_p.h"
+#include "private/qnativesocketengine_p.h"
 #include "qiodevice.h"
 #include <qbytearray.h>
Index: /trunk/src/network/kernel/qhostinfo_win.cpp
===================================================================
--- /trunk/src/network/kernel/qhostinfo_win.cpp	(revision 768)
+++ /trunk/src/network/kernel/qhostinfo_win.cpp	(revision 769)
@@ -51,5 +51,4 @@
 #include <ws2tcpip.h>
 #include <qlibrary.h>
-#include <qtimer.h>
 #include <qmutex.h>
 #include <qurl.h>
Index: /trunk/src/network/kernel/qnetworkinterface.cpp
===================================================================
--- /trunk/src/network/kernel/qnetworkinterface.cpp	(revision 768)
+++ /trunk/src/network/kernel/qnetworkinterface.cpp	(revision 769)
@@ -542,5 +542,5 @@
     QList<QSharedDataPointer<QNetworkInterfacePrivate> > privs = manager()->allInterfaces();
     QList<QNetworkInterface> result;
-    foreach (QSharedDataPointer<QNetworkInterfacePrivate> p, privs) {
+    foreach (const QSharedDataPointer<QNetworkInterfacePrivate> &p, privs) {
         QNetworkInterface item;
         item.d = p;
@@ -561,5 +561,5 @@
     QList<QSharedDataPointer<QNetworkInterfacePrivate> > privs = manager()->allInterfaces();
     QList<QHostAddress> result;
-    foreach (const QSharedDataPointer<QNetworkInterfacePrivate> p, privs) {
+    foreach (const QSharedDataPointer<QNetworkInterfacePrivate> &p, privs) {
         foreach (const QNetworkAddressEntry &entry, p->addressEntries)
             result += entry.ip();
Index: /trunk/src/network/socket/qabstractsocket.cpp
===================================================================
--- /trunk/src/network/socket/qabstractsocket.cpp	(revision 768)
+++ /trunk/src/network/socket/qabstractsocket.cpp	(revision 769)
@@ -156,4 +156,7 @@
     examples for an overview of both approaches.
 
+    \note We discourage the use of the blocking functions together
+    with signals. One of the two possibilities should be used.
+
     QAbstractSocket can be used with QTextStream and QDataStream's
     stream operators (operator<<() and operator>>()). There is one
@@ -170,4 +173,8 @@
     the host lookup has succeeded.
 
+    \note Since Qt 4.6.3 QAbstractSocket may emit hostFound()
+    directly from the connectToHost() call since a DNS result could have been
+    cached.
+
     \sa connected()
 */
@@ -178,4 +185,8 @@
     This signal is emitted after connectToHost() has been called and
     a connection has been successfully established.
+
+    \note On some operating systems the connected() signal may
+    be directly emitted from the connectToHost() call for connections
+    to the localhost.
 
     \sa connectToHost(), disconnected()
@@ -352,4 +363,6 @@
 #include "qabstractsocket_p.h"
 
+#include "private/qhostinfo_p.h"
+
 #include <qabstracteventdispatcher.h>
 #include <qdatetime.h>
@@ -1367,6 +1380,18 @@
 #endif
     } else {
-        if (d->threadData->eventDispatcher)
-            d->hostLookupId = QHostInfo::lookupHost(hostName, this, SLOT(_q_startConnecting(QHostInfo)));
+        if (d->threadData->eventDispatcher) {
+            // this internal API for QHostInfo either immediatly gives us the desired
+            // QHostInfo from cache or later calls the _q_startConnecting slot.
+            bool immediateResultValid = false;
+            QHostInfo hostInfo = qt_qhostinfo_lookup(hostName,
+                                                     this,
+                                                     SLOT(_q_startConnecting(QHostInfo)),
+                                                     &immediateResultValid,
+                                                     &d->hostLookupId);
+            if (immediateResultValid) {
+                d->hostLookupId = -1;
+                d->_q_startConnecting(hostInfo);
+            }
+        }
     }
 
@@ -1683,6 +1708,9 @@
     If msecs is -1, this function will not time out.
 
-    Note: This function may wait slightly longer than \a msecs,
+    \note This function may wait slightly longer than \a msecs,
     depending on the time it takes to complete the host lookup.
+
+    \note Multiple calls to this functions do not accumulate the time.
+    If the function times out, the connecting process will be aborted.
 
     \sa connectToHost(), connected()
@@ -1723,5 +1751,5 @@
     }
     if (state() == UnconnectedState)
-        return false;
+        return false; // connect not im progress anymore!
 
     bool timedOut = true;
@@ -2355,4 +2383,8 @@
         qDebug("QAbstractSocket::disconnectFromHost() aborting immediately");
 #endif
+        if (d->state == HostLookupState) {
+            QHostInfo::abortHostLookup(d->hostLookupId);
+            d->hostLookupId = -1;
+        }
     } else {
         // Perhaps emit closing()
Index: /trunk/src/network/socket/qlocalserver.cpp
===================================================================
--- /trunk/src/network/socket/qlocalserver.cpp	(revision 768)
+++ /trunk/src/network/socket/qlocalserver.cpp	(revision 769)
@@ -123,7 +123,7 @@
     d->pendingConnections.clear();
     d->closeServer();
-    d->serverName = QString();
-    d->fullServerName = QString();
-    d->errorString = QString();
+    d->serverName.clear();
+    d->fullServerName.clear();
+    d->errorString.clear();
     d->error = QAbstractSocket::UnknownSocketError;
 }
@@ -229,6 +229,6 @@
 
     if (!d->listen(name)) {
-        d->serverName = QString();
-        d->fullServerName = QString();
+        d->serverName.clear();
+        d->fullServerName.clear();
         return false;
     }
Index: /trunk/src/network/socket/qlocalserver_win.cpp
===================================================================
--- /trunk/src/network/socket/qlocalserver_win.cpp	(revision 768)
+++ /trunk/src/network/socket/qlocalserver_win.cpp	(revision 769)
@@ -168,6 +168,6 @@
         } else {
             if (GetLastError() != ERROR_IO_INCOMPLETE) {
+                q->close();
                 setError(QLatin1String("QLocalServerPrivate::_q_onNewConnection"));
-                closeServer();
                 return;
             }
Index: /trunk/src/network/socket/qlocalsocket_p.h
===================================================================
--- /trunk/src/network/socket/qlocalsocket_p.h	(revision 768)
+++ /trunk/src/network/socket/qlocalsocket_p.h	(revision 769)
@@ -129,8 +129,6 @@
     void _q_error(QAbstractSocket::SocketError newError);
 #elif defined(Q_OS_WIN)
-    ~QLocalSocketPrivate() {
-	CloseHandle(overlapped.hEvent);
-    }
-
+    ~QLocalSocketPrivate();
+    void destroyPipeHandles();
     void setErrorString(const QString &function);
     void _q_notified();
Index: /trunk/src/network/socket/qlocalsocket_tcp.cpp
===================================================================
--- /trunk/src/network/socket/qlocalsocket_tcp.cpp	(revision 768)
+++ /trunk/src/network/socket/qlocalsocket_tcp.cpp	(revision 769)
@@ -103,6 +103,6 @@
     case QAbstractSocket::UnconnectedState:
         state = QLocalSocket::UnconnectedState;
-        serverName = QString();
-        fullServerName = QString();
+        serverName.clear();
+        fullServerName.clear();
         break;
     case QAbstractSocket::ConnectingState:
@@ -219,5 +219,5 @@
         return;
 
-    d->errorString = QString();
+    d->errorString.clear();
     d->state = ConnectingState;
     emit stateChanged(d->state);
@@ -334,6 +334,6 @@
     Q_D(QLocalSocket);
     d->tcpSocket->close();
-    d->serverName = QString();
-    d->fullServerName = QString();
+    d->serverName.clear();
+    d->fullServerName.clear();
     QIODevice::close();
 }
Index: /trunk/src/network/socket/qlocalsocket_unix.cpp
===================================================================
--- /trunk/src/network/socket/qlocalsocket_unix.cpp	(revision 768)
+++ /trunk/src/network/socket/qlocalsocket_unix.cpp	(revision 769)
@@ -110,6 +110,6 @@
     case QAbstractSocket::UnconnectedState:
         state = QLocalSocket::UnconnectedState;
-        serverName = QString();
-        fullServerName = QString();
+        serverName.clear();
+        fullServerName.clear();
         break;
     case QAbstractSocket::ConnectingState:
@@ -226,5 +226,5 @@
         return;
 
-    d->errorString = QString();
+    d->errorString.clear();
     d->unixSocket.setSocketState(QAbstractSocket::ConnectingState);
     d->state = ConnectingState;
@@ -342,5 +342,5 @@
     }
     connectingSocket = -1;
-    connectingName = QString();
+    connectingName.clear();
     connectingOpenMode = 0;
 }
@@ -439,8 +439,8 @@
         ::close(d->connectingSocket);
     d->connectingSocket = -1;
-    d->connectingName = QString();
+    d->connectingName.clear();
     d->connectingOpenMode = 0;
-    d->serverName = QString();
-    d->fullServerName = QString();
+    d->serverName.clear();
+    d->fullServerName.clear();
     QIODevice::close();
 }
Index: /trunk/src/network/socket/qlocalsocket_win.cpp
===================================================================
--- /trunk/src/network/socket/qlocalsocket_win.cpp	(revision 768)
+++ /trunk/src/network/socket/qlocalsocket_win.cpp	(revision 769)
@@ -40,5 +40,4 @@
 ****************************************************************************/
 
-#include "qlocalsocket.h"
 #include "qlocalsocket_p.h"
 
@@ -109,4 +108,18 @@
        state(QLocalSocket::UnconnectedState)
 {
+}
+
+QLocalSocketPrivate::~QLocalSocketPrivate()
+{
+    destroyPipeHandles();
+    CloseHandle(overlapped.hEvent);
+}
+
+void QLocalSocketPrivate::destroyPipeHandles()
+{
+    if (handle != INVALID_HANDLE_VALUE) {
+        DisconnectNamedPipe(handle);
+        CloseHandle(handle);
+    }
 }
 
@@ -389,6 +402,5 @@
     d->pendingReadyRead = false;
     d->pipeClosed = false;
-    DisconnectNamedPipe(d->handle);
-    CloseHandle(d->handle);
+    d->destroyPipeHandles();
     d->handle = INVALID_HANDLE_VALUE;
     ResetEvent(d->overlapped.hEvent);
@@ -413,4 +425,13 @@
 {
     Q_D(QLocalSocket);
+
+    // Are we still connected?
+    if (!isValid()) {
+        // If we have unwritten data, the pipeWriter is still present.
+        // It must be destroyed before close() to prevent an infinite loop.
+        delete d->pipeWriter;
+        d->pipeWriter = 0;
+    }
+
     flush();
     if (d->pipeWriter && d->pipeWriter->bytesToWrite() != 0) {
@@ -525,5 +546,8 @@
 {
     Q_D(const QLocalSocket);
-    return (d->handle != INVALID_HANDLE_VALUE);
+    if (d->handle == INVALID_HANDLE_VALUE)
+        return false;
+
+    return PeekNamedPipe(d->handle, NULL, 0, NULL, NULL, NULL);
 }
 
Index: /trunk/src/network/socket/qnativesocketengine.cpp
===================================================================
--- /trunk/src/network/socket/qnativesocketengine.cpp	(revision 768)
+++ /trunk/src/network/socket/qnativesocketengine.cpp	(revision 769)
@@ -780,6 +780,9 @@
         return -1;
     } else if (readBytes == -1) {
-        d->setError(QAbstractSocket::NetworkError,
-                    QNativeSocketEnginePrivate::ReadErrorString);
+        if (!d->hasSetSocketError) {
+            d->hasSetSocketError = true;
+            d->socketError = QAbstractSocket::NetworkError;
+            d->socketErrorString = qt_error_string();
+        }
         close();
         return -1;
Index: /trunk/src/network/socket/qnativesocketengine_unix.cpp
===================================================================
--- /trunk/src/network/socket/qnativesocketengine_unix.cpp	(revision 768)
+++ /trunk/src/network/socket/qnativesocketengine_unix.cpp	(revision 769)
@@ -602,8 +602,13 @@
     // well be 0, so we can't check recvfrom's return value.
     ssize_t readBytes;
+#ifdef Q_OS_SYMBIAN
+    char c;
+    readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize);
+#else
     do {
         char c;
         readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize);
     } while (readBytes == -1 && errno == EINTR);
+#endif
 
     // If there's no error, or if our buffer was too small, there must be a
@@ -662,4 +667,9 @@
 
     ssize_t recvFromResult = 0;
+#ifdef Q_OS_SYMBIAN
+    char c;
+    recvFromResult = ::recvfrom(socketDescriptor, maxSize ? data : &c, maxSize ? maxSize : 1,
+                                0, &aa.a, &sz);
+#else
     do {
         char c;
@@ -667,4 +677,5 @@
                                     0, &aa.a, &sz);
     } while (recvFromResult == -1 && errno == EINTR);
+#endif
 
     if (recvFromResult == -1) {
@@ -833,15 +844,11 @@
     qt_ignore_sigpipe();
 
-    // loop while ::write() returns -1 and errno == EINTR, in case
-    // of an interrupting signal.
     ssize_t writtenBytes;
-    do {
-#ifdef Q_OS_SYMBIAN
-	    writtenBytes = ::write(socketDescriptor, data, len);
-#else
-        writtenBytes = qt_safe_write(socketDescriptor, data, len);
-#endif
-        // writtenBytes = QT_WRITE(socketDescriptor, data, len); ### TODO S60: Should this line be removed or the one above it?
-    } while (writtenBytes < 0 && errno == EINTR);
+#ifdef Q_OS_SYMBIAN
+    // Symbian does not support signals natively and Open C returns EINTR when moving to offline
+    writtenBytes = ::write(socketDescriptor, data, len);
+#else
+    writtenBytes = qt_safe_write(socketDescriptor, data, len);
+#endif
 
     if (writtenBytes < 0) {
@@ -883,11 +890,9 @@
 
     ssize_t r = 0;
-    do {
-#ifdef Q_OS_SYMBIAN
-        r = ::read(socketDescriptor, data, maxSize);
-#else
-        r = qt_safe_read(socketDescriptor, data, maxSize);
-#endif
-    } while (r == -1 && errno == EINTR);
+#ifdef Q_OS_SYMBIAN
+    r = ::read(socketDescriptor, data, maxSize);
+#else
+    r = qt_safe_read(socketDescriptor, data, maxSize);
+#endif
 
     if (r < 0) {
@@ -904,5 +909,5 @@
         case EINVAL:
         case EIO:
-            setError(QAbstractSocket::NetworkError, ReadErrorString);
+            //error string is now set in read(), not here in nativeRead()
             break;
 #ifdef Q_OS_SYMBIAN
Index: /trunk/src/network/socket/qnativesocketengine_win.cpp
===================================================================
--- /trunk/src/network/socket/qnativesocketengine_win.cpp	(revision 768)
+++ /trunk/src/network/socket/qnativesocketengine_win.cpp	(revision 769)
@@ -1069,5 +1069,5 @@
         case WSAEBADF:
         case WSAEINVAL:
-            setError(QAbstractSocket::NetworkError, ReadErrorString);
+            //error string is now set in read(), not here in nativeRead()
             break;
         case WSAECONNRESET:
Index: /trunk/src/network/socket/qtcpserver.cpp
===================================================================
--- /trunk/src/network/socket/qtcpserver.cpp	(revision 768)
+++ /trunk/src/network/socket/qtcpserver.cpp	(revision 769)
@@ -79,4 +79,14 @@
     use waitForNewConnection(), which blocks until either a
     connection is available or a timeout expires.
+
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c NetworkServices platform security capability. If the client
+    process lacks this capability, it will lead to a panic.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
 
     \sa QTcpSocket, {Fortune Server Example}, {Threaded Fortune Server Example},
@@ -514,4 +524,8 @@
     connections.
 
+    \note The returned QTcpSocket object cannot be used from another
+    thread. If you want to use an incoming connection from another thread,
+    you need to override incomingConnection().
+
     \sa hasPendingConnections()
 */
@@ -543,4 +557,9 @@
     may not be usable with native socket functions, and should only be
     used with QTcpSocket::setSocketDescriptor().
+
+    \note If you want to handle an incoming connection as a new QTcpSocket
+    object in another thread you have to pass the socketDescriptor
+    to the other thread and create the QTcpSocket object there and
+    use its setSocketDescriptor() method.
 
     \sa newConnection(), nextPendingConnection()
Index: /trunk/src/network/socket/qtcpsocket.cpp
===================================================================
--- /trunk/src/network/socket/qtcpsocket.cpp	(revision 768)
+++ /trunk/src/network/socket/qtcpsocket.cpp	(revision 769)
@@ -61,4 +61,14 @@
     \bold{Note:} TCP sockets cannot be opened in QIODevice::Unbuffered mode.
 
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c NetworkServices platform security capability. If the client
+    process lacks this capability, it will result in a panic.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
+
     \sa QTcpServer, QUdpSocket, QFtp, QNetworkAccessManager,
     {Fortune Server Example}, {Fortune Client Example},
Index: /trunk/src/network/socket/qudpsocket.cpp
===================================================================
--- /trunk/src/network/socket/qudpsocket.cpp	(revision 768)
+++ /trunk/src/network/socket/qudpsocket.cpp	(revision 769)
@@ -86,4 +86,14 @@
     \l{network/broadcastreceiver}{Broadcast Receiver} examples
     illustrate how to use QUdpSocket in applications.
+
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c NetworkServices platform security capability. If the client
+    process lacks this capability, operations will result in a panic.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
 
     \sa QTcpSocket
Index: /trunk/src/network/ssl/qsslcertificate.cpp
===================================================================
--- /trunk/src/network/ssl/qsslcertificate.cpp	(revision 768)
+++ /trunk/src/network/ssl/qsslcertificate.cpp	(revision 769)
@@ -635,9 +635,9 @@
     for (int i = 0; i <= array.size() - 64; i += 64) {
         tmp += QByteArray::fromRawData(array.data() + i, 64);
-        tmp += "\n";
+        tmp += '\n';
     }
     if (int remainder = array.size() % 64) {
         tmp += QByteArray::fromRawData(array.data() + array.size() - remainder, remainder);
-        tmp += "\n";
+        tmp += '\n';
     }
 
Index: /trunk/src/network/ssl/qsslkey.cpp
===================================================================
--- /trunk/src/network/ssl/qsslkey.cpp	(revision 768)
+++ /trunk/src/network/ssl/qsslkey.cpp	(revision 769)
@@ -120,7 +120,5 @@
         return;
 
-    void *phrase = passPhrase.isEmpty()
-        ? (void *)0
-        : (void *)passPhrase.constData();
+    void *phrase = (void *)passPhrase.constData();
 
     if (algorithm == QSsl::Rsa) {
Index: /trunk/src/network/ssl/qsslsocket.cpp
===================================================================
--- /trunk/src/network/ssl/qsslsocket.cpp	(revision 768)
+++ /trunk/src/network/ssl/qsslsocket.cpp	(revision 769)
@@ -157,4 +157,14 @@
     will get emitted as soon as data has been written to the TCP socket.
 
+    \section1 Symbian Platform Security Requirements
+
+    On Symbian, processes which use this class must have the
+    \c NetworkServices platform security capability. If the client
+    process lacks this capability, operations will fail.
+
+    Platform security capabilities are added via the
+    \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY}
+    qmake variable.
+
     \sa QSslCertificate, QSslCipher, QSslError
 */
@@ -1110,5 +1120,5 @@
     Q_D(QSslSocket);
     d->configuration.ciphers.clear();
-    foreach (QString cipherName, ciphers.split(QLatin1String(":"),QString::SkipEmptyParts)) {
+    foreach (const QString &cipherName, ciphers.split(QLatin1String(":"),QString::SkipEmptyParts)) {
         for (int i = 0; i < 3; ++i) {
             // ### Crude
Index: /trunk/src/network/ssl/qsslsocket_openssl.cpp
===================================================================
--- /trunk/src/network/ssl/qsslsocket_openssl.cpp	(revision 768)
+++ /trunk/src/network/ssl/qsslsocket_openssl.cpp	(revision 769)
@@ -819,5 +819,5 @@
             if (!regexp.exactMatch(peerName)) {
                 bool matched = false;
-                foreach (QString altName, configuration.peerCertificate
+                foreach (const QString &altName, configuration.peerCertificate
                          .alternateSubjectNames().values(QSsl::DnsEntry)) {
                     regexp.setPattern(altName);
Index: /trunk/src/network/ssl/qsslsocket_openssl_symbols.cpp
===================================================================
--- /trunk/src/network/ssl/qsslsocket_openssl_symbols.cpp	(revision 768)
+++ /trunk/src/network/ssl/qsslsocket_openssl_symbols.cpp	(revision 769)
@@ -743,5 +743,5 @@
 bool q_resolveOpenSslSymbols()
 {
-#ifdef QT_NO_SSL
+#ifdef QT_NO_OPENSSL
     return false;
 #endif
Index: /trunk/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
===================================================================
--- /trunk/src/opengl/gl2paintengineex/qglengineshadermanager.cpp	(revision 768)
+++ /trunk/src/opengl/gl2paintengineex/qglengineshadermanager.cpp	(revision 769)
@@ -266,8 +266,10 @@
     do {
         QByteArray source;
+        // Insert the custom stage before the srcPixel shader to work around an ATI driver bug
+        // where you cannot forward declare a function that takes a sampler as argument.
+        if (prog.srcPixelFragShader == CustomImageSrcFragmentShader)
+            source.append(prog.customStageSource);
         source.append(qShaderSnippets[prog.mainFragShader]);
         source.append(qShaderSnippets[prog.srcPixelFragShader]);
-        if (prog.srcPixelFragShader == CustomImageSrcFragmentShader)
-            source.append(prog.customStageSource);
         if (prog.compositionFragShader)
             source.append(qShaderSnippets[prog.compositionFragShader]);
@@ -766,6 +768,6 @@
     QGLContextPrivate* ctx_d = ctx->d_func();
     ctx_d->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, true);
-    ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, currentShaderProg->useTextureCoords);
-    ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, currentShaderProg->useOpacityAttribute);
+    ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, currentShaderProg && currentShaderProg->useTextureCoords);
+    ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, currentShaderProg && currentShaderProg->useOpacityAttribute);
 
     shaderProgNeedsChanging = false;
Index: /trunk/src/opengl/gl2paintengineex/qglengineshadersource_p.h
===================================================================
--- /trunk/src/opengl/gl2paintengineex/qglengineshadersource_p.h	(revision 768)
+++ /trunk/src/opengl/gl2paintengineex/qglengineshadersource_p.h	(revision 769)
@@ -332,12 +332,16 @@
     uniform   lowp    sampler2D imageTexture; \n\
     lowp vec4 srcPixel() \n\
-    { \n\
-        return texture2D(imageTexture, textureCoords); \n\
-    }\n";
+    { \n"
+#ifdef QT_OPENGL_ES_2
+        // work-around for driver bug
+        "return 1.0 * texture2D(imageTexture, textureCoords); \n"
+#else
+        "return texture2D(imageTexture, textureCoords); \n"
+#endif
+    "}\n";
 
 static const char* const qglslCustomSrcFragmentShader = "\n\
     varying   highp   vec2      textureCoords; \n\
     uniform   lowp    sampler2D imageTexture; \n\
-    lowp vec4 customShader(lowp sampler2D texture, highp vec2 coords); \n\
     lowp vec4 srcPixel() \n\
     { \n\
Index: /trunk/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
===================================================================
--- /trunk/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp	(revision 768)
+++ /trunk/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp	(revision 769)
@@ -90,4 +90,7 @@
 
 //#define QT_GL_NO_SCISSOR_TEST
+#if defined(Q_WS_WIN)
+extern Q_GUI_EXPORT bool qt_cleartype_enabled;
+#endif
 
 extern QImage qt_imageForBrush(int brushStyle, bool invert);
@@ -182,5 +185,5 @@
 
         glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT);
-        ctx->d_func()->bindTexture(texImage, GL_TEXTURE_2D, GL_RGBA, true, QGLContext::InternalBindOption);
+        ctx->d_func()->bindTexture(texImage, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption);
         updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform);
     }
@@ -1232,12 +1235,12 @@
                                             : d->glyphCacheType;
 
-    if (txtype > QTransform::TxTranslate)
-        glyphType = QFontEngineGlyphCache::Raster_A8;
-
-    if (glyphType == QFontEngineGlyphCache::Raster_RGBMask
-        && state()->composition_mode != QPainter::CompositionMode_Source
-        && state()->composition_mode != QPainter::CompositionMode_SourceOver)
-    {
-        drawCached = false;
+
+    if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) {
+        if (d->device->alphaRequested() || txtype > QTransform::TxTranslate
+            || (state()->composition_mode != QPainter::CompositionMode_Source
+            && state()->composition_mode != QPainter::CompositionMode_SourceOver))
+        {
+            glyphType = QFontEngineGlyphCache::Raster_A8;
+        }
     }
 
@@ -1556,5 +1559,4 @@
 #if !defined(QT_OPENGL_ES_2)
 #if defined(Q_WS_WIN)
-    extern Q_GUI_EXPORT bool qt_cleartype_enabled;
     if (qt_cleartype_enabled)
 #endif
@@ -1596,4 +1598,5 @@
     delete d->shaderManager;
     d->shaderManager = 0;
+    d->currentBrush = QBrush();
 
 #ifdef QT_OPENGL_CACHE_AS_VBOS
Index: /trunk/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
===================================================================
--- /trunk/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp	(revision 768)
+++ /trunk/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp	(revision 769)
@@ -42,4 +42,6 @@
 #include "qtextureglyphcache_gl_p.h"
 #include "qpaintengineex_opengl2_p.h"
+
+QT_BEGIN_NAMESPACE
 
 #ifdef Q_WS_WIN
@@ -244,2 +246,4 @@
 #endif
 }
+
+QT_END_NAMESPACE
Index: /trunk/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
===================================================================
--- /trunk/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp	(revision 768)
+++ /trunk/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp	(revision 769)
@@ -145,9 +145,15 @@
 
     const qreal *endPts = pts + (count<<1);
-    const qreal *startPts;
+    const qreal *startPts = 0;
 
     Qt::PenCapStyle cap = m_cap_style;
 
     if (!types) {
+        // skip duplicate points
+        while((pts + 2) < endPts && pts[0] == pts[2] && pts[1] == pts[3])
+            pts += 2;
+        if ((pts + 2) == endPts)
+            return;
+
         startPts = pts;
 
@@ -162,6 +168,8 @@
         pts += 2;
         while (pts < endPts) {
-            join(pts);
-            lineTo(pts);
+            if (m_cx != pts[0] || m_cy != pts[1]) {
+                join(pts);
+                lineTo(pts);
+            }
             pts += 2;
         }
@@ -170,5 +178,5 @@
 
     } else {
-        bool endsAtStart;
+        bool endsAtStart = false;
         while (pts < endPts) {
             switch (*types) {
Index: /trunk/src/opengl/qgl.cpp
===================================================================
--- /trunk/src/opengl/qgl.cpp	(revision 768)
+++ /trunk/src/opengl/qgl.cpp	(revision 769)
@@ -103,4 +103,8 @@
 #if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS)
 QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs;
+#endif
+
+#ifdef Q_WS_X11
+extern const QX11Info *qt_x11Info(const QPaintDevice *pd);
 #endif
 
@@ -1531,5 +1535,12 @@
             for (int x=0; x < w; ++x) {
                 const uint pixel = *q;
-                *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00);
+                if (alpha_format && include_alpha) {
+                    *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff)
+                         | (pixel & 0xff00ff00);
+                } else {
+                    *q = 0xff000000 | ((pixel << 16) & 0xff0000)
+                         | ((pixel >> 16) & 0xff) | (pixel & 0x00ff00);
+                }
+
                 q++;
             }
@@ -1542,5 +1553,6 @@
 QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha)
 {
-    QImage img(size, alpha_format ? QImage::Format_ARGB32 : QImage::Format_RGB32);
+    QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32
+                                                     : QImage::Format_RGB32);
     int w = size.width();
     int h = size.height();
@@ -1591,7 +1603,7 @@
     qt_gl_texture_cache = this;
 
-    QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTextures);
+    QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTexturesForPixampData);
     QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(cleanupBeforePixmapDestruction);
-    QImagePixmapCleanupHooks::instance()->addImageHook(imageCleanupHook);
+    QImagePixmapCleanupHooks::instance()->addImageHook(cleanupTexturesForCacheKey);
 }
 
@@ -1600,7 +1612,7 @@
     qt_gl_texture_cache = 0;
 
-    QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTextures);
+    QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTexturesForPixampData);
     QImagePixmapCleanupHooks::instance()->removePixmapDataDestructionHook(cleanupBeforePixmapDestruction);
-    QImagePixmapCleanupHooks::instance()->removeImageHook(imageCleanupHook);
+    QImagePixmapCleanupHooks::instance()->removeImageHook(cleanupTexturesForCacheKey);
 }
 
@@ -1658,24 +1670,17 @@
   is deref'ed
 */
-void QGLTextureCache::imageCleanupHook(qint64 cacheKey)
-{
-    // ### remove when the GL texture cache becomes thread-safe
-    if (qApp->thread() != QThread::currentThread())
-        return;
-    QGLTexture *texture = instance()->getTexture(cacheKey);
-    if (texture && texture->options & QGLContext::MemoryManagedBindOption)
-        instance()->remove(cacheKey);
-}
-
-
-void QGLTextureCache::cleanupTextures(QPixmapData* pmd)
+void QGLTextureCache::cleanupTexturesForCacheKey(qint64 cacheKey)
 {
     // ### remove when the GL texture cache becomes thread-safe
     if (qApp->thread() == QThread::currentThread()) {
-        const qint64 cacheKey = pmd->cacheKey();
-        QGLTexture *texture = instance()->getTexture(cacheKey);
-        if (texture && texture->options & QGLContext::MemoryManagedBindOption)
-            instance()->remove(cacheKey);
-    }
+        instance()->remove(cacheKey);
+        Q_ASSERT(instance()->getTexture(cacheKey) == 0);
+    }
+}
+
+
+void QGLTextureCache::cleanupTexturesForPixampData(QPixmapData* pmd)
+{
+    cleanupTexturesForCacheKey(pmd->cacheKey());
 }
 
@@ -1683,6 +1688,5 @@
 {
     // Remove any bound textures first:
-    cleanupTextures(pmd);
-    Q_ASSERT(instance()->getTexture(pmd->cacheKey()) == 0);
+    cleanupTexturesForPixampData(pmd);
 
 #if defined(Q_WS_X11)
@@ -2085,6 +2089,7 @@
     Q_ASSERT(texture);
 
-    if (texture->id > 0)
-        QImagePixmapCleanupHooks::enableCleanupHooks(image);
+    // Enable the cleanup hooks for this image so that the texture cache entry is removed when the
+    // image gets deleted:
+    QImagePixmapCleanupHooks::enableCleanupHooks(image);
 
     return texture;
@@ -2140,4 +2145,5 @@
 
     QImage img = image;
+
     if (!(QGLExtensions::glExtensions() & QGLExtensions::NPOTTextures)
         && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0)
@@ -2308,4 +2314,5 @@
     QGLTexture *texture = new QGLTexture(q, tx_id, target, options);
     QGLTextureCache::instance()->insert(q, key, texture, cost);
+
     return texture;
 }
@@ -2352,5 +2359,8 @@
 #if defined(Q_WS_X11)
     // Try to use texture_from_pixmap
-    if (pd->classId() == QPixmapData::X11Class && pd->pixelType() == QPixmapData::PixmapType) {
+    const QX11Info *xinfo = qt_x11Info(paintDevice);
+    if (pd->classId() == QPixmapData::X11Class && pd->pixelType() == QPixmapData::PixmapType
+        && xinfo && xinfo->screen() == pixmap.x11Info().screen())
+    {
         texture = bindTextureFromNativePixmap(pd, key, options);
         if (texture) {
@@ -2421,5 +2431,5 @@
 
     Q_D(QGLContext);
-    QGLTexture *texture = d->bindTexture(image, target, format, false, DefaultBindOption);
+    QGLTexture *texture = d->bindTexture(image, target, format, DefaultBindOption);
     return texture->id;
 }
@@ -2561,9 +2571,11 @@
         GLuint texture = dds_cache->value(ddsKeys.at(i));
         if (id == texture) {
-            glDeleteTextures(1, &texture);
             dds_cache->remove(ddsKeys.at(i));
-            return;
+            break;
         }
     }
+
+    // Finally, actually delete the texture ID
+    glDeleteTextures(1, &id);
 }
 
@@ -4416,6 +4428,15 @@
 
     QPaintEngine::Type oldEngineType = qgl_engine_selector()->preferredPaintEngine();
+
+    QPaintEngine *engine = paintEngine();
+    if (engine && (oldEngineType == QPaintEngine::OpenGL2) && engine->isActive()) {
+        qWarning("QGLWidget::renderText(): Calling renderText() while a GL 2 paint engine is"
+                 " active on the same device is not allowed.");
+        return;
+    }
+
+    // this changes what paintEngine() returns
     qgl_engine_selector()->setPreferredPaintEngine(QPaintEngine::OpenGL);
-    QPaintEngine *engine = paintEngine();
+    engine = paintEngine();
     QPainter *p;
     bool reuse_painter = false;
@@ -4510,6 +4531,15 @@
 
     QPaintEngine::Type oldEngineType = qgl_engine_selector()->preferredPaintEngine();
+    QPaintEngine *engine = paintEngine();
+
+    if (engine && (oldEngineType == QPaintEngine::OpenGL2) && engine->isActive()) {
+        qWarning("QGLWidget::renderText(): Calling renderText() while a GL 2 paint engine is"
+                 " active on the same device is not allowed.");
+        return;
+    }
+
+    // this changes what paintEngine() returns
     qgl_engine_selector()->setPreferredPaintEngine(QPaintEngine::OpenGL);
-    QPaintEngine *engine = paintEngine();
+    engine = paintEngine();
     QPainter *p;
     bool reuse_painter = false;
@@ -5430,5 +5460,5 @@
     quint32 width = pvrHeader->width;
     quint32 height = pvrHeader->height;
-    while (bufferSize > 0 && level < pvrHeader->mipMapCount) {
+    while (bufferSize > 0 && level <= pvrHeader->mipMapCount) {
         quint32 size =
             (qMax(width, minWidth) * qMax(height, minHeight) *
Index: /trunk/src/opengl/qgl_mac.mm
===================================================================
--- /trunk/src/opengl/qgl_mac.mm	(revision 768)
+++ /trunk/src/opengl/qgl_mac.mm	(revision 769)
@@ -952,6 +952,4 @@
         current = current->parentWidget();
     }
-
-    isGLWidget = 1;
 }
 
Index: /trunk/src/opengl/qgl_p.h
===================================================================
--- /trunk/src/opengl/qgl_p.h	(revision 768)
+++ /trunk/src/opengl/qgl_p.h	(revision 769)
@@ -81,11 +81,17 @@
 #endif //QT_OPENGL_ES_1_CL
 
-#ifdef QT_OPENGL_ES
+#if defined(QT_OPENGL_ES) || defined(QT_OPENGL_ES_2)
 QT_BEGIN_INCLUDE_NAMESPACE
+
 #if defined(QT_OPENGL_ES_2)
-#include <EGL/egl.h>
+#   include <GLES2/gl2.h>
+#endif
+
+#if defined(QT_GLES_EGL)
+#   include <GLES/egl.h>
 #else
-#include <GLES/egl.h>
-#endif
+#   include <EGL/egl.h>
+#endif
+
 QT_END_INCLUDE_NAMESPACE
 #endif
@@ -180,5 +186,7 @@
                        , eglSurfaceWindowId(0)
 #endif
-        {}
+    {
+        isGLWidget = 1;
+    }
 
     ~QGLWidgetPrivate() {}
@@ -539,6 +547,6 @@
     static QGLTextureCache *instance();
     static void deleteIfEmpty();
-    static void imageCleanupHook(qint64 cacheKey);
-    static void cleanupTextures(QPixmapData* pixmap);
+    static void cleanupTexturesForCacheKey(qint64 cacheKey);
+    static void cleanupTexturesForPixampData(QPixmapData* pixmap);
     static void cleanupBeforePixmapDestruction(QPixmapData* pixmap);
 
@@ -571,5 +579,5 @@
 
 // One resource per group of shared contexts.
-class Q_AUTOTEST_EXPORT QGLContextResource
+class Q_OPENGL_EXPORT QGLContextResource
 {
 public:
Index: /trunk/src/opengl/qgl_qws.cpp
===================================================================
--- /trunk/src/opengl/qgl_qws.cpp	(revision 768)
+++ /trunk/src/opengl/qgl_qws.cpp	(revision 769)
@@ -199,9 +199,4 @@
     d->eglContext = new QEglContext();
     d->eglContext->setApi(QEgl::OpenGL);
-    if (!d->eglContext->openDisplay(device())) {
-        delete d->eglContext;
-        d->eglContext = 0;
-        return false;
-    }
 
     // Construct the configuration we need for this surface.
Index: /trunk/src/opengl/qgl_wince.cpp
===================================================================
--- /trunk/src/opengl/qgl_wince.cpp	(revision 768)
+++ /trunk/src/opengl/qgl_wince.cpp	(revision 769)
@@ -156,9 +156,4 @@
     d->eglContext = new QEglContext();
     d->eglContext->setApi(QEgl::OpenGL);
-    if (!d->eglContext->openDisplay(device())) {
-        delete d->eglContext;
-        d->eglContext = 0;
-        return false;
-    }
 
     // Construct the configuration we need for this surface.
Index: /trunk/src/opengl/qgl_x11.cpp
===================================================================
--- /trunk/src/opengl/qgl_x11.cpp	(revision 768)
+++ /trunk/src/opengl/qgl_x11.cpp	(revision 769)
@@ -1657,6 +1657,9 @@
         int screen = xinfo ? xinfo->screen() : X11->defaultScreen;
 
-        QGLExtensionMatcher extensions(glXQueryExtensionsString(display, screen));
-        if (extensions.match("GLX_EXT_texture_from_pixmap")) {
+        QGLExtensionMatcher serverExtensions(glXQueryExtensionsString(display, screen));
+        QGLExtensionMatcher clientExtensions(glXGetClientString(display, GLX_EXTENSIONS));
+        if (serverExtensions.match("GLX_EXT_texture_from_pixmap")
+            && clientExtensions.match("GLX_EXT_texture_from_pixmap"))
+        {
             glXBindTexImageEXT = (qt_glXBindTexImageEXT) qglx_getProcAddress("glXBindTexImageEXT");
             glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) qglx_getProcAddress("glXReleaseTexImageEXT");
Index: /trunk/src/opengl/qgl_x11egl.cpp
===================================================================
--- /trunk/src/opengl/qgl_x11egl.cpp	(revision 768)
+++ /trunk/src/opengl/qgl_x11egl.cpp	(revision 769)
@@ -191,9 +191,4 @@
         d->eglContext = new QEglContext();
         d->eglContext->setApi(QEgl::OpenGL);
-        if (!d->eglContext->openDisplay(device())) {
-            delete d->eglContext;
-            d->eglContext = 0;
-            return false;
-        }
 
         // Construct the configuration we need for this surface.
@@ -615,5 +610,5 @@
         EGLint configCount = 0;
         do {
-            eglChooseConfig(QEglContext::defaultDisplay(0), configAttribs.properties(), targetConfig, 1, &configCount);
+            eglChooseConfig(QEglContext::display(), configAttribs.properties(), targetConfig, 1, &configCount);
             if (configCount > 0) {
                 // Got one
@@ -654,5 +649,5 @@
 
     EGLSurface pixmapSurface;
-    pixmapSurface = eglCreatePixmapSurface(QEglContext::defaultDisplay(0),
+    pixmapSurface = eglCreatePixmapSurface(QEglContext::display(),
                                            pixmapConfig,
                                            (EGLNativePixmapType) pixmapData->handle(),
@@ -763,5 +758,5 @@
     if (pixmapData->gl_surface) {
         EGLBoolean success;
-        success = eglDestroySurface(QEglContext::defaultDisplay(0), (EGLSurface)pixmapData->gl_surface);
+        success = eglDestroySurface(QEglContext::display(), (EGLSurface)pixmapData->gl_surface);
         if (success == EGL_FALSE) {
             qWarning() << "destroyGlSurfaceForPixmap() - Error deleting surface: "
@@ -778,5 +773,5 @@
     if (pixmapData->gl_surface) {
         EGLBoolean success;
-        success = eglReleaseTexImage(QEglContext::defaultDisplay(0),
+        success = eglReleaseTexImage(QEglContext::display(),
                                      (EGLSurface)pixmapData->gl_surface,
                                      EGL_BACK_BUFFER);
Index: /trunk/src/opengl/qglframebufferobject.cpp
===================================================================
--- /trunk/src/opengl/qglframebufferobject.cpp	(revision 768)
+++ /trunk/src/opengl/qglframebufferobject.cpp	(revision 769)
@@ -330,4 +330,11 @@
         fboFormat.setDepth(true);
     }
+
+    GLenum format = f->format().internalTextureFormat();
+    reqAlpha = (format != GL_RGB
+#ifndef QT_OPENGL_ES
+                && format != GL_RGB5 && format != GL_RGB8
+#endif
+    );
 }
 
Index: /trunk/src/opengl/qglframebufferobject_p.h
===================================================================
--- /trunk/src/opengl/qglframebufferobject_p.h	(revision 768)
+++ /trunk/src/opengl/qglframebufferobject_p.h	(revision 769)
@@ -112,4 +112,5 @@
     virtual QGLContext* context() const;
     virtual QGLFormat format() const {return fboFormat;}
+    virtual bool alphaRequested() const { return reqAlpha; }
 
     void setFBO(QGLFramebufferObject* f,
@@ -117,7 +118,8 @@
 
 private:
-    bool wasBound;
     QGLFramebufferObject* fbo;
     QGLFormat fboFormat;
+    bool wasBound;
+    bool reqAlpha;
 };
 
Index: /trunk/src/opengl/qglpaintdevice.cpp
===================================================================
--- /trunk/src/opengl/qglpaintdevice.cpp	(revision 768)
+++ /trunk/src/opengl/qglpaintdevice.cpp	(revision 769)
@@ -127,4 +127,9 @@
 {
     return context()->format();
+}
+
+bool QGLPaintDevice::alphaRequested() const
+{
+    return context()->d_func()->reqFormat.alpha();
 }
 
Index: /trunk/src/opengl/qglpaintdevice_p.h
===================================================================
--- /trunk/src/opengl/qglpaintdevice_p.h	(revision 768)
+++ /trunk/src/opengl/qglpaintdevice_p.h	(revision 769)
@@ -76,4 +76,5 @@
     virtual QGLFormat format() const;
     virtual QSize size() const = 0;
+    virtual bool alphaRequested() const;
 
     // returns the QGLPaintDevice for the given QPaintDevice
Index: /trunk/src/opengl/qglpixelbuffer_egl.cpp
===================================================================
--- /trunk/src/opengl/qglpixelbuffer_egl.cpp	(revision 768)
+++ /trunk/src/opengl/qglpixelbuffer_egl.cpp	(revision 769)
@@ -65,11 +65,4 @@
     ctx = new QEglContext();
     ctx->setApi(QEgl::OpenGL);
-
-    // Open the EGL display.
-    if (!ctx->openDisplay(0)) {
-        delete ctx;
-        ctx = 0;
-        return false;
-    }
 
     // Find the shared context.
@@ -216,5 +209,5 @@
 {
     // See if we have at least 1 configuration that matches the default format.
-    EGLDisplay dpy = QEglContext::defaultDisplay(0);
+    EGLDisplay dpy = QEglContext::display();
     if (dpy == EGL_NO_DISPLAY)
         return false;
Index: /trunk/src/opengl/qglpixelbuffer_x11.cpp
===================================================================
--- /trunk/src/opengl/qglpixelbuffer_x11.cpp	(revision 768)
+++ /trunk/src/opengl/qglpixelbuffer_x11.cpp	(revision 769)
@@ -182,5 +182,9 @@
     qt_format_to_attrib_list(f, attribs);
 
-    GLXFBConfig *configs = glXChooseFBConfig(X11->display, X11->defaultScreen, attribs, &num_configs);
+    int screen = X11->defaultScreen;
+    if (shareWidget)
+        screen = shareWidget->x11Info().screen();
+
+    GLXFBConfig *configs = glXChooseFBConfig(X11->display, screen, attribs, &num_configs);
     if (configs && num_configs) {
         int res;
Index: /trunk/src/opengl/qglpixmapfilter.cpp
===================================================================
--- /trunk/src/opengl/qglpixmapfilter.cpp	(revision 768)
+++ /trunk/src/opengl/qglpixmapfilter.cpp	(revision 769)
@@ -395,4 +395,5 @@
     if (!hookAdded) {
         QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(pixmapDestroyed);
+        QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(pixmapDestroyed);
         hookAdded = true;
     }
@@ -591,8 +592,9 @@
         qt_blurImage(image, r * qreal(0.5), false, 1);
 
-        GLuint texture = generateBlurTexture(image.size(), GL_ALPHA);
-
-        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image.width(), image.height(), GL_ALPHA,
-                        GL_UNSIGNED_BYTE, image.bits());
+        GLuint texture;
+        glGenTextures(1, &texture);
+        glBindTexture(GL_TEXTURE_2D, texture);
+        glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, image.width(), image.height(),
+                     0, GL_ALPHA, GL_UNSIGNED_BYTE, image.bits());
 
         info = new QGLBlurTextureInfo(image, texture, r);
Index: /trunk/src/opengl/qglshaderprogram.cpp
===================================================================
--- /trunk/src/opengl/qglshaderprogram.cpp	(revision 768)
+++ /trunk/src/opengl/qglshaderprogram.cpp	(revision 769)
@@ -970,4 +970,7 @@
     is linked will be assigned locations automatically.
 
+    When this function is called after the program has been linked,
+    the program will need to be relinked for the change to take effect.
+
     \sa attributeLocation()
 */
@@ -975,10 +978,8 @@
 {
     Q_D(QGLShaderProgram);
-    if (!d->linked) {
-        glBindAttribLocation(d->programGuard.id(), location, name);
-    } else {
-        qWarning() << "QGLShaderProgram::bindAttributeLocation(" << name
-                   << "): cannot bind after shader program is linked";
-    }
+    if (!init())
+        return;
+    glBindAttribLocation(d->programGuard.id(), location, name);
+    d->linked = false;  // Program needs to be relinked.
 }
 
@@ -991,4 +992,7 @@
     is linked will be assigned locations automatically.
 
+    When this function is called after the program has been linked,
+    the program will need to be relinked for the change to take effect.
+
     \sa attributeLocation()
 */
@@ -1005,4 +1009,7 @@
     Any attributes that have not been explicitly bound when the program
     is linked will be assigned locations automatically.
+
+    When this function is called after the program has been linked,
+    the program will need to be relinked for the change to take effect.
 
     \sa attributeLocation()
Index: /trunk/src/opengl/qpaintengine_opengl.cpp
===================================================================
--- /trunk/src/opengl/qpaintengine_opengl.cpp	(revision 768)
+++ /trunk/src/opengl/qpaintengine_opengl.cpp	(revision 769)
@@ -1454,4 +1454,9 @@
     qt_mask_texture_cache()->maintainCache();
 
+#if defined(Q_WS_X11)
+    // clear out the references we hold for textures bound with the
+    // texture_from_pixmap extension
+    ctx->d_func()->boundPixmaps.clear();
+#endif
     return true;
 }
Index: /trunk/src/opengl/qpixmapdata_gl.cpp
===================================================================
--- /trunk/src/opengl/qpixmapdata_gl.cpp	(revision 768)
+++ /trunk/src/opengl/qpixmapdata_gl.cpp	(revision 769)
@@ -235,4 +235,9 @@
 }
 
+bool QGLPixmapGLPaintDevice::alphaRequested() const
+{
+    return data->m_hasAlpha;
+}
+
 void QGLPixmapGLPaintDevice::setPixmapData(QGLPixmapData* d)
 {
Index: /trunk/src/opengl/qpixmapdata_gl_p.h
===================================================================
--- /trunk/src/opengl/qpixmapdata_gl_p.h	(revision 768)
+++ /trunk/src/opengl/qpixmapdata_gl_p.h	(revision 769)
@@ -89,4 +89,5 @@
     QGLContext* context() const;
     QSize size() const;
+    bool alphaRequested() const;
 
     void setPixmapData(QGLPixmapData*);
Index: /trunk/src/opengl/qpixmapdata_x11gl_egl.cpp
===================================================================
--- /trunk/src/opengl/qpixmapdata_x11gl_egl.cpp	(revision 768)
+++ /trunk/src/opengl/qpixmapdata_x11gl_egl.cpp	(revision 769)
@@ -97,5 +97,5 @@
             EGL_NONE
         };
-        qPixmapARGBSharedEglContext = eglCreateContext(QEglContext::defaultDisplay(0),
+        qPixmapARGBSharedEglContext = eglCreateContext(QEglContext::display(),
                                                        argbConfig, 0, contextAttribs);
 
@@ -104,5 +104,5 @@
             qPixmapRGBSharedEglContext = qPixmapARGBSharedEglContext;
         } else {
-            qPixmapRGBSharedEglContext = eglCreateContext(QEglContext::defaultDisplay(0),
+            qPixmapRGBSharedEglContext = eglCreateContext(QEglContext::display(),
                                                            rgbConfig, 0, contextAttribs);
         }
@@ -115,5 +115,5 @@
             break;
 
-        haveX11Pixmaps = eglMakeCurrent(QEglContext::defaultDisplay(0),
+        haveX11Pixmaps = eglMakeCurrent(QEglContext::display(),
                                         (EGLSurface)argbPixmapData->gl_surface,
                                         (EGLSurface)argbPixmapData->gl_surface,
@@ -135,5 +135,5 @@
                 break;
 
-            haveX11Pixmaps = eglMakeCurrent(QEglContext::defaultDisplay(0),
+            haveX11Pixmaps = eglMakeCurrent(QEglContext::display(),
                                             (EGLSurface)rgbPixmapData->gl_surface,
                                             (EGLSurface)rgbPixmapData->gl_surface,
@@ -148,5 +148,5 @@
 
     if (qPixmapARGBSharedEglContext || qPixmapRGBSharedEglContext) {
-        eglMakeCurrent(QEglContext::defaultDisplay(0),
+        eglMakeCurrent(QEglContext::display(),
                        EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
     }
@@ -168,10 +168,10 @@
         // Clean up the context(s) if we can't use X11GL pixmaps
         if (qPixmapARGBSharedEglContext != EGL_NO_CONTEXT)
-            eglDestroyContext(QEglContext::defaultDisplay(0), qPixmapARGBSharedEglContext);
+            eglDestroyContext(QEglContext::display(), qPixmapARGBSharedEglContext);
 
         if (qPixmapRGBSharedEglContext != qPixmapARGBSharedEglContext &&
             qPixmapRGBSharedEglContext != EGL_NO_CONTEXT)
         {
-            eglDestroyContext(QEglContext::defaultDisplay(0), qPixmapRGBSharedEglContext);
+            eglDestroyContext(QEglContext::display(), qPixmapRGBSharedEglContext);
         }
         qPixmapRGBSharedEglContext = EGL_NO_CONTEXT;
@@ -213,5 +213,4 @@
         if (ctx->d_func()->eglContext == 0)
             ctx->d_func()->eglContext = new QEglContext();
-        ctx->d_func()->eglContext->openDisplay(0); // ;-)
         ctx->d_func()->eglContext->setApi(QEgl::OpenGL);
         ctx->d_func()->eglContext->setContext(hasAlphaChannel() ? qPixmapARGBSharedEglContext
Index: /trunk/src/openvg/openvg.pro
===================================================================
--- /trunk/src/openvg/openvg.pro	(revision 768)
+++ /trunk/src/openvg/openvg.pro	(revision 769)
@@ -34,4 +34,6 @@
 }
 
+symbian: DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_BUFFER_SCROLLING
+
 include(../qbase.pri)
 
Index: /trunk/src/openvg/qpaintengine_vg.cpp
===================================================================
--- /trunk/src/openvg/qpaintengine_vg.cpp	(revision 768)
+++ /trunk/src/openvg/qpaintengine_vg.cpp	(revision 769)
@@ -76,6 +76,6 @@
 #if !defined(QVG_NO_DRAW_GLYPHS)
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_DECL_IMPORT extern int qt_defaultDpiX();
+Q_DECL_IMPORT extern int qt_defaultDpiY();
 
 class QVGPaintEnginePrivate;
@@ -121,4 +121,33 @@
 {
 public:
+    // Extra blending modes from VG_KHR_advanced_blending extension.
+    // Use the QT_VG prefix to avoid conflicts with any definitions
+    // that may come in via <VG/vgext.h>.
+    enum AdvancedBlending {
+        QT_VG_BLEND_OVERLAY_KHR       = 0x2010,
+        QT_VG_BLEND_HARDLIGHT_KHR     = 0x2011,
+        QT_VG_BLEND_SOFTLIGHT_SVG_KHR = 0x2012,
+        QT_VG_BLEND_SOFTLIGHT_KHR     = 0x2013,
+        QT_VG_BLEND_COLORDODGE_KHR    = 0x2014,
+        QT_VG_BLEND_COLORBURN_KHR     = 0x2015,
+        QT_VG_BLEND_DIFFERENCE_KHR    = 0x2016,
+        QT_VG_BLEND_SUBTRACT_KHR      = 0x2017,
+        QT_VG_BLEND_INVERT_KHR        = 0x2018,
+        QT_VG_BLEND_EXCLUSION_KHR     = 0x2019,
+        QT_VG_BLEND_LINEARDODGE_KHR   = 0x201a,
+        QT_VG_BLEND_LINEARBURN_KHR    = 0x201b,
+        QT_VG_BLEND_VIVIDLIGHT_KHR    = 0x201c,
+        QT_VG_BLEND_LINEARLIGHT_KHR   = 0x201d,
+        QT_VG_BLEND_PINLIGHT_KHR      = 0x201e,
+        QT_VG_BLEND_HARDMIX_KHR       = 0x201f,
+        QT_VG_BLEND_CLEAR_KHR         = 0x2020,
+        QT_VG_BLEND_DST_KHR           = 0x2021,
+        QT_VG_BLEND_SRC_OUT_KHR       = 0x2022,
+        QT_VG_BLEND_DST_OUT_KHR       = 0x2023,
+        QT_VG_BLEND_SRC_ATOP_KHR      = 0x2024,
+        QT_VG_BLEND_DST_ATOP_KHR      = 0x2025,
+        QT_VG_BLEND_XOR_KHR           = 0x2026
+    };
+
     QVGPaintEnginePrivate();
     ~QVGPaintEnginePrivate();
@@ -218,4 +247,6 @@
 #endif
 
+    bool hasAdvancedBlending;
+
     QScopedPointer<QPixmapFilter> convolutionFilter;
     QScopedPointer<QPixmapFilter> colorizeFilter;
@@ -370,4 +401,6 @@
     fontEngineCleaner = 0;
 #endif
+
+    hasAdvancedBlending = false;
 
     clearModes();
@@ -447,4 +480,8 @@
     vgAppendPathData(linePath, 2, segments, coords);
 #endif
+
+    const char *extensions = reinterpret_cast<const char *>(vgGetString(VG_EXTENSIONS));
+    if (extensions)
+        hasAdvancedBlending = strstr(extensions, "VG_KHR_advanced_blending") != 0;
 }
 
@@ -497,32 +534,27 @@
 }
 
-extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale);
+Q_DECL_IMPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale);
 
 void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
 {
-    VGfloat devh = pdev->height() - 1;
+    VGfloat devh = pdev->height();
 
     // Construct the VG transform by combining the Qt transform with
     // the following viewport transformation:
-    //        | 1  0  0   |   | 1 0  0.5 |   | 1  0     0.5      |
-    //        | 0 -1 devh | * | 0 1 -0.5 | = | 0 -1 (0.5 + devh) |
-    //        | 0  0  1   |   | 0 0   1  |   | 0  0      1       |
+    //        | 1  0  0   |
+    //        | 0 -1 devh |
+    //        | 0  0  1   |
     // The full VG transform is effectively:
     //      1. Apply the user's transformation matrix.
-    //      2. Translate by (0.5, -0.5) to correct for Qt and VG putting
-    //         the centre of the pixel at different positions.
-    //      3. Flip the co-ordinate system upside down.
+    //      2. Flip the co-ordinate system upside down.
     QTransform viewport(1.0f, 0.0f, 0.0f,
                         0.0f, -1.0f, 0.0f,
-                        0.5f, devh + 0.5f, 1.0f);
-
-    // The image transform is always the full transformation,
-    // because it can be projective.
-    imageTransform = transform * viewport;
-
-    // Determine if the transformation is projective.
-    bool projective = (imageTransform.m13() != 0.0f ||
-                       imageTransform.m23() != 0.0f ||
-                       imageTransform.m33() != 1.0f);
+                        0.0f, devh, 1.0f);
+
+    // Compute the path transform and determine if it is projective.
+    pathTransform = transform * viewport;
+    bool projective = (pathTransform.m13() != 0.0f ||
+                       pathTransform.m23() != 0.0f ||
+                       pathTransform.m33() != 1.0f);
     if (projective) {
         // The engine cannot do projective path transforms for us,
@@ -532,8 +564,10 @@
         simpleTransform = false;
     } else {
-        pathTransform = imageTransform;
         simpleTransform = true;
     }
     pathTransformSet = false;
+
+    // The image transform is always the full transformation,
+    imageTransform = transform * viewport;
 
     // Calculate the scaling factor to use for turning cosmetic pens
@@ -968,5 +1002,5 @@
 }
 
-extern QImage qt_imageForBrush(int style, bool invert);
+Q_DECL_IMPORT extern QImage qt_imageForBrush(int style, bool invert);
 
 static QImage colorizeBitmap(const QImage &image, const QColor &color)
@@ -2063,4 +2097,5 @@
         (QVGPaintEngine *engine, int width, int height)
 {
+    scissorMask = false;
     if (maskIsSet) {
         vgMask(VG_INVALID_HANDLE, VG_FILL_MASK, 0, 0, width, height);
@@ -2295,5 +2330,5 @@
     d->dirty |= QPaintEngine::DirtyCompositionMode;
 
-    VGBlendMode vgMode = VG_BLEND_SRC_OVER;
+    VGint vgMode = VG_BLEND_SRC_OVER;
 
     switch (state()->composition_mode) {
@@ -2329,9 +2364,51 @@
         break;
     default:
-        qWarning() << "QVGPaintEngine::compositionModeChanged unsupported mode" << state()->composition_mode;
-        break;  // Fall back to VG_BLEND_SRC_OVER.
-    }
-
-    d->setBlendMode(vgMode);
+        if (d->hasAdvancedBlending) {
+            switch (state()->composition_mode) {
+            case QPainter::CompositionMode_Overlay:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_OVERLAY_KHR;
+                break;
+            case QPainter::CompositionMode_ColorDodge:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_COLORDODGE_KHR;
+                break;
+            case QPainter::CompositionMode_ColorBurn:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_COLORBURN_KHR;
+                break;
+            case QPainter::CompositionMode_HardLight:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_HARDLIGHT_KHR;
+                break;
+            case QPainter::CompositionMode_SoftLight:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_SOFTLIGHT_KHR;
+                break;
+            case QPainter::CompositionMode_Difference:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_DIFFERENCE_KHR;
+                break;
+            case QPainter::CompositionMode_Exclusion:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_EXCLUSION_KHR;
+                break;
+            case QPainter::CompositionMode_SourceOut:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_SRC_OUT_KHR;
+                break;
+            case QPainter::CompositionMode_DestinationOut:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_DST_OUT_KHR;
+                break;
+            case QPainter::CompositionMode_SourceAtop:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_SRC_ATOP_KHR;
+                break;
+            case QPainter::CompositionMode_DestinationAtop:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_DST_ATOP_KHR;
+                break;
+            case QPainter::CompositionMode_Xor:
+                vgMode = QVGPaintEnginePrivate::QT_VG_BLEND_XOR_KHR;
+                break;
+            default: break; // Fall back to VG_BLEND_SRC_OVER.
+            }
+        }
+        if (vgMode == VG_BLEND_SRC_OVER)
+            qWarning() << "QVGPaintEngine::compositionModeChanged unsupported mode" << state()->composition_mode;
+        break;
+    }
+
+    d->setBlendMode(VGBlendMode(vgMode));
 }
 
@@ -2400,5 +2477,5 @@
 
     // Check to see if we can use vgClear() for faster filling.
-    if (brush.style() == Qt::SolidPattern &&
+    if (brush.style() == Qt::SolidPattern && brush.isOpaque() &&
             clipTransformIsSimple(d->transform) && d->opacity == 1.0f &&
             clearRect(rect, brush.color())) {
@@ -2443,5 +2520,5 @@
 
     // Check to see if we can use vgClear() for faster filling.
-    if (clipTransformIsSimple(d->transform) && d->opacity == 1.0f &&
+    if (clipTransformIsSimple(d->transform) && d->opacity == 1.0f && color.alpha() == 255 &&
             clearRect(rect, color)) {
         return;
@@ -3240,8 +3317,8 @@
             }
         }
-        origin[0] = -metrics.x.toReal() + 0.5f;
-        origin[1] = -metrics.y.toReal() + 0.5f;
-        escapement[0] = metrics.xoff.toReal();
-        escapement[1] = metrics.yoff.toReal();
+        origin[0] = -metrics.x.toReal();
+        origin[1] = -metrics.y.toReal();
+        escapement[0] = 0;
+        escapement[1] = 0;
         vgSetGlyphToImage(font, glyph, vgImage, origin, escapement);
         vgDestroyImage(vgImage);    // Reduce reference count.
@@ -3259,6 +3336,6 @@
         origin[0] = 0;
         origin[1] = 0;
-        escapement[0] = metrics.xoff.toReal();
-        escapement[1] = metrics.yoff.toReal();
+        escapement[0] = 0;
+        escapement[1] = 0;
         vgSetGlyphToPath(font, glyph, vgPath, VG_FALSE, origin, escapement);
         vgDestroyPath(vgPath);      // Reduce reference count.
@@ -3285,8 +3362,6 @@
     QVarLengthArray<QFixedPoint> positions;
     QVarLengthArray<glyph_t> glyphs;
-    QTransform matrix = d->transform;
-    matrix.translate(p.x(), p.y());
-    ti.fontEngine->getGlyphPositions
-        (ti.glyphs, matrix, ti.flags, glyphs, positions);
+    QTransform matrix;
+    ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
 
     // Find the glyph cache for this font.
@@ -3322,8 +3397,16 @@
     glyphCache->cacheGlyphs(d, ti, glyphs);
 
+    // Create the array of adjustments between glyphs
+    QVarLengthArray<VGfloat> adjustments_x(glyphs.size());
+    QVarLengthArray<VGfloat> adjustments_y(glyphs.size());
+    for (int i = 1; i < glyphs.size(); ++i) {
+        adjustments_x[i-1] = (positions[i].x - positions[i-1].x).toReal();
+        adjustments_y[i-1] = (positions[i].y - positions[i-1].y).toReal();
+    }
+
     // Set the glyph drawing origin.
     VGfloat origin[2];
-    origin[0] = 0;
-    origin[1] = 0;
+    origin[0] = positions[0].x.toReal();
+    origin[1] = positions[0].y.toReal();
     vgSetfv(VG_GLYPH_ORIGIN, 2, origin);
 
@@ -3340,5 +3423,5 @@
     d->ensureBrush(state()->pen.brush());
     vgDrawGlyphs(glyphCache->font, glyphs.size(), (VGuint*)glyphs.data(),
-                 NULL, NULL, VG_FILL_PATH, VG_TRUE);
+                 adjustments_x.data(), adjustments_y.data(), VG_FILL_PATH, VG_TRUE);
 #else
     // OpenGL 1.0 does not have support for VGFont and glyphs,
@@ -3645,8 +3728,8 @@
     } else {
         // Set the path transform to the default viewport transformation.
-        VGfloat devh = screenSize.height() - 1;
+        VGfloat devh = screenSize.height();
         QTransform viewport(1.0f, 0.0f, 0.0f,
                             0.0f, -1.0f, 0.0f,
-                            -0.5f, devh + 0.5f, 1.0f);
+                            0.0f, devh, 1.0f);
         d->setTransform(VG_MATRIX_PATH_USER_TO_SURFACE, viewport);
 
@@ -3684,8 +3767,8 @@
 
     // Set the image transformation and modes.
-    VGfloat devh = screenSize.height() - 1;
+    VGfloat devh = screenSize.height();
     QTransform transform(1.0f, 0.0f, 0.0f,
                          0.0f, -1.0f, 0.0f,
-                         -0.5f, devh + 0.5f, 1.0f);
+                         0.0f, devh, 1.0f);
     transform.translate(offset.x(), offset.y());
     d->setTransform(VG_MATRIX_IMAGE_USER_TO_SURFACE, transform);
Index: /trunk/src/openvg/qpixmapdata_vg.cpp
===================================================================
--- /trunk/src/openvg/qpixmapdata_vg.cpp	(revision 768)
+++ /trunk/src/openvg/qpixmapdata_vg.cpp	(revision 769)
@@ -46,8 +46,10 @@
 #include "qvgimagepool_p.h"
 
-#ifdef QT_SYMBIAN_SUPPORTS_SGIMAGE
+#if defined(Q_OS_SYMBIAN)
 #include <private/qt_s60_p.h>
 #include <fbs.h>
-#include <graphics/sgimage.h>
+#endif
+#ifdef QT_SYMBIAN_SUPPORTS_SGIMAGE
+#include <sgresource/sgimage.h>
 typedef EGLImageKHR (*pfnEglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, EGLint*);
 typedef EGLBoolean (*pfnEglDestroyImageKHR)(EGLDisplay, EGLImageKHR);
@@ -353,6 +355,6 @@
 }
 
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_DECL_IMPORT extern int qt_defaultDpiX();
+Q_DECL_IMPORT extern int qt_defaultDpiY();
 
 int QVGPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
@@ -465,11 +467,7 @@
 void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
 {
+    if (type == QPixmapData::SgImage && pixmap) {
 #if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
-    if (type == QPixmapData::SgImage && pixmap) {
         RSgImage *sgImage = reinterpret_cast<RSgImage*>(pixmap);
-        // when "0" used as argument then
-        // default display, context are used
-        if (!context)
-            context = qt_vg_create_context(0, QInternal::Pixmap);
 
         destroyImages();
@@ -478,13 +476,14 @@
         TInt err = 0;
 
-        err = SgDriver::Open();
-        if(err != KErrNone) {
+        RSgDriver driver;
+        err = driver.Open();
+        if (err != KErrNone) {
             cleanup();
             return;
         }
 
-        if(sgImage->IsNull()) {
+        if (sgImage->IsNull()) {
             cleanup();
-            SgDriver::Close();
+            driver.Close();
             return;
         }
@@ -492,7 +491,7 @@
         TSgImageInfo sgImageInfo;
         err = sgImage->GetInfo(sgImageInfo);
-        if(err != KErrNone) {
+        if (err != KErrNone) {
             cleanup();
-            SgDriver::Close();
+            driver.Close();
             return;
         }
@@ -502,12 +501,12 @@
         pfnVgCreateEGLImageTargetKHR vgCreateEGLImageTargetKHR = (pfnVgCreateEGLImageTargetKHR) eglGetProcAddress("vgCreateEGLImageTargetKHR");
 
-        if(eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) {
+        if (eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) {
             cleanup();
-            SgDriver::Close();
+            driver.Close();
             return;
         }
 
         const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE};
-        EGLImageKHR eglImage = eglCreateImageKHR(context->display(),
+        EGLImageKHR eglImage = eglCreateImageKHR(QEglContext::display(),
                 EGL_NO_CONTEXT,
                 EGL_NATIVE_PIXMAP_KHR,
@@ -515,15 +514,15 @@
                 (EGLint*)KEglImageAttribs);
 
-        if(eglGetError() != EGL_SUCCESS) {
+        if (eglGetError() != EGL_SUCCESS) {
             cleanup();
-            SgDriver::Close();
+            driver.Close();
             return;
         }
 
         vgImage = vgCreateEGLImageTargetKHR(eglImage);
-        if(vgGetError() != VG_NO_ERROR) {
+        if (vgGetError() != VG_NO_ERROR) {
             cleanup();
-            eglDestroyImageKHR(context->display(), eglImage);
-            SgDriver::Close();
+            eglDestroyImageKHR(QEglContext::display(), eglImage);
+            driver.Close();
             return;
         }
@@ -538,6 +537,7 @@
         setSerialNumber(++qt_vg_pixmap_serial);
         // release stuff
-        eglDestroyImageKHR(context->display(), eglImage);
-        SgDriver::Close();
+        eglDestroyImageKHR(QEglContext::display(), eglImage);
+        driver.Close();
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap*>(pixmap);
@@ -585,23 +585,20 @@
             delete bitmap;
     }
-#else
-    Q_UNUSED(pixmap);
-    Q_UNUSED(type);
-#endif
 }
 
 void* QVGPixmapData::toNativeType(NativeType type)
 {
+    if (type == QPixmapData::SgImage) {
 #if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
-    if (type == QPixmapData::SgImage) {
         toVGImage();
 
-        if(!isValid() || vgImage == VG_INVALID_HANDLE)
+        if (!isValid() || vgImage == VG_INVALID_HANDLE)
             return 0;
 
         TInt err = 0;
 
-        err = SgDriver::Open();
-        if(err != KErrNone)
+        RSgDriver driver;
+        err = driver.Open();
+        if (err != KErrNone)
             return 0;
 
@@ -609,15 +606,10 @@
         sgInfo.iPixelFormat = EUidPixelFormatARGB_8888_PRE;
         sgInfo.iSizeInPixels.SetSize(w, h);
-        sgInfo.iUsage = ESgUsageOpenVgImage | ESgUsageOpenVgTarget;
-        sgInfo.iShareable = ETrue;
-        sgInfo.iCpuAccess = ESgCpuAccessNone;
-        sgInfo.iScreenId = KSgScreenIdMain; //KSgScreenIdAny;
-        sgInfo.iUserAttributes = NULL;
-        sgInfo.iUserAttributeCount = 0;
+        sgInfo.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface;
 
         RSgImage *sgImage = q_check_ptr(new RSgImage());
         err = sgImage->Create(sgInfo, NULL, NULL);
-        if(err != KErrNone) {
-            SgDriver::Close();
+        if (err != KErrNone) {
+            driver.Close();
             return 0;
         }
@@ -627,26 +619,26 @@
         pfnVgCreateEGLImageTargetKHR vgCreateEGLImageTargetKHR = (pfnVgCreateEGLImageTargetKHR) eglGetProcAddress("vgCreateEGLImageTargetKHR");
 
-        if(eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) {
-            SgDriver::Close();
+        if (eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) {
+            driver.Close();
             return 0;
         }
 
         const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE};
-        EGLImageKHR eglImage = eglCreateImageKHR(context->display(),
+        EGLImageKHR eglImage = eglCreateImageKHR(QEglContext::display(),
                 EGL_NO_CONTEXT,
                 EGL_NATIVE_PIXMAP_KHR,
                 (EGLClientBuffer)sgImage,
                 (EGLint*)KEglImageAttribs);
-        if(eglGetError() != EGL_SUCCESS) {
+        if (eglGetError() != EGL_SUCCESS) {
             sgImage->Close();
-            SgDriver::Close();
+            driver.Close();
             return 0;
         }
 
         VGImage dstVgImage = vgCreateEGLImageTargetKHR(eglImage);
-        if(vgGetError() != VG_NO_ERROR) {
-            eglDestroyImageKHR(context->display(), eglImage);
+        if (vgGetError() != VG_NO_ERROR) {
+            eglDestroyImageKHR(QEglContext::display(), eglImage);
             sgImage->Close();
-            SgDriver::Close();
+            driver.Close();
             return 0;
         }
@@ -656,5 +648,5 @@
                 w, h, VG_FALSE);
 
-        if(vgGetError() != VG_NO_ERROR) {
+        if (vgGetError() != VG_NO_ERROR) {
             sgImage->Close();
             sgImage = 0;
@@ -662,7 +654,8 @@
         // release stuff
         vgDestroyImage(dstVgImage);
-        eglDestroyImageKHR(context->display(), eglImage);
-        SgDriver::Close();
+        eglDestroyImageKHR(QEglContext::display(), eglImage);
+        driver.Close();
         return reinterpret_cast<void*>(sgImage);
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap);
@@ -686,8 +679,5 @@
         return reinterpret_cast<void*>(bitmap);
     }
-#else
-    Q_UNUSED(type);
     return 0;
-#endif
 }
 #endif //Q_OS_SYMBIAN
Index: /trunk/src/openvg/qwindowsurface_vg.cpp
===================================================================
--- /trunk/src/openvg/qwindowsurface_vg.cpp	(revision 768)
+++ /trunk/src/openvg/qwindowsurface_vg.cpp	(revision 769)
@@ -58,4 +58,5 @@
     // Create the default type of EGL window surface for windows.
     d_ptr = new QVGEGLWindowSurfaceDirect(this);
+    setStaticContentsSupport(d_ptr->supportsStaticContents());
 }
 
@@ -90,5 +91,7 @@
 bool QVGWindowSurface::scroll(const QRegion &area, int dx, int dy)
 {
-    return QWindowSurface::scroll(area, dx, dy);
+    if (!d_ptr->scroll(window(), area, dx, dy))
+        return QWindowSurface::scroll(area, dx, dy);
+    return true;
 }
 
Index: /trunk/src/openvg/qwindowsurface_vgegl.cpp
===================================================================
--- /trunk/src/openvg/qwindowsurface_vgegl.cpp	(revision 768)
+++ /trunk/src/openvg/qwindowsurface_vgegl.cpp	(revision 769)
@@ -178,5 +178,6 @@
     } else {
         QVGSharedContext *shared = sharedContext();
-        shared->firstPixmap = pd->next;
+        if (shared)
+           shared->firstPixmap = pd->next;
     }
 }
@@ -226,15 +227,11 @@
     context = new QEglContext();
     context->setApi(QEgl::OpenVG);
-    if (!context->openDisplay(device)) {
-        delete context;
-        return 0;
-    }
 
     // Set the swap interval for the display.
     QByteArray interval = qgetenv("QT_VG_SWAP_INTERVAL");
     if (!interval.isEmpty())
-        eglSwapInterval(context->display(), interval.toInt());
+        eglSwapInterval(QEglContext::display(), interval.toInt());
     else
-        eglSwapInterval(context->display(), 1);
+        eglSwapInterval(QEglContext::display(), 1);
 
 #ifdef EGL_RENDERABLE_TYPE
@@ -250,5 +247,5 @@
         EGLConfig cfg;
         if (eglChooseConfig
-                    (context->display(), properties, &cfg, 1, &matching) &&
+                    (QEglContext::display(), properties, &cfg, 1, &matching) &&
                 matching > 0) {
             // Check that the selected configuration actually supports OpenVG
@@ -257,7 +254,7 @@
             EGLint type = 0;
             eglGetConfigAttrib
-                (context->display(), cfg, EGL_CONFIG_ID, &id);
+                (QEglContext::display(), cfg, EGL_CONFIG_ID, &id);
             eglGetConfigAttrib
-                (context->display(), cfg, EGL_RENDERABLE_TYPE, &type);
+                (QEglContext::display(), cfg, EGL_RENDERABLE_TYPE, &type);
             if (cfgId == id && (type & EGL_OPENVG_BIT) != 0) {
                 context->setConfig(cfg);
@@ -338,5 +335,5 @@
     shared->context->doneCurrent();
     if (shared->surface != EGL_NO_SURFACE) {
-        eglDestroySurface(shared->context->display(), shared->surface);
+        eglDestroySurface(QEglContext::display(), shared->surface);
         shared->surface = EGL_NO_SURFACE;
     }
@@ -416,5 +413,5 @@
         }
         shared->surface = eglCreatePbufferSurface
-            (shared->context->display(), shared->context->config(), attribs);
+            (QEglContext::display(), shared->context->config(), attribs);
     }
     return shared->surface;
@@ -559,5 +556,5 @@
             recreateBackBuffer = false;
             if (backBufferSurface != EGL_NO_SURFACE) {
-                eglDestroySurface(context->display(), backBufferSurface);
+                eglDestroySurface(QEglContext::display(), backBufferSurface);
                 backBufferSurface = EGL_NO_SURFACE;
             }
@@ -572,5 +569,5 @@
                 // Create an EGL surface for rendering into the VGImage.
                 backBufferSurface = eglCreatePbufferFromClientBuffer
-                    (context->display(), EGL_OPENVG_IMAGE,
+                    (QEglContext::display(), EGL_OPENVG_IMAGE,
                      (EGLClientBuffer)(backBuffer),
                      context->config(), NULL);
@@ -663,4 +660,5 @@
         windowSurface = context->createSurface(widget, &surfaceProps);
         isPaintingActive = false;
+        needToSwap = true;
     }
 #else
@@ -708,5 +706,5 @@
         // Did we get a direct to window rendering surface?
         EGLint buffer = 0;
-        if (eglQueryContext(context->display(), context->context(),
+        if (eglQueryContext(QEglContext::display(), context->context(),
                             EGL_RENDER_BUFFER, &buffer) &&
                 buffer == EGL_SINGLE_BUFFER) {
@@ -714,18 +712,19 @@
         }
 #endif
-#if !defined(QVG_NO_PRESERVED_SWAP)
-        // Try to force the surface back buffer to preserve its contents.
-        if (needToSwap) {
-            eglGetError();  // Clear error state first.
-            eglSurfaceAttrib(context->display(), surface,
-                             EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
-            if (eglGetError() != EGL_SUCCESS) {
-                qWarning("QVG: could not enable preserved swap");
-            }
-        }
-#endif
         windowSurface = surface;
         isPaintingActive = false;
     }
+
+#if !defined(QVG_NO_PRESERVED_SWAP)
+    // Try to force the surface back buffer to preserve its contents.
+    if (needToSwap) {
+        eglGetError();  // Clear error state first.
+        eglSurfaceAttrib(QEglContext::display(), windowSurface,
+                EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
+        if (eglGetError() != EGL_SUCCESS) {
+            qWarning("QVG: could not enable preserved swap");
+        }
+    }
+#endif
     return context;
 }
@@ -760,4 +759,31 @@
 }
 
+bool QVGEGLWindowSurfaceDirect::supportsStaticContents() const
+{
+#if defined(QVG_BUFFER_SCROLLING) && !defined(QVG_NO_PRESERVED_SWAP)
+    return true;
+#else
+    return QVGEGLWindowSurfacePrivate::supportsStaticContents();
+#endif
+}
+
+bool QVGEGLWindowSurfaceDirect::scroll(QWidget *widget, const QRegion& area, int dx, int dy)
+{
+#ifdef QVG_BUFFER_SCROLLING
+    QEglContext *context = ensureContext(widget);
+    if (context) {
+        context->makeCurrent(windowSurface);
+        QRect scrollRect = area.boundingRect();
+        int sx = scrollRect.x();
+        int sy = size.height() - scrollRect.y() - scrollRect.height();
+        vgSeti(VG_SCISSORING, VG_FALSE);
+        vgCopyPixels(sx + dx, sy - dy, sx, sy, scrollRect.width(), scrollRect.height());
+        context->lazyDoneCurrent();
+        return true;
+    }
+#endif
+    return false;
+}
+
 QT_END_NAMESPACE
 
Index: /trunk/src/openvg/qwindowsurface_vgegl_p.h
===================================================================
--- /trunk/src/openvg/qwindowsurface_vgegl_p.h	(revision 768)
+++ /trunk/src/openvg/qwindowsurface_vgegl_p.h	(revision 769)
@@ -78,4 +78,6 @@
     virtual VGImage surfaceImage() const;
     virtual QSize surfaceSize() const = 0;
+    virtual bool supportsStaticContents() const { return false; }
+    virtual bool scroll(QWidget *, const QRegion&, int, int) { return false; }
 
 private:
@@ -129,4 +131,6 @@
     void endPaint(QWidget *widget, const QRegion& region, QImage *image);
     QSize surfaceSize() const { return size; }
+    bool supportsStaticContents() const;
+    bool scroll(QWidget *widget, const QRegion& area, int dx, int dy);
 
 protected:
Index: /trunk/src/plugins/accessible/widgets/complexwidgets.cpp
===================================================================
--- /trunk/src/plugins/accessible/widgets/complexwidgets.cpp	(revision 768)
+++ /trunk/src/plugins/accessible/widgets/complexwidgets.cpp	(revision 769)
@@ -725,5 +725,6 @@
             m_current = start;
         } else if (m_view && m_view->model()) {
-            m_current = view->model()->index(0, 0);
+            m_current = view->rootIndex().isValid() ? 
+                        view->rootIndex().child(0,0) : view->model()->index(0, 0);
         }
     }
Index: /trunk/src/plugins/audio/audio.pro
===================================================================
--- /trunk/src/plugins/audio/audio.pro	(revision 768)
+++ /trunk/src/plugins/audio/audio.pro	(revision 769)
@@ -1,3 +1,3 @@
 TEMPLATE = subdirs
+SUBDIRS =
 
-#SUBDIRS += ossaudio
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp	(revision 769)
@@ -69,9 +69,8 @@
 
     enum CompositionModeStatus {
-        PorterDuff_None = 0x00,
-        PorterDuff_SupportedBlits = 0x01,
-        PorterDuff_SupportedPrimitives = 0x02,
-        PorterDuff_SupportedOpaquePrimitives = 0x04,
-        PorterDuff_Dirty = 0x10
+        PorterDuff_None = 0x0,
+        PorterDuff_Supported = 0x1,
+        PorterDuff_PremultiplyColors = 0x2,
+        PorterDuff_AlwaysBlend = 0x4
     };
 
@@ -98,5 +97,4 @@
     static inline void unlock(QDirectFBPaintDevice *device);
 
-    inline bool testCompositionMode(const QPen *pen, const QBrush *brush, const QColor *color = 0) const;
     inline bool isSimpleBrush(const QBrush &brush) const;
 
@@ -131,4 +129,5 @@
     QDirectFBPaintDevice *dfbDevice;
     uint compositionModeStatus;
+    bool isPremultiplied;
 
     bool inClip;
@@ -169,5 +168,5 @@
 #endif
 
-#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS
+#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS || defined QT_DEBUG
 #define VOID_ARG() static_cast<bool>(false)
 enum PaintOperation {
@@ -179,7 +178,87 @@
     ALL = 0xffff
 };
-#endif
-
+
+#ifdef QT_DEBUG
+static void initRasterFallbacksMasks(int *warningMask, int *disableMask)
+{
+    struct {
+        const char *name;
+        PaintOperation operation;
+    } const operations[] = {
+        { "DRAW_RECTS", DRAW_RECTS },
+        { "DRAW_LINES", DRAW_LINES },
+        { "DRAW_IMAGE", DRAW_IMAGE },
+        { "DRAW_PIXMAP", DRAW_PIXMAP },
+        { "DRAW_TILED_PIXMAP", DRAW_TILED_PIXMAP },
+        { "STROKE_PATH", STROKE_PATH },
+        { "DRAW_PATH", DRAW_PATH },
+        { "DRAW_POINTS", DRAW_POINTS },
+        { "DRAW_ELLIPSE", DRAW_ELLIPSE },
+        { "DRAW_POLYGON", DRAW_POLYGON },
+        { "DRAW_TEXT", DRAW_TEXT },
+        { "FILL_PATH", FILL_PATH },
+        { "FILL_RECT", FILL_RECT },
+        { "DRAW_COLORSPANS", DRAW_COLORSPANS },
+        { "DRAW_ROUNDED_RECT", DRAW_ROUNDED_RECT },
+        { "ALL", ALL },
+        { 0, ALL }
+    };
+
+    QStringList warning = QString::fromLatin1(qgetenv("QT_DIRECTFB_WARN_ON_RASTERFALLBACKS")).toUpper().split(QLatin1Char('|'),
+                                                                                                              QString::SkipEmptyParts);
+    QStringList disable = QString::fromLatin1(qgetenv("QT_DIRECTFB_DISABLE_RASTERFALLBACKS")).toUpper().split(QLatin1Char('|'),
+                                                                                                              QString::SkipEmptyParts);
+    *warningMask = 0;
+    *disableMask = 0;
+    if (!warning.isEmpty() || !disable.isEmpty()) {
+        for (int i=0; operations[i].name; ++i) {
+            const QString name = QString::fromLatin1(operations[i].name);
+            int idx = warning.indexOf(name);
+            if (idx != -1) {
+                *warningMask |= operations[i].operation;
+                warning.erase(warning.begin() + idx);
+            }
+            idx = disable.indexOf(name);
+            if (idx != -1) {
+                *disableMask |= operations[i].operation;
+                disable.erase(disable.begin() + idx);
+            }
+        }
+    }
+    if (!warning.isEmpty()) {
+        qWarning("QDirectFBPaintEngine QT_DIRECTFB_WARN_ON_RASTERFALLBACKS Unknown operation(s): %s",
+                 qPrintable(warning.join(QLatin1String("|"))));
+    }
+    if (!disable.isEmpty()) {
+        qWarning("QDirectFBPaintEngine QT_DIRECTFB_DISABLE_RASTERFALLBACKS Unknown operation(s): %s",
+                 qPrintable(disable.join(QLatin1String("|"))));
+    }
+
+}
+#endif
+
+static inline int rasterFallbacksMask(bool warn)
+{
 #ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS
+    if (warn)
+        return QT_DIRECTFB_WARN_ON_RASTERFALLBACKS;
+#endif
+#ifdef QT_DIRECTFB_DISABLE_RASTERFALLBACKS
+    if (!warn)
+        return QT_DIRECTFB_DISABLE_RASTERFALLBACKS;
+#endif
+#ifndef QT_DEBUG
+    return 0;
+#else
+    static int warnMask = -1;
+    static int disableMask = -1;
+    if (warnMask == -1)
+        initRasterFallbacksMasks(&warnMask, &disableMask);
+    return warn ? warnMask : disableMask;
+#endif
+}
+#endif
+
+#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DEBUG
 template <typename device, typename T1, typename T2, typename T3>
 static void rasterFallbackWarn(const char *msg, const char *func, const device *dev,
@@ -191,23 +270,29 @@
 #endif
 
-#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS
+#if defined QT_DEBUG || (defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS)
 #define RASTERFALLBACK(op, one, two, three)                             \
-    if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS))                     \
-        rasterFallbackWarn("Disabled raster engine operation",          \
-                           __FUNCTION__, state()->painter->device(),    \
-                           d_func()->transformationType,                \
-                           d_func()->simplePen,                         \
-                           d_func()->clipType,                          \
-                           d_func()->compositionModeStatus,             \
-                           #one, one, #two, two, #three, three);        \
-    if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS))                     \
-        return;
+    {                                                                   \
+        const bool disable = op & rasterFallbacksMask(false);           \
+        if (op & rasterFallbacksMask(true))                             \
+            rasterFallbackWarn(disable                                  \
+                               ? "Disabled raster engine operation"     \
+                               : "Falling back to raster engine for",   \
+                               __FUNCTION__,                            \
+                               state()->painter->device(),              \
+                               d_func()->transformationType,            \
+                               d_func()->simplePen,                     \
+                               d_func()->clipType,                      \
+                               d_func()->compositionModeStatus,         \
+                               #one, one, #two, two, #three, three);    \
+        if (disable)                                                    \
+            return;                                                     \
+    }
 #elif defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS
-#define RASTERFALLBACK(op, one, two, three)             \
-    if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS))     \
+#define RASTERFALLBACK(op, one, two, three)                             \
+    if (op & rasterFallbacksMask(false))                                \
         return;
 #elif defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS
 #define RASTERFALLBACK(op, one, two, three)                             \
-    if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS))                     \
+    if (op & rasterFallbacksMask(true))                                 \
         rasterFallbackWarn("Falling back to raster engine for",         \
                            __FUNCTION__, state()->painter->device(),    \
@@ -288,4 +373,5 @@
                device->devType());
     }
+    d->isPremultiplied = QDirectFBScreen::isPremultiplied(d->dfbDevice->format());
 
     d->prepare(d->dfbDevice);
@@ -414,5 +500,5 @@
         || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip
         || !d->isSimpleBrush(brush)
-        || !d->testCompositionMode(&pen, &brush)) {
+        || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
         RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG());
         d->lock();
@@ -444,5 +530,5 @@
         || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip
         || !d->isSimpleBrush(brush)
-        || !d->testCompositionMode(&pen, &brush)) {
+        || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
         RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG());
         d->lock();
@@ -469,5 +555,5 @@
     if (!d->simplePen
         || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip
-        || !d->testCompositionMode(&pen, 0)) {
+        || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
         RASTERFALLBACK(DRAW_LINES, lineCount, VOID_ARG(), VOID_ARG());
         d->lock();
@@ -489,5 +575,5 @@
     if (!d->simplePen
         || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip
-        || !d->testCompositionMode(&pen, 0)) {
+        || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
         RASTERFALLBACK(DRAW_LINES, lineCount, VOID_ARG(), VOID_ARG());
         d->lock();
@@ -527,5 +613,5 @@
 
 #if !defined QT_NO_DIRECTFB_PREALLOCATED || defined QT_DIRECTFB_IMAGECACHE
-    if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits)
+    if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)
         || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
         || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip)
@@ -576,5 +662,5 @@
         Q_ASSERT(data->classId() == QPixmapData::DirectFBClass);
         QDirectFBPixmapData *dfbData = static_cast<QDirectFBPixmapData*>(data);
-        if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits)
+        if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)
             || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
             || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip)
@@ -607,5 +693,5 @@
         d->lock();
         QRasterPaintEngine::drawTiledPixmap(r, pixmap, offset);
-    } else if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits)
+    } else if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)
                || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
                || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip)
@@ -720,11 +806,12 @@
         switch (brush.style()) {
         case Qt::SolidPattern: {
-            if (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported
-                || !d->testCompositionMode(0, &brush)) {
-                break;
-            }
             const QColor color = brush.color();
             if (!color.isValid())
                 return;
+
+            if (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported
+                || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
+                break;
+            }
             d->setDFBColor(color);
             const QRect r = state()->matrix.mapRect(rect).toRect();
@@ -733,5 +820,5 @@
 
         case Qt::TexturePattern: {
-            if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits)
+            if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)
                 || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
                 || (!d->supportsStretchBlit() && state()->matrix.isScaling())) {
@@ -761,5 +848,5 @@
     if ((d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported)
         || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip)
-        || !d->testCompositionMode(0, 0, &color)) {
+        || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) {
         RASTERFALLBACK(FILL_RECT, rect, color, VOID_ARG());
         d->lock();
@@ -805,5 +892,5 @@
       transformationType(0), opacity(255),
       clipType(ClipUnset), dfbDevice(0),
-      compositionModeStatus(0), inClip(false), q(p)
+      compositionModeStatus(0), isPremultiplied(false), inClip(false), q(p)
 {
     fb = QDirectFBScreen::instance()->dfb();
@@ -820,34 +907,4 @@
     return (brush.style() == Qt::NoBrush) || (brush.style() == Qt::SolidPattern && !antialiased);
 }
-
-bool QDirectFBPaintEnginePrivate::testCompositionMode(const QPen *pen, const QBrush *brush, const QColor *color) const
-{
-    Q_ASSERT(!pen || pen->style() == Qt::NoPen || pen->style() == Qt::SolidLine);
-    Q_ASSERT(!brush || brush->style() == Qt::NoBrush || brush->style() == Qt::SolidPattern);
-    switch (compositionModeStatus & (QDirectFBPaintEnginePrivate::PorterDuff_SupportedOpaquePrimitives
-                                     |QDirectFBPaintEnginePrivate::PorterDuff_SupportedPrimitives)) {
-    case QDirectFBPaintEnginePrivate::PorterDuff_SupportedPrimitives:
-        return true;
-    case QDirectFBPaintEnginePrivate::PorterDuff_SupportedOpaquePrimitives:
-        if (pen && pen->style() == Qt::SolidLine && pen->color().alpha() != 255)
-            return false;
-        if (brush) {
-            if (brush->style() == Qt::SolidPattern && brush->color().alpha() != 255) {
-                return false;
-            }
-        } else if (color && color->alpha() != 255) {
-            return false;
-        }
-        return true;
-    case QDirectFBPaintEnginePrivate::PorterDuff_None:
-        return false;
-    default:
-        // ### PorterDuff_SupportedOpaquePrimitives|PorterDuff_SupportedPrimitives can't be combined
-        break;
-    }
-    Q_ASSERT(0);
-    return false;
-}
-
 
 void QDirectFBPaintEnginePrivate::lock()
@@ -913,9 +970,9 @@
     static const bool forceRasterFallBack = qgetenv("QT_DIRECTFB_FORCE_RASTER").toInt() > 0;
     if (forceRasterFallBack) {
-        compositionModeStatus = 0;
+        compositionModeStatus = PorterDuff_None;
         return;
     }
 
-    compositionModeStatus = PorterDuff_SupportedBlits;
+    compositionModeStatus = PorterDuff_Supported|PorterDuff_PremultiplyColors|PorterDuff_AlwaysBlend;
     switch (mode) {
     case QPainter::CompositionMode_Clear:
@@ -924,8 +981,10 @@
     case QPainter::CompositionMode_Source:
         surface->SetPorterDuff(surface, DSPD_SRC);
-        compositionModeStatus |= PorterDuff_SupportedOpaquePrimitives;
+        compositionModeStatus &= ~PorterDuff_AlwaysBlend;
+        if (!isPremultiplied)
+            compositionModeStatus &= ~PorterDuff_PremultiplyColors;
         break;
     case QPainter::CompositionMode_SourceOver:
-        compositionModeStatus |= PorterDuff_SupportedPrimitives;
+        compositionModeStatus &= ~PorterDuff_AlwaysBlend;
         surface->SetPorterDuff(surface, DSPD_SRC_OVER);
         break;
@@ -935,4 +994,6 @@
     case QPainter::CompositionMode_SourceIn:
         surface->SetPorterDuff(surface, DSPD_SRC_IN);
+        if (!isPremultiplied)
+            compositionModeStatus &= ~PorterDuff_PremultiplyColors;
         break;
     case QPainter::CompositionMode_DestinationIn:
@@ -945,4 +1006,9 @@
         surface->SetPorterDuff(surface, DSPD_DST_OUT);
         break;
+#if (Q_DIRECTFB_VERSION >= 0x010209)
+    case QPainter::CompositionMode_Destination:
+        surface->SetPorterDuff(surface, DSPD_DST);
+        break;
+#endif
 #if (Q_DIRECTFB_VERSION >= 0x010000)
     case QPainter::CompositionMode_SourceAtop:
@@ -960,5 +1026,5 @@
 #endif
     default:
-        compositionModeStatus = 0;
+        compositionModeStatus = PorterDuff_None;
         break;
     }
@@ -982,7 +1048,4 @@
     surface->SetColor(surface, 0xff, 0xff, 0xff, opacity);
     surface->SetBlittingFlags(surface, blittingFlags);
-    if (compositionModeStatus & PorterDuff_Dirty) {
-        setCompositionMode(q->state()->composition_mode);
-    }
 }
 
@@ -997,10 +1060,18 @@
 {
     Q_ASSERT(surface);
+    Q_ASSERT(compositionModeStatus & PorterDuff_Supported);
     const quint8 alpha = (opacity == 255 ?
                           color.alpha() : ALPHA_MUL(color.alpha(), opacity));
-    surface->SetColor(surface, color.red(), color.green(), color.blue(), alpha);
-    surface->SetPorterDuff(surface, DSPD_NONE);
-    surface->SetDrawingFlags(surface, alpha == 255 ? DSDRAW_NOFX : DSDRAW_BLEND);
-    compositionModeStatus |= PorterDuff_Dirty;
+    QColor col;
+    if (compositionModeStatus & PorterDuff_PremultiplyColors) {
+        col = QColor(ALPHA_MUL(color.red(), alpha),
+                     ALPHA_MUL(color.green(), alpha),
+                     ALPHA_MUL(color.blue(), alpha),
+                     alpha);
+    } else {
+        col = QColor(color.red(), color.green(), color.blue(), alpha);
+    }
+    surface->SetColor(surface, col.red(), col.green(), col.blue(), col.alpha());
+    surface->SetDrawingFlags(surface, alpha == 255 && !(compositionModeStatus & PorterDuff_AlwaysBlend) ? DSDRAW_NOFX : DSDRAW_BLEND);
 }
 
@@ -1284,5 +1355,5 @@
 }
 
-#ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS
+#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DEBUG
 template <typename T> inline const T *ptr(const T &t) { return &t; }
 template <> inline const bool* ptr<bool>(const bool &) { return 0; }
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp	(revision 769)
@@ -175,4 +175,6 @@
                                    Qt::ImageConversionFlags flags)
 {
+    if (!QFile::exists(filename))
+        return false;
     if (flags == Qt::AutoColor) {
         if (filename.startsWith(QLatin1Char(':'))) { // resource
@@ -289,25 +291,20 @@
                                     Qt::ImageConversionFlags flags)
 {
-    if (img.depth() == 1 || img.format() == QImage::Format_RGB32) {
-        fromImage(img.convertToFormat(screen->alphaPixmapFormat()), flags);
-        return;
-    }
-
-    if (img.hasAlphaChannel()
+    if (img.depth() == 1) {
+        alpha = true;
 #ifndef QT_NO_DIRECTFB_OPAQUE_DETECTION
-        && (flags & Qt::NoOpaqueDetection || QDirectFBPixmapData::hasAlphaChannel(img))
-#endif
-        ) {
+    } else if (flags & Qt::NoOpaqueDetection || QDirectFBPixmapData::hasAlphaChannel(img)) {
         alpha = true;
-        imageFormat = screen->alphaPixmapFormat();
-    } else {
-        alpha = false;
-        imageFormat = screen->pixelFormat();
-    }
+#else
+    } else if (img.hasAlphaChannel()) {
+        alpha = true;
+#endif
+    }
+    imageFormat = alpha ? screen->alphaPixmapFormat() : screen->pixelFormat();
     QImage image;
-    if (flags != Qt::AutoColor) {
+    if ((flags & ~Qt::NoOpaqueDetection) != Qt::AutoColor) {
         image = img.convertToFormat(imageFormat, flags);
         flags = Qt::AutoColor;
-    } else if (img.format() == QImage::Format_RGB32) {
+    } else if (img.format() == QImage::Format_RGB32 || img.depth() == 1) {
         image = img.convertToFormat(imageFormat, flags);
     } else {
@@ -426,5 +423,5 @@
     Q_ASSERT(dfbSurface);
 
-    alpha = (color.alpha() < 255);
+    alpha |= (color.alpha() < 255);
 
     if (alpha && isOpaqueFormat(imageFormat)) {
@@ -594,4 +591,15 @@
 }
 
+#ifndef QT_DIRECTFB_PLUGIN
+Q_GUI_EXPORT IDirectFBSurface *qt_directfb_surface_for_pixmap(const QPixmap &pixmap)
+{
+    const QPixmapData *data = pixmap.pixmapData();
+    if (!data || data->classId() != QPixmapData::DirectFBClass)
+        return 0;
+    const QDirectFBPixmapData *dfbData = static_cast<const QDirectFBPixmapData*>(data);
+    return dfbData->directFBSurface();
+}
+#endif
+
 QT_END_NAMESPACE
 
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp	(revision 769)
@@ -922,5 +922,5 @@
         }
     } else {
-        flipFlags = DSFLIP_BLIT;
+        flipFlags = DSFLIP_BLIT|DSFLIP_ONSYNC;
     }
 }
@@ -1127,4 +1127,6 @@
     if (displayArgs.contains(QLatin1String("boundingrectflip"), Qt::CaseInsensitive)) {
         d_ptr->directFBFlags |= BoundingRectFlip;
+    } else if (displayArgs.contains(QLatin1String("nopartialflip"), Qt::CaseInsensitive)) {
+        d_ptr->directFBFlags |= NoPartialFlip;
     }
 
@@ -1139,4 +1141,6 @@
 #endif
         d_ptr->dfb->SetCooperativeLevel(d_ptr->dfb, DFSCL_FULLSCREEN);
+
+    const bool forcePremultiplied = displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive);
 
     DFBSurfaceDescription description;
@@ -1168,5 +1172,5 @@
     }
 
-    if (displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive)) {
+    if (forcePremultiplied) {
         description.caps |= DSCAPS_PREMULTIPLIED;
     }
@@ -1218,4 +1222,6 @@
         break;
     case QImage::Format_ARGB32:
+        if (forcePremultiplied)
+            d_ptr->alphaPixmapFormat = pixelFormat = QImage::Format_ARGB32_Premultiplied;
     case QImage::Format_ARGB32_Premultiplied:
     case QImage::Format_ARGB4444_Premultiplied:
@@ -1675,5 +1681,5 @@
 uchar *QDirectFBScreen::lockSurface(IDirectFBSurface *surface, DFBSurfaceLockFlags flags, int *bpl)
 {
-    void *mem;
+    void *mem = 0;
     const DFBResult result = surface->Lock(surface, flags, &mem, bpl);
     if (result != DFB_OK) {
@@ -1684,9 +1690,20 @@
 }
 
+static inline bool isFullUpdate(IDirectFBSurface *surface, const QRegion &region, const QPoint &offset)
+{
+    if (offset == QPoint(0, 0) && region.rectCount() == 1) {
+	QSize size;
+	surface->GetSize(surface, &size.rwidth(), &size.rheight());
+	if (region.boundingRect().size() == size)
+	    return true;
+    }
+    return false;
+}
 
 void QDirectFBScreen::flipSurface(IDirectFBSurface *surface, DFBSurfaceFlipFlags flipFlags,
                                   const QRegion &region, const QPoint &offset)
 {
-    if (!(flipFlags & DSFLIP_BLIT)) {
+    if (d_ptr->directFBFlags & NoPartialFlip
+        || (!(flipFlags & DSFLIP_BLIT) && QT_PREPEND_NAMESPACE(isFullUpdate(surface, region, offset)))) {
         surface->Flip(surface, 0, flipFlags);
     } else {
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h	(revision 769)
@@ -145,5 +145,6 @@
         VideoOnly = 0x01,
         SystemOnly = 0x02,
-        BoundingRectFlip = 0x04
+        BoundingRectFlip = 0x04,
+        NoPartialFlip = 0x08
     };
 
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp	(revision 769)
@@ -62,4 +62,5 @@
     , flipFlags(flip)
     , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip)
+    , flushPending(false)
 {
 #ifdef QT_NO_DIRECTFB_WM
@@ -81,4 +82,5 @@
     , flipFlags(flip)
     , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip)
+    , flushPending(false)
 {
     SurfaceFlags flags = 0;
@@ -93,8 +95,4 @@
         flags = Buffered;
     }
-#else
-    noSystemBackground = widget && widget->testAttribute(Qt::WA_NoSystemBackground);
-    if (noSystemBackground)
-        flags &= ~Opaque;
 #endif
     setSurfaceFlags(flags);
@@ -135,31 +133,33 @@
         qFatal("QDirectFBWindowSurface: Unable to get primary display layer!");
 
+    updateIsOpaque();
+
     DFBWindowDescription description;
     memset(&description, 0, sizeof(DFBWindowDescription));
 
+    description.flags = DWDESC_CAPS|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT;
     description.caps = DWCAPS_NODECORATION;
-    description.flags = DWDESC_CAPS|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY;
-#if (Q_DIRECTFB_VERSION >= 0x010200)
-    description.flags |= DWDESC_OPTIONS;
-#endif
-
-    if (noSystemBackground) {
+    description.surface_caps = DSCAPS_NONE;
+    imageFormat = screen->pixelFormat();
+
+    if (!(surfaceFlags() & Opaque)) {
+        imageFormat = screen->alphaPixmapFormat();
         description.caps |= DWCAPS_ALPHACHANNEL;
 #if (Q_DIRECTFB_VERSION >= 0x010200)
+        description.flags |= DWDESC_OPTIONS;
         description.options |= DWOP_ALPHACHANNEL;
 #endif
     }
-
+    description.pixelformat = QDirectFBScreen::getSurfacePixelFormat(imageFormat);
     description.posx = rect.x();
     description.posy = rect.y();
     description.width = rect.width();
     description.height = rect.height();
-    description.surface_caps = DSCAPS_NONE;
+
+    if (QDirectFBScreen::isPremultiplied(imageFormat))
+        description.surface_caps = DSCAPS_PREMULTIPLIED;
+
     if (screen->directFBFlags() & QDirectFBScreen::VideoOnly)
         description.surface_caps |= DSCAPS_VIDEOONLY;
-    const QImage::Format format = (noSystemBackground ? screen->alphaPixmapFormat() : screen->pixelFormat());
-    description.pixelformat = QDirectFBScreen::getSurfacePixelFormat(format);
-    if (QDirectFBScreen::isPremultiplied(format))
-        description.surface_caps = DSCAPS_PREMULTIPLIED;
 
     DFBResult result = layer->CreateWindow(layer, &description, &dfbWindow);
@@ -183,5 +183,4 @@
     Q_ASSERT(!dfbSurface);
     dfbWindow->GetSurface(dfbWindow, &dfbSurface);
-    updateFormat();
 }
 
@@ -268,5 +267,6 @@
         } else { // mode == Offscreen
             if (!dfbSurface) {
-                dfbSurface = screen->createDFBSurface(rect.size(), screen->pixelFormat(), QDirectFBScreen::DontTrackSurface);
+                dfbSurface = screen->createDFBSurface(rect.size(), surfaceFlags() & Opaque ? screen->pixelFormat() : screen->alphaPixmapFormat(),
+                                                      QDirectFBScreen::DontTrackSurface);
             }
         }
@@ -275,6 +275,7 @@
 #endif
     }
-    if (oldSurface != dfbSurface)
-        updateFormat();
+    if (oldSurface != dfbSurface) {
+        imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid;
+    }
 
     if (oldRect.size() != rect.size()) {
@@ -297,30 +298,21 @@
         sibling = *reinterpret_cast<QDirectFBWindowSurface *const*>(state.constData());
         Q_ASSERT(sibling);
-        sibling->setSurfaceFlags(surfaceFlags());
-    }
-}
-
-static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy)
-{
+        setSurfaceFlags(sibling->surfaceFlags());
+    }
+}
+
+bool QDirectFBWindowSurface::scroll(const QRegion &region, int dx, int dy)
+{
+    if (!dfbSurface || !(flipFlags & DSFLIP_BLIT) || region.rectCount() != 1)
+        return false;
+    if (flushPending) {
+        dfbSurface->Flip(dfbSurface, 0, DSFLIP_BLIT);
+    } else {
+        flushPending = true;
+    }
+    dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
+    const QRect r = region.boundingRect();
     const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() };
-    surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy);
-    const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy };
-    surface->Flip(surface, &region, DSFLIP_BLIT);
-}
-
-bool QDirectFBWindowSurface::scroll(const QRegion &region, int dx, int dy)
-{
-    if (!dfbSurface || !(flipFlags & DSFLIP_BLIT) || region.isEmpty())
-        return false;
-    dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
-    if (region.rectCount() == 1) {
-        scrollSurface(dfbSurface, region.boundingRect(), dx, dy);
-    } else {
-        const QVector<QRect> rects = region.rects();
-        const int n = rects.size();
-        for (int i=0; i<n; ++i) {
-            scrollSurface(dfbSurface, rects.at(i), dx, dy);
-        }
-    }
+    dfbSurface->Blit(dfbSurface, dfbSurface, &rect, r.x() + dx, r.y() + dy);
     return true;
 }
@@ -360,6 +352,4 @@
     const QRect windowGeometry = geometry();
 #ifdef QT_DIRECTFB_WM
-    const bool wasNoSystemBackground = noSystemBackground;
-    noSystemBackground = win->testAttribute(Qt::WA_NoSystemBackground);
     quint8 currentOpacity;
     Q_ASSERT(dfbWindow);
@@ -369,16 +359,7 @@
     }
 
-    setOpaque(noSystemBackground || windowOpacity != 0xff);
-    if (wasNoSystemBackground != noSystemBackground) {
-        releaseSurface();
-        dfbWindow->Release(dfbWindow);
-        dfbWindow = 0;
-        createWindow(windowGeometry);
-        win->update();
-        return;
-    }
     screen->flipSurface(dfbSurface, flipFlags, region, offset);
 #else
-    setOpaque(windowOpacity != 0xff);
+    setOpaque(windowOpacity == 0xff);
     if (mode == Offscreen) {
         screen->exposeRegion(region.translated(offset + geometry().topLeft()), 0);
@@ -397,4 +378,5 @@
     }
 #endif
+    flushPending = false;
 }
 
@@ -404,4 +386,5 @@
         engine = new QDirectFBPaintEngine(this);
     }
+    flushPending = true;
 }
 
@@ -443,9 +426,4 @@
 }
 
-void QDirectFBWindowSurface::updateFormat()
-{
-    imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid;
-}
-
 void QDirectFBWindowSurface::releaseSurface()
 {
@@ -466,8 +444,36 @@
 }
 
+void QDirectFBWindowSurface::updateIsOpaque()
+{
+    const QWidget *win = window();
+    Q_ASSERT(win);
+    if (win->testAttribute(Qt::WA_OpaquePaintEvent) || win->testAttribute(Qt::WA_PaintOnScreen)) {
+        setOpaque(true);
+        return;
+    }
+
+    if (qFuzzyCompare(static_cast<float>(win->windowOpacity()), 1.0f)) {
+        const QPalette &pal = win->palette();
+
+        if (win->autoFillBackground()) {
+            const QBrush &autoFillBrush = pal.brush(win->backgroundRole());
+            if (autoFillBrush.style() != Qt::NoBrush && autoFillBrush.isOpaque()) {
+                setOpaque(true);
+                return;
+            }
+        }
+
+        if (win->isWindow() && !win->testAttribute(Qt::WA_NoSystemBackground)) {
+            const QBrush &windowBrush = win->palette().brush(QPalette::Window);
+            if (windowBrush.style() != Qt::NoBrush && windowBrush.isOpaque()) {
+                setOpaque(true);
+                return;
+            }
+        }
+    }
+    setOpaque(false);
+}
 
 QT_END_NAMESPACE
 
 #endif // QT_NO_QWS_DIRECTFB
-
-
Index: /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h
===================================================================
--- /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h	(revision 769)
@@ -98,6 +98,6 @@
 #endif
 private:
+    void updateIsOpaque();
     void setOpaque(bool opaque);
-    void updateFormat();
     void releaseSurface();
     QDirectFBWindowSurface *sibling;
@@ -114,6 +114,6 @@
 
     DFBSurfaceFlipFlags flipFlags;
-    bool noSystemBackground;
     bool boundingRectFlip;
+    bool flushPending;
 #ifdef QT_DIRECTFB_TIMING
     int frames;
Index: /trunk/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp	(revision 769)
@@ -260,5 +260,5 @@
         return 0;
     return 90 * static_cast<const QTransformedScreen *>(parent)
-                    ->transformation();
+                    ->transformOrientation();
 }
 
Index: /trunk/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp
===================================================================
--- /trunk/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp	(revision 768)
+++ /trunk/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp	(revision 769)
@@ -326,4 +326,34 @@
     { 0xffe9, Qt::Key_Alt       },
     { 0xffea, Qt::Key_Alt       },
+
+    { 0xffb0, Qt::Key_0         },
+    { 0xffb1, Qt::Key_1         },
+    { 0xffb2, Qt::Key_2         },
+    { 0xffb3, Qt::Key_3         },
+    { 0xffb4, Qt::Key_4         },
+    { 0xffb5, Qt::Key_5         },
+    { 0xffb6, Qt::Key_6         },
+    { 0xffb7, Qt::Key_7         },
+    { 0xffb8, Qt::Key_8         },
+    { 0xffb9, Qt::Key_9         },
+
+    { 0xff8d, Qt::Key_Return    },
+    { 0xffaa, Qt::Key_Asterisk  },
+    { 0xffab, Qt::Key_Plus      },
+    { 0xffad, Qt::Key_Minus     },
+    { 0xffae, Qt::Key_Period    },
+    { 0xffaf, Qt::Key_Slash     },
+
+    { 0xff95, Qt::Key_Home      },
+    { 0xff96, Qt::Key_Left      },
+    { 0xff97, Qt::Key_Up        },
+    { 0xff98, Qt::Key_Right     },
+    { 0xff99, Qt::Key_Down      },
+    { 0xff9a, Qt::Key_PageUp    },
+    { 0xff9b, Qt::Key_PageDown  },
+    { 0xff9c, Qt::Key_End       },
+    { 0xff9e, Qt::Key_Insert    },
+    { 0xff9f, Qt::Key_Delete    },
+
     { 0, 0 }
 };
@@ -484,4 +514,8 @@
         i++;
     }
+
+    if (keycode >= ' ' && keycode <= '~')
+        unicode = keycode;
+
     if (!keycode) {
         if (key <= 0xff) {
@@ -2130,4 +2164,7 @@
         const int id = getDisplayId(dspec);
         QScreen *s = qt_get_screen(id, dspec.toLatin1().constData());
+        if (s->pixelFormat() == QImage::Format_Indexed8
+            || s->pixelFormat() == QImage::Format_Invalid && s->depth() == 8)
+            qFatal("QVNCScreen: unsupported screen format");
         setScreen(s);
     } else { // create virtual screen
Index: /trunk/src/plugins/imageformats/ico/qicohandler.cpp
===================================================================
--- /trunk/src/plugins/imageformats/ico/qicohandler.cpp	(revision 768)
+++ /trunk/src/plugins/imageformats/ico/qicohandler.cpp	(revision 769)
@@ -54,4 +54,5 @@
 #include <QtCore/QFile>
 #include <QtCore/QBuffer>
+#include <qvariant.h>
 // These next two structs represent how the icon information is stored
 // in an ICO file.
@@ -773,4 +774,27 @@
 }
 
+QVariant QtIcoHandler::option(ImageOption option) const
+{
+    if (option == Size) {
+        QIODevice *device = QImageIOHandler::device();
+        qint64 oldPos = device->pos();
+        ICONDIRENTRY iconEntry;
+        if (device->seek(oldPos + ICONDIR_SIZE + (m_currentIconIndex * ICONDIRENTRY_SIZE))) {
+            if (readIconDirEntry(device, &iconEntry)) {
+                device->seek(oldPos);
+                return QSize(iconEntry.bWidth, iconEntry.bHeight);
+            }
+        }
+        if (!device->isSequential())
+            device->seek(oldPos);
+    }
+    return QVariant();
+}
+
+bool QtIcoHandler::supportsOption(ImageOption option) const
+{
+    return option == Size;
+}
+
 /*!
  * Verifies if some values (magic bytes) are set as expected in the header of the file.
Index: /trunk/src/plugins/imageformats/ico/qicohandler.h
===================================================================
--- /trunk/src/plugins/imageformats/ico/qicohandler.h	(revision 768)
+++ /trunk/src/plugins/imageformats/ico/qicohandler.h	(revision 769)
@@ -63,4 +63,7 @@
     static bool canRead(QIODevice *device);
     
+    bool supportsOption(ImageOption option) const;
+    QVariant option(ImageOption option) const;
+
 private:
     int m_currentIconIndex;
Index: /trunk/src/plugins/imageformats/jpeg/qjpeghandler.cpp
===================================================================
--- /trunk/src/plugins/imageformats/jpeg/qjpeghandler.cpp	(revision 768)
+++ /trunk/src/plugins/imageformats/jpeg/qjpeghandler.cpp	(revision 769)
@@ -1189,5 +1189,9 @@
     }
 
-    return device->peek(2) == "\xFF\xD8";
+    char buffer[2];
+    if (device->peek(buffer, 2) != 2)
+        return false;
+
+    return uchar(buffer[0]) == 0xff && uchar(buffer[1]) == 0xd8;
 }
 
Index: /trunk/src/plugins/kbddrivers/linuxinput/main.cpp
===================================================================
--- /trunk/src/plugins/kbddrivers/linuxinput/main.cpp	(revision 768)
+++ /trunk/src/plugins/kbddrivers/linuxinput/main.cpp	(revision 769)
@@ -70,5 +70,5 @@
     if (driver.compare(QLatin1String("LinuxInput"), Qt::CaseInsensitive))
         return 0;
-    return new QWSLinuxInputKeyboardHandler(driver, device);
+    return new QWSLinuxInputKeyboardHandler(device);
 }
 
Index: /trunk/src/plugins/phonon/mmf/mmf.pro
===================================================================
--- /trunk/src/plugins/phonon/mmf/mmf.pro	(revision 768)
+++ /trunk/src/plugins/phonon/mmf/mmf.pro	(revision 769)
@@ -21,4 +21,6 @@
 PREPEND_INCLUDEPATH = /epoc32/include
 
+PREPEND_INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty
+
 INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
 
@@ -27,5 +29,6 @@
            $$PHONON_MMF_DIR/abstractmediaplayer.h    \
            $$PHONON_MMF_DIR/abstractplayer.h         \
-           $$PHONON_MMF_DIR/ancestormovemonitor.h    \
+           $$PHONON_MMF_DIR/abstractvideooutput.h    \
+           $$PHONON_MMF_DIR/abstractvideoplayer.h    \
            $$PHONON_MMF_DIR/audioequalizer.h         \
            $$PHONON_MMF_DIR/audiooutput.h            \
@@ -41,5 +44,4 @@
            $$PHONON_MMF_DIR/mediaobject.h            \
            $$PHONON_MMF_DIR/mmf_medianode.h          \
-           $$PHONON_MMF_DIR/mmf_videoplayer.h        \
            $$PHONON_MMF_DIR/stereowidening.h         \
            $$PHONON_MMF_DIR/objectdump.h             \
@@ -47,5 +49,4 @@
            $$PHONON_MMF_DIR/objecttree.h             \
            $$PHONON_MMF_DIR/utils.h                  \
-           $$PHONON_MMF_DIR/videooutput.h            \
            $$PHONON_MMF_DIR/videowidget.h
 
@@ -54,8 +55,9 @@
            $$PHONON_MMF_DIR/abstractmediaplayer.cpp  \
            $$PHONON_MMF_DIR/abstractplayer.cpp       \
-           $$PHONON_MMF_DIR/ancestormovemonitor.cpp  \
            $$PHONON_MMF_DIR/audioequalizer.cpp       \
            $$PHONON_MMF_DIR/audiooutput.cpp          \
            $$PHONON_MMF_DIR/audioplayer.cpp          \
+           $$PHONON_MMF_DIR/abstractvideooutput.cpp  \
+           $$PHONON_MMF_DIR/abstractvideoplayer.cpp  \
            $$PHONON_MMF_DIR/backend.cpp              \
            $$PHONON_MMF_DIR/bassboost.cpp            \
@@ -67,5 +69,4 @@
            $$PHONON_MMF_DIR/mediaobject.cpp          \
            $$PHONON_MMF_DIR/mmf_medianode.cpp        \
-           $$PHONON_MMF_DIR/mmf_videoplayer.cpp      \
            $$PHONON_MMF_DIR/stereowidening.cpp       \
            $$PHONON_MMF_DIR/objectdump.cpp           \
@@ -73,6 +74,26 @@
            $$PHONON_MMF_DIR/objecttree.cpp           \
            $$PHONON_MMF_DIR/utils.cpp                \
-           $$PHONON_MMF_DIR/videooutput.cpp          \
            $$PHONON_MMF_DIR/videowidget.cpp
+
+# Test for whether the build environment supports video rendering to graphics
+# surfaces.
+exists($${EPOCROOT}epoc32/include/platform/videoplayer2.h) {
+    HEADERS +=                                       \
+           $$PHONON_MMF_DIR/videooutput_surface.h    \
+           $$PHONON_MMF_DIR/videoplayer_surface.h
+    SOURCES +=                                       \
+           $$PHONON_MMF_DIR/videooutput_surface.cpp  \
+           $$PHONON_MMF_DIR/videoplayer_surface.cpp
+    DEFINES += PHONON_MMF_VIDEO_SURFACES
+} else {
+    HEADERS +=                                       \
+           $$PHONON_MMF_DIR/ancestormovemonitor.h    \
+           $$PHONON_MMF_DIR/videooutput_dsa.h        \
+           $$PHONON_MMF_DIR/videoplayer_dsa.h
+    SOURCES +=                                       \
+           $$PHONON_MMF_DIR/ancestormovemonitor.cpp  \
+           $$PHONON_MMF_DIR/videooutput_dsa.cpp      \
+           $$PHONON_MMF_DIR/videoplayer_dsa.cpp      \
+}
 
 LIBS += -lcone
Index: /trunk/src/plugins/qpluginbase.pri
===================================================================
--- /trunk/src/plugins/qpluginbase.pri	(revision 768)
+++ /trunk/src/plugins/qpluginbase.pri	(revision 769)
@@ -15,4 +15,5 @@
     TARGET.EPOCALLOWDLLDATA=1
     TARGET.CAPABILITY = All -Tcb
+    TARGET = $${TARGET}$${QT_LIBINFIX}
     load(armcc_warnings)
 }
Index: /trunk/src/plugins/s60/3_1/3_1.pro
===================================================================
--- /trunk/src/plugins/s60/3_1/3_1.pro	(revision 768)
+++ /trunk/src/plugins/s60/3_1/3_1.pro	(revision 769)
@@ -1,5 +1,5 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_3_1
+TARGET  = qts60plugin_3_1$${QT_LIBINFIX}
 
 SOURCES += ../src/qlocale_3_1.cpp \
Index: /trunk/src/plugins/s60/3_2/3_2.pro
===================================================================
--- /trunk/src/plugins/s60/3_2/3_2.pro	(revision 768)
+++ /trunk/src/plugins/s60/3_2/3_2.pro	(revision 769)
@@ -1,5 +1,5 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_3_2
+TARGET  = qts60plugin_3_2$${QT_LIBINFIX}
 
 contains(S60_VERSION, 3.1) {
@@ -11,5 +11,5 @@
         ../src/qdesktopservices_3_2.cpp \
         ../src/qcoreapplication_3_2.cpp
-    LIBS += -ldirectorylocalizer -lefsrv
+    LIBS += -lDirectoryLocalizer -lefsrv
     INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 }
Index: /trunk/src/plugins/s60/5_0/5_0.pro
===================================================================
--- /trunk/src/plugins/s60/5_0/5_0.pro	(revision 768)
+++ /trunk/src/plugins/s60/5_0/5_0.pro	(revision 769)
@@ -1,5 +1,5 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_5_0
+TARGET  = qts60plugin_5_0$${QT_LIBINFIX}
 
 contains(S60_VERSION, 3.1) {
@@ -11,5 +11,5 @@
         ../src/qdesktopservices_3_2.cpp \
         ../src/qcoreapplication_3_2.cpp
-    LIBS += -ldirectorylocalizer -lefsrv
+    LIBS += -lDirectoryLocalizer -lefsrv
     INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 }
Index: /trunk/src/plugins/s60/src/qdesktopservices_3_2.cpp
===================================================================
--- /trunk/src/plugins/s60/src/qdesktopservices_3_2.cpp	(revision 768)
+++ /trunk/src/plugins/s60/src/qdesktopservices_3_2.cpp	(revision 769)
@@ -46,5 +46,5 @@
 #ifdef Q_WS_S60
 #include <e32base.h>                 // CBase -> Required by cdirectorylocalizer.h
-#include <cdirectorylocalizer.h>     // CDirectoryLocalizer
+#include <CDirectoryLocalizer.h>     // CDirectoryLocalizer
 
 EXPORT_C QString localizedDirectoryName(QString& rawPath)
Index: /trunk/src/plugins/sqldrivers/odbc/odbc.pro
===================================================================
--- /trunk/src/plugins/sqldrivers/odbc/odbc.pro	(revision 768)
+++ /trunk/src/plugins/sqldrivers/odbc/odbc.pro	(revision 769)
@@ -9,4 +9,5 @@
 	    LIBS 	*= $$QT_LFLAGS_ODBC
 	}
+        DEFINES += UNICODE
 }
 
Index: /trunk/src/plugins/sqldrivers/sqlite/sqlite.pro
===================================================================
--- /trunk/src/plugins/sqldrivers/sqlite/sqlite.pro	(revision 768)
+++ /trunk/src/plugins/sqldrivers/sqlite/sqlite.pro	(revision 769)
@@ -16,3 +16,5 @@
 }
 
+wince*: DEFINES += HAVE_LOCALTIME_S=0
+
 include(../qsqldriverbase.pri)
Index: /trunk/src/qbase.pri
===================================================================
--- /trunk/src/qbase.pri	(revision 768)
+++ /trunk/src/qbase.pri	(revision 769)
@@ -106,4 +106,8 @@
     }
     load(armcc_warnings)
+
+    # workaround for the fact that some of our required includes in Symbian^3
+    # now depend upon files in epoc32/include/platform
+    INCLUDEPATH += $$OS_LAYER_SYSTEMINCLUDE
 }
 win32-borland:INCLUDEPATH += kernel
Index: /trunk/src/qt3support/dialogs/q3filedialog.cpp
===================================================================
--- /trunk/src/qt3support/dialogs/q3filedialog.cpp	(revision 768)
+++ /trunk/src/qt3support/dialogs/q3filedialog.cpp	(revision 769)
@@ -476,6 +476,14 @@
 static bool detailViewMode = false;
 
-static Q3CleanupHandler<QPixmap> qfd_cleanup_pixmap;
 static Q3CleanupHandler<QString> qfd_cleanup_string;
+
+static void qt_cleanup_fd_pixmaps();
+typedef QList<QPixmap *> FDPixmaps;
+Q_GLOBAL_STATIC_WITH_INITIALIZER(FDPixmaps, qfd_pixmaps, qAddPostRoutine(qt_cleanup_fd_pixmaps))
+
+static void qt_cleanup_fd_pixmaps()
+{
+    qDeleteAll(*qfd_pixmaps());
+}
 
 static QString toRootIfNotExists( const QString &path )
@@ -534,35 +542,35 @@
 
         openFolderIcon = new QPixmap((const char **)open_xpm);
-        qfd_cleanup_pixmap.add(&openFolderIcon);
+        qfd_pixmaps()->append(openFolderIcon);
         symLinkDirIcon = new QPixmap((const char **)link_dir_xpm);
-        qfd_cleanup_pixmap.add(&symLinkDirIcon);
+        qfd_pixmaps()->append(symLinkDirIcon);
         symLinkFileIcon = new QPixmap((const char **)link_file_xpm);
-        qfd_cleanup_pixmap.add(&symLinkFileIcon);
+        qfd_pixmaps()->append(symLinkFileIcon);
         fileIcon = new QPixmap((const char **)file_xpm);
-        qfd_cleanup_pixmap.add(&fileIcon);
+        qfd_pixmaps()->append(fileIcon);
         closedFolderIcon = new QPixmap((const char **)closed_xpm);
-        qfd_cleanup_pixmap.add(&closedFolderIcon);
+        qfd_pixmaps()->append(closedFolderIcon);
         detailViewIcon = new QPixmap((const char **)detailedview_xpm);
-        qfd_cleanup_pixmap.add(&detailViewIcon);
+        qfd_pixmaps()->append(detailViewIcon);
         multiColumnListViewIcon = new QPixmap((const char **)mclistview_xpm);
-        qfd_cleanup_pixmap.add(&multiColumnListViewIcon);
+        qfd_pixmaps()->append(multiColumnListViewIcon);
         cdToParentIcon = new QPixmap((const char **)cdtoparent_xpm);
-        qfd_cleanup_pixmap.add(&cdToParentIcon);
+        qfd_pixmaps()->append(cdToParentIcon);
         newFolderIcon = new QPixmap((const char **)newfolder_xpm);
-        qfd_cleanup_pixmap.add(&newFolderIcon);
+        qfd_pixmaps()->append(newFolderIcon);
         previewInfoViewIcon
             = new QPixmap((const char **)previewinfoview_xpm);
-        qfd_cleanup_pixmap.add(&previewInfoViewIcon);
+        qfd_pixmaps()->append(previewInfoViewIcon);
         previewContentsViewIcon
             = new QPixmap((const char **)previewcontentsview_xpm);
-        qfd_cleanup_pixmap.add(&previewContentsViewIcon);
+        qfd_pixmaps()->append(previewContentsViewIcon);
         startCopyIcon = new QPixmap((const char **)start_xpm);
-        qfd_cleanup_pixmap.add(&startCopyIcon);
+        qfd_pixmaps()->append(startCopyIcon);
         endCopyIcon = new QPixmap((const char **)end_xpm);
-        qfd_cleanup_pixmap.add(&endCopyIcon);
+        qfd_pixmaps()->append(endCopyIcon);
         goBackIcon = new QPixmap((const char **)back_xpm);
-        qfd_cleanup_pixmap.add(&goBackIcon);
+        qfd_pixmaps()->append(goBackIcon);
         fifteenTransparentPixels = new QPixmap(closedFolderIcon->width(), 1);
-        qfd_cleanup_pixmap.add(&fifteenTransparentPixels);
+        qfd_pixmaps()->append(fifteenTransparentPixels);
         QBitmap m(fifteenTransparentPixels->width(), 1);
         m.fill(Qt::color0);
Index: /trunk/src/qt3support/itemviews/q3iconview.cpp
===================================================================
--- /trunk/src/qt3support/itemviews/q3iconview.cpp	(revision 768)
+++ /trunk/src/qt3support/itemviews/q3iconview.cpp	(revision 769)
@@ -133,6 +133,13 @@
 static bool optimize_layout = false;
 
-static Q3CleanupHandler<QPixmap> qiv_cleanup_pixmap;
-
+
+static void qt_cleanup_iv_pixmaps();
+typedef QList<QPixmap *> IVPixmaps;
+Q_GLOBAL_STATIC_WITH_INITIALIZER(IVPixmaps, qiv_pixmaps, qAddPostRoutine(qt_cleanup_iv_pixmaps))
+
+static void qt_cleanup_iv_pixmaps()
+{
+    qDeleteAll(*qiv_pixmaps());
+}
 
 static QPixmap *get_qiv_buffer_pixmap(const QSize &s)
@@ -140,5 +147,5 @@
     if (!qiv_buffer_pixmap) {
         qiv_buffer_pixmap = new QPixmap(s);
-        qiv_cleanup_pixmap.add(&qiv_buffer_pixmap);
+        qiv_pixmaps()->append(qiv_buffer_pixmap);
         return qiv_buffer_pixmap;
     }
@@ -2581,5 +2588,5 @@
     if (!unknown_icon) {
         unknown_icon = new QPixmap((const char **)unknown_xpm);
-        qiv_cleanup_pixmap.add(&unknown_icon);
+        qiv_pixmaps()->append(unknown_icon);
     }
 
Index: /trunk/src/qt3support/itemviews/q3listview.cpp
===================================================================
--- /trunk/src/qt3support/itemviews/q3listview.cpp	(revision 768)
+++ /trunk/src/qt3support/itemviews/q3listview.cpp	(revision 769)
@@ -70,7 +70,4 @@
 
 const int Unsorted = 16383;
-
-static Q3CleanupHandler<QBitmap> qlv_cleanup_bitmap;
-
 
 struct Q3ListViewPrivate
Index: /trunk/src/qt3support/widgets/q3spinwidget.cpp
===================================================================
--- /trunk/src/qt3support/widgets/q3spinwidget.cpp	(revision 768)
+++ /trunk/src/qt3support/widgets/q3spinwidget.cpp	(revision 769)
@@ -341,9 +341,11 @@
     QStyleOptionSpinBox opt = getStyleOption(this);
 
-    if (d->theButton & 1)
+    if (d->theButton & 1) {
         opt.activeSubControls = QStyle::SC_SpinBoxDown;
-    else if (d->theButton & 2)
+        opt.state |= QStyle::State_Sunken;
+    } else if (d->theButton & 2) {
         opt.activeSubControls = QStyle::SC_SpinBoxUp;
-    else
+        opt.state |= QStyle::State_Sunken;
+    } else
         opt.activeSubControls = QStyle::SC_None;
     opt.rect = style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxFrame, this);
Index: /trunk/src/qt_targets.pri
===================================================================
--- /trunk/src/qt_targets.pri	(revision 768)
+++ /trunk/src/qt_targets.pri	(revision 769)
@@ -5,5 +5,5 @@
 
 isEmpty(QT_MAJOR_VERSION) {
-   VERSION=4.6.2
+   VERSION=4.6.3
 } else {
    VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
Index: /trunk/src/s60installs/bwins/QtCoreu.def
===================================================================
--- /trunk/src/s60installs/bwins/QtCoreu.def	(revision 768)
+++ /trunk/src/s60installs/bwins/QtCoreu.def	(revision 769)
@@ -4400,3 +4400,23 @@
 	?signalIndex@SignalEvent@QStateMachine@@QBEHXZ @ 4399 NONAME ; int QStateMachine::SignalEvent::signalIndex(void) const
 	?disconnectOne@QMetaObject@@SA_NPBVQObject@@H0H@Z @ 4400 NONAME ; bool QMetaObject::disconnectOne(class QObject const *, int, class QObject const *, int)
+	?QBasicAtomicInt_fetchAndAddRelease@@YAHPCHH@Z @ 4401 NONAME ; int QBasicAtomicInt_fetchAndAddRelease(int volatile *, int)
+	?QBasicAtomicPointer_testAndSetRelaxed@@YA_NPCRAXPAX1@Z @ 4402 NONAME ; bool QBasicAtomicPointer_testAndSetRelaxed(void * volatile *, void *, void *)
+	?QBasicAtomicInt_fetchAndAddRelaxed@@YAHPCHH@Z @ 4403 NONAME ; int QBasicAtomicInt_fetchAndAddRelaxed(int volatile *, int)
+	?QBasicAtomicPointer_testAndSetRelease@@YA_NPCRAXPAX1@Z @ 4404 NONAME ; bool QBasicAtomicPointer_testAndSetRelease(void * volatile *, void *, void *)
+	?QBasicAtomicInt_fetchAndStoreRelease@@YAHPCHH@Z @ 4405 NONAME ; int QBasicAtomicInt_fetchAndStoreRelease(int volatile *, int)
+	?QBasicAtomicPointer_fetchAndAddAcquire@@YAPAXPCRAXH@Z @ 4406 NONAME ; void * QBasicAtomicPointer_fetchAndAddAcquire(void * volatile *, int)
+	?QBasicAtomicPointer_fetchAndAddRelease@@YAPAXPCRAXH@Z @ 4407 NONAME ; void * QBasicAtomicPointer_fetchAndAddRelease(void * volatile *, int)
+	?QBasicAtomicPointer_testAndSetAcquire@@YA_NPCRAXPAX1@Z @ 4408 NONAME ; bool QBasicAtomicPointer_testAndSetAcquire(void * volatile *, void *, void *)
+	?QBasicAtomicPointer_fetchAndStoreAcquire@@YAPAXPCRAXPAX@Z @ 4409 NONAME ; void * QBasicAtomicPointer_fetchAndStoreAcquire(void * volatile *, void *)
+	?QBasicAtomicPointer_fetchAndAddRelaxed@@YAPAXPCRAXH@Z @ 4410 NONAME ; void * QBasicAtomicPointer_fetchAndAddRelaxed(void * volatile *, int)
+	?QBasicAtomicInt_testAndSetAcquire@@YA_NPCHHH@Z @ 4411 NONAME ; bool QBasicAtomicInt_testAndSetAcquire(int volatile *, int, int)
+	?QBasicAtomicPointer_fetchAndStoreRelaxed@@YAPAXPCRAXPAX@Z @ 4412 NONAME ; void * QBasicAtomicPointer_fetchAndStoreRelaxed(void * volatile *, void *)
+	?QBasicAtomicInt_fetchAndStoreRelaxed@@YAHPCHH@Z @ 4413 NONAME ; int QBasicAtomicInt_fetchAndStoreRelaxed(int volatile *, int)
+	?QBasicAtomicInt_testAndSetRelaxed@@YA_NPCHHH@Z @ 4414 NONAME ; bool QBasicAtomicInt_testAndSetRelaxed(int volatile *, int, int)
+	?QBasicAtomicPointer_fetchAndStoreRelease@@YAPAXPCRAXPAX@Z @ 4415 NONAME ; void * QBasicAtomicPointer_fetchAndStoreRelease(void * volatile *, void *)
+	?QBasicAtomicInt_testAndSetRelease@@YA_NPCHHH@Z @ 4416 NONAME ; bool QBasicAtomicInt_testAndSetRelease(int volatile *, int, int)
+	?QBasicAtomicInt_fetchAndStoreAcquire@@YAHPCHH@Z @ 4417 NONAME ; int QBasicAtomicInt_fetchAndStoreAcquire(int volatile *, int)
+	?QBasicAtomicInt_fetchAndAddAcquire@@YAHPCHH@Z @ 4418 NONAME ; int QBasicAtomicInt_fetchAndAddAcquire(int volatile *, int)
+	?validCodecs@QTextCodec@@CA_NXZ @ 4419 NONAME ; bool QTextCodec::validCodecs(void)
+	?clearHistory@QStateMachinePrivate@@QAEXXZ @ 4420 NONAME ; void QStateMachinePrivate::clearHistory(void)
 
Index: /trunk/src/s60installs/bwins/QtGuiu.def
===================================================================
--- /trunk/src/s60installs/bwins/QtGuiu.def	(revision 768)
+++ /trunk/src/s60installs/bwins/QtGuiu.def	(revision 769)
@@ -8996,5 +8996,5 @@
 	?setFocus@QWidget@@QAEXW4FocusReason@Qt@@@Z @ 8995 NONAME ; void QWidget::setFocus(enum Qt::FocusReason)
 	?setFocus@QWidget@@QAEXXZ @ 8996 NONAME ; void QWidget::setFocus(void)
-	?setFocusHelper@QGraphicsItemPrivate@@QAEXW4FocusReason@Qt@@_N@Z @ 8997 NONAME ; void QGraphicsItemPrivate::setFocusHelper(enum Qt::FocusReason, bool)
+	?setFocusHelper@QGraphicsItemPrivate@@QAEXW4FocusReason@Qt@@_N@Z @ 8997 NONAME ABSENT ; void QGraphicsItemPrivate::setFocusHelper(enum Qt::FocusReason, bool)
 	?setFocusItem@QGraphicsScene@@QAEXPAVQGraphicsItem@@W4FocusReason@Qt@@@Z @ 8998 NONAME ; void QGraphicsScene::setFocusItem(class QGraphicsItem *, enum Qt::FocusReason)
 	?setFocusPolicy@QGraphicsWidget@@QAEXW4FocusPolicy@Qt@@@Z @ 8999 NONAME ; void QGraphicsWidget::setFocusPolicy(enum Qt::FocusPolicy)
@@ -11923,5 +11923,5 @@
 	?updateCell@QCalendarWidget@@IAEXABVQDate@@@Z @ 11922 NONAME ; void QCalendarWidget::updateCell(class QDate const &)
 	?updateCells@QCalendarWidget@@IAEXXZ @ 11923 NONAME ; void QCalendarWidget::updateCells(void)
-	?updateDisplayText@QLineControl@@AAEXXZ @ 11924 NONAME ; void QLineControl::updateDisplayText(void)
+	?updateDisplayText@QLineControl@@AAEXXZ @ 11924 NONAME ABSENT ; void QLineControl::updateDisplayText(void)
 	?updateEditorData@QAbstractItemView@@MAEXXZ @ 11925 NONAME ; void QAbstractItemView::updateEditorData(void)
 	?updateEditorGeometries@QAbstractItemView@@MAEXXZ @ 11926 NONAME ; void QAbstractItemView::updateEditorGeometries(void)
@@ -12549,3 +12549,64 @@
 	?updateAncestorFlags@QGraphicsItemPrivate@@QAEXXZ @ 12548 NONAME ; void QGraphicsItemPrivate::updateAncestorFlags(void)
 	?updateChildWithGraphicsEffectFlagRecursively@QGraphicsItemPrivate@@QAEXXZ @ 12549 NONAME ; void QGraphicsItemPrivate::updateChildWithGraphicsEffectFlagRecursively(void)
+	?api@QEglContext@@QBE?AW4API@QEgl@@XZ @ 12550 NONAME ; enum QEgl::API QEglContext::api(void) const
+	?display@QEglContext@@SAHXZ @ 12551 NONAME ; int QEglContext::display(void)
+	?isOpacityNull@QGraphicsItemPrivate@@SA_NM@Z @ 12552 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(float)
+	?chooseConfig@QEglContext@@QAE_NABVQEglProperties@@W4PixelFormatMatch@QEgl@@@Z @ 12553 NONAME ; bool QEglContext::chooseConfig(class QEglProperties const &, enum QEgl::PixelFormatMatch)
+	?destroySurface@QEglContext@@QAEXH@Z @ 12554 NONAME ; void QEglContext::destroySurface(int)
+	?lazyDoneCurrent@QEglContext@@QAE_NXZ @ 12555 NONAME ; bool QEglContext::lazyDoneCurrent(void)
+	?waitNative@QEglContext@@QAEXXZ @ 12556 NONAME ; void QEglContext::waitNative(void)
+	?context@QEglContext@@QBEHXZ @ 12557 NONAME ; int QEglContext::context(void) const
+	?configAttrib@QEglContext@@QBE_NHPAH@Z @ 12558 NONAME ; bool QEglContext::configAttrib(int, int *) const
+	??0QEglProperties@@QAE@ABV0@@Z @ 12559 NONAME ; QEglProperties::QEglProperties(class QEglProperties const &)
+	?config@QEglContext@@QBEHXZ @ 12560 NONAME ; int QEglContext::config(void) const
+	?clearFocusHelper@QGraphicsItemPrivate@@QAEX_N@Z @ 12561 NONAME ; void QGraphicsItemPrivate::clearFocusHelper(bool)
+	?error@QEglContext@@SAHXZ @ 12562 NONAME ; int QEglContext::error(void)
+	?swapBuffers@QEglContext@@QAE_NH@Z @ 12563 NONAME ; bool QEglContext::swapBuffers(int)
+	?canKeypadNavigate@QWidgetPrivate@@SA_NW4Orientation@Qt@@@Z @ 12564 NONAME ; bool QWidgetPrivate::canKeypadNavigate(enum Qt::Orientation)
+	?removeAllApplicationFonts@QFontDatabase@@SA_NXZ @ 12565 NONAME ; bool QFontDatabase::removeAllApplicationFonts(void)
+	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12566 NONAME ; void QEglContext::setApi(enum QEgl::API)
+	?updateDisplayText@QLineControl@@AAEX_N@Z @ 12567 NONAME ; void QLineControl::updateDisplayText(bool)
+	?makeCurrent@QEglContext@@QAE_NH@Z @ 12568 NONAME ; bool QEglContext::makeCurrent(int)
+	?isPixmapCached@QImagePixmapCleanupHooks@@SA_NABVQPixmap@@@Z @ 12569 NONAME ; bool QImagePixmapCleanupHooks::isPixmapCached(class QPixmap const &)
+	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12570 NONAME ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
+	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12571 NONAME ; void QEglContext::dumpAllConfigs(void)
+	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12572 NONAME ; bool QEglProperties::reduceConfiguration(void)
+	?nativeDisplay@QEglContext@@CAHXZ @ 12573 NONAME ; int QEglContext::nativeDisplay(void)
+	?getGlyphBearings@QFontEngine@@UAEXIPAM0@Z @ 12574 NONAME ; void QFontEngine::getGlyphBearings(unsigned int, float *, float *)
+	?removeValue@QEglProperties@@QAE_NH@Z @ 12575 NONAME ; bool QEglProperties::removeValue(int)
+	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12576 NONAME ; class QString QEglProperties::toString(void) const
+	?isOpacityNull@QGraphicsItemPrivate@@QBE_NXZ @ 12577 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(void) const
+	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12578 NONAME ; void QEglProperties::dumpAllConfigs(void)
+	?inTabWidget@QWidgetPrivate@@SA_NPAVQWidget@@@Z @ 12579 NONAME ; bool QWidgetPrivate::inTabWidget(class QWidget *)
+	?configProperties@QEglContext@@QBE?AVQEglProperties@@H@Z @ 12580 NONAME ; class QEglProperties QEglContext::configProperties(int) const
+	?properties@QEglProperties@@QBEPBHXZ @ 12581 NONAME ; int const * QEglProperties::properties(void) const
+	?destroyContext@QEglContext@@QAEXXZ @ 12582 NONAME ; void QEglContext::destroyContext(void)
+	??0QEglContext@@QAE@XZ @ 12583 NONAME ; QEglContext::QEglContext(void)
+	??1QEglContext@@QAE@XZ @ 12584 NONAME ; QEglContext::~QEglContext(void)
+	?isValid@QEglContext@@QBE_NXZ @ 12585 NONAME ; bool QEglContext::isValid(void) const
+	?value@QEglProperties@@QBEHH@Z @ 12586 NONAME ; int QEglProperties::value(int) const
+	?clearError@QEglContext@@SAXXZ @ 12587 NONAME ; void QEglContext::clearError(void)
+	??0QEglProperties@@QAE@H@Z @ 12588 NONAME ; QEglProperties::QEglProperties(int)
+	?setValue@QEglProperties@@QAEXHH@Z @ 12589 NONAME ; void QEglProperties::setValue(int, int)
+	?setPaintDeviceFormat@QEglProperties@@QAEXPAVQPaintDevice@@@Z @ 12590 NONAME ; void QEglProperties::setPaintDeviceFormat(class QPaintDevice *)
+	?isImageCached@QImagePixmapCleanupHooks@@SA_NABVQImage@@@Z @ 12591 NONAME ; bool QImagePixmapCleanupHooks::isImageCached(class QImage const &)
+	?setRenderableType@QEglProperties@@QAEXW4API@QEgl@@@Z @ 12592 NONAME ; void QEglProperties::setRenderableType(enum QEgl::API)
+	?setContext@QEglContext@@QAEXH@Z @ 12593 NONAME ; void QEglContext::setContext(int)
+	?waitClient@QEglContext@@QAEXXZ @ 12594 NONAME ; void QEglContext::waitClient(void)
+	?isEmpty@QEglProperties@@QBE_NXZ @ 12595 NONAME ; bool QEglProperties::isEmpty(void) const
+	?dpy@QEglContext@@0HA @ 12596 NONAME ; int QEglContext::dpy
+	?isSharing@QEglContext@@QBE_NXZ @ 12597 NONAME ; bool QEglContext::isSharing(void) const
+	?isCurrent@QEglContext@@QBE_NXZ @ 12598 NONAME ; bool QEglContext::isCurrent(void) const
+	??0QEglProperties@@QAE@XZ @ 12599 NONAME ; QEglProperties::QEglProperties(void)
+	?extensions@QEglContext@@SA?AVQString@@XZ @ 12600 NONAME ; class QString QEglContext::extensions(void)
+	?setCurrentContext@QEglContext@@CAXW4API@QEgl@@PAV1@@Z @ 12601 NONAME ; void QEglContext::setCurrentContext(enum QEgl::API, class QEglContext *)
+	??1QEglProperties@@QAE@XZ @ 12602 NONAME ; QEglProperties::~QEglProperties(void)
+	?createContext@QEglContext@@QAE_NPAV1@PBVQEglProperties@@@Z @ 12603 NONAME ; bool QEglContext::createContext(class QEglContext *, class QEglProperties const *)
+	?setConfig@QEglContext@@QAEXH@Z @ 12604 NONAME ; void QEglContext::setConfig(int)
+	?hasExtension@QEglContext@@SA_NPBD@Z @ 12605 NONAME ; bool QEglContext::hasExtension(char const *)
+	?doneCurrent@QEglContext@@QAE_NXZ @ 12606 NONAME ; bool QEglContext::doneCurrent(void)
+	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12607 NONAME ; void QEglProperties::setPixelFormat(enum QImage::Format)
+	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12608 NONAME ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
+	?setFocusHelper@QGraphicsItemPrivate@@QAEXW4FocusReason@Qt@@_N1@Z @ 12609 NONAME ; void QGraphicsItemPrivate::setFocusHelper(enum Qt::FocusReason, bool, bool)
+	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12610 NONAME ; class QString QEglContext::errorString(int)
 
Index: /trunk/src/s60installs/bwins/QtNetworku.def
===================================================================
--- /trunk/src/s60installs/bwins/QtNetworku.def	(revision 768)
+++ /trunk/src/s60installs/bwins/QtNetworku.def	(revision 769)
@@ -963,3 +963,5 @@
 	?staticMetaObject@QUdpSocket@@2UQMetaObject@@B @ 962 NONAME ; struct QMetaObject const QUdpSocket::staticMetaObject
 	?staticMetaObject@QAbstractSocket@@2UQMetaObject@@B @ 963 NONAME ; struct QMetaObject const QAbstractSocket::staticMetaObject
+	?qt_qhostinfo_clear_cache@@YAXXZ @ 964 NONAME ; void qt_qhostinfo_clear_cache(void)
+	?qt_qhostinfo_lookup@@YA?AVQHostInfo@@ABVQString@@PAVQObject@@PBDPA_NPAH@Z @ 965 NONAME ; class QHostInfo qt_qhostinfo_lookup(class QString const &, class QObject *, char const *, bool *, int *)
 
Index: /trunk/src/s60installs/bwins/QtOpenVGu.def
===================================================================
--- /trunk/src/s60installs/bwins/QtOpenVGu.def	(revision 768)
+++ /trunk/src/s60installs/bwins/QtOpenVGu.def	(revision 769)
@@ -49,5 +49,5 @@
 	??0QVGPainterState@@QAE@XZ @ 48 NONAME ; QVGPainterState::QVGPainterState(void)
 	?d_func@QVGPaintEngine@@ABEPBVQVGPaintEnginePrivate@@XZ @ 49 NONAME ; class QVGPaintEnginePrivate const * QVGPaintEngine::d_func(void) const
-	?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@@Z @ 50 NONAME ; class QEglContext * qt_vg_create_context(class QPaintDevice *)
+	?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@@Z @ 50 NONAME ABSENT ; class QEglContext * qt_vg_create_context(class QPaintDevice *)
 	?clip@QVGPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 51 NONAME ; void QVGPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation)
 	?endNativePainting@QVGPaintEngine@@UAEXXZ @ 52 NONAME ; void QVGPaintEngine::endNativePainting(void)
@@ -79,5 +79,5 @@
 	?createState@QVGPaintEngine@@UBEPAVQPainterState@@PAV2@@Z @ 78 NONAME ; class QPainterState * QVGPaintEngine::createState(class QPainterState *) const
 	?buffer@QVGPixmapData@@UAEPAVQImage@@XZ @ 79 NONAME ; class QImage * QVGPixmapData::buffer(void)
-	?qt_vg_destroy_context@@YAXPAVQEglContext@@@Z @ 80 NONAME ; void qt_vg_destroy_context(class QEglContext *)
+	?qt_vg_destroy_context@@YAXPAVQEglContext@@@Z @ 80 NONAME ABSENT ; void qt_vg_destroy_context(class QEglContext *)
 	?clip@QVGPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 81 NONAME ; void QVGPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation)
 	?drawPolygon@QVGPaintEngine@@UAEXPBVQPoint@@HW4PolygonDrawMode@QPaintEngine@@@Z @ 82 NONAME ; void QVGPaintEngine::drawPolygon(class QPoint const *, int, enum QPaintEngine::PolygonDrawMode)
@@ -140,3 +140,32 @@
 	?clip@QVGPaintEngine@@UAEXABVQPainterPath@@W4ClipOperation@Qt@@@Z @ 139 NONAME ; void QVGPaintEngine::clip(class QPainterPath const &, enum Qt::ClipOperation)
 	?vgPrivate@QVGPaintEngine@@QAEPAVQVGPaintEnginePrivate@@XZ @ 140 NONAME ; class QVGPaintEnginePrivate * QVGPaintEngine::vgPrivate(void)
+	?removeFromLRU@QVGImagePool@@IAEXPAVQVGPixmapData@@@Z @ 141 NONAME ; void QVGImagePool::removeFromLRU(class QVGPixmapData *)
+	?releaseImage@QVGImagePool@@UAEXPAVQVGPixmapData@@K@Z @ 142 NONAME ; void QVGImagePool::releaseImage(class QVGPixmapData *, unsigned long)
+	?d_func@QVGImagePool@@AAEPAVQVGImagePoolPrivate@@XZ @ 143 NONAME ; class QVGImagePoolPrivate * QVGImagePool::d_func(void)
+	?detachImageFromPool@QVGPixmapData@@UAEXXZ @ 144 NONAME ; void QVGPixmapData::detachImageFromPool(void)
+	?createImageForPixmap@QVGImagePool@@UAEKW4VGImageFormat@@JJKPAVQVGPixmapData@@@Z @ 145 NONAME ; unsigned long QVGImagePool::createImageForPixmap(enum VGImageFormat, long, long, unsigned long, class QVGPixmapData *)
+	?destroyImageAndContext@QVGPixmapData@@IAEXXZ @ 146 NONAME ; void QVGPixmapData::destroyImageAndContext(void)
+	?moveToHeadOfLRU@QVGImagePool@@IAEXPAVQVGPixmapData@@@Z @ 147 NONAME ; void QVGImagePool::moveToHeadOfLRU(class QVGPixmapData *)
+	?instance@QVGImagePool@@SAPAV1@XZ @ 148 NONAME ; class QVGImagePool * QVGImagePool::instance(void)
+	?useImage@QVGImagePool@@UAEXPAVQVGPixmapData@@@Z @ 149 NONAME ; void QVGImagePool::useImage(class QVGPixmapData *)
+	??1QVGImagePool@@UAE@XZ @ 150 NONAME ; QVGImagePool::~QVGImagePool(void)
+	?destroyImages@QVGPixmapData@@IAEXXZ @ 151 NONAME ; void QVGPixmapData::destroyImages(void)
+	?reclaimSpace@QVGImagePool@@UAE_NW4VGImageFormat@@JJPAVQVGPixmapData@@@Z @ 152 NONAME ; bool QVGImagePool::reclaimSpace(enum VGImageFormat, long, long, class QVGPixmapData *)
+	?detachImage@QVGImagePool@@UAEXPAVQVGPixmapData@@@Z @ 153 NONAME ; void QVGImagePool::detachImage(class QVGPixmapData *)
+	?createPermanentImage@QVGImagePool@@UAEKW4VGImageFormat@@JJK@Z @ 154 NONAME ; unsigned long QVGImagePool::createPermanentImage(enum VGImageFormat, long, long, unsigned long)
+	?d_func@QVGImagePool@@ABEPBVQVGImagePoolPrivate@@XZ @ 155 NONAME ; class QVGImagePoolPrivate const * QVGImagePool::d_func(void) const
+	?createTemporaryImage@QVGImagePool@@UAEKW4VGImageFormat@@JJKPAVQVGPixmapData@@@Z @ 156 NONAME ; unsigned long QVGImagePool::createTemporaryImage(enum VGImageFormat, long, long, unsigned long, class QVGPixmapData *)
+	??_EQVGImagePool@@UAE@I@Z @ 157 NONAME ; QVGImagePool::~QVGImagePool(unsigned int)
+	?hibernate@QVGImagePool@@UAEXXZ @ 158 NONAME ; void QVGImagePool::hibernate(void)
+	?qt_vg_destroy_context@@YAXPAVQEglContext@@H@Z @ 159 NONAME ; void qt_vg_destroy_context(class QEglContext *, int)
+	??0QVGImagePool@@QAE@XZ @ 160 NONAME ; QVGImagePool::QVGImagePool(void)
+	?setImagePool@QVGImagePool@@SAXPAV1@@Z @ 161 NONAME ; void QVGImagePool::setImagePool(class QVGImagePool *)
+	?pixmapLRU@QVGImagePool@@IAEPAVQVGPixmapData@@XZ @ 162 NONAME ; class QVGPixmapData * QVGImagePool::pixmapLRU(void)
+	?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@H@Z @ 163 NONAME ; class QEglContext * qt_vg_create_context(class QPaintDevice *, int)
+	?reclaimImages@QVGPixmapData@@UAEXXZ @ 164 NONAME ; void QVGPixmapData::reclaimImages(void)
+	?hibernate@QVGPixmapData@@UAEXXZ @ 165 NONAME ; void QVGPixmapData::hibernate(void)
+	?supportsStaticContents@QVGEGLWindowSurfaceDirect@@UBE_NXZ @ 166 NONAME ; bool QVGEGLWindowSurfaceDirect::supportsStaticContents(void) const
+	?scroll@QVGEGLWindowSurfacePrivate@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 167 NONAME ; bool QVGEGLWindowSurfacePrivate::scroll(class QWidget *, class QRegion const &, int, int)
+	?scroll@QVGEGLWindowSurfaceDirect@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 168 NONAME ; bool QVGEGLWindowSurfaceDirect::scroll(class QWidget *, class QRegion const &, int, int)
+	?supportsStaticContents@QVGEGLWindowSurfacePrivate@@UBE_NXZ @ 169 NONAME ; bool QVGEGLWindowSurfacePrivate::supportsStaticContents(void) const
 
Index: /trunk/src/s60installs/eabi/QtCoreu.def
===================================================================
--- /trunk/src/s60installs/eabi/QtCoreu.def	(revision 768)
+++ /trunk/src/s60installs/eabi/QtCoreu.def	(revision 769)
@@ -3635,3 +3635,23 @@
 	_ZTVN13QStateMachine12WrappedEventE @ 3634 NONAME
 	_ZN11QMetaObject13disconnectOneEPK7QObjectiS2_i @ 3635 NONAME
+	_Z33QBasicAtomicInt_testAndSetAcquirePViii @ 3636 NONAME
+	_Z33QBasicAtomicInt_testAndSetRelaxedPViii @ 3637 NONAME
+	_Z33QBasicAtomicInt_testAndSetReleasePViii @ 3638 NONAME
+	_Z34QBasicAtomicInt_fetchAndAddAcquirePVii @ 3639 NONAME
+	_Z34QBasicAtomicInt_fetchAndAddRelaxedPVii @ 3640 NONAME
+	_Z34QBasicAtomicInt_fetchAndAddReleasePVii @ 3641 NONAME
+	_Z36QBasicAtomicInt_fetchAndStoreAcquirePVii @ 3642 NONAME
+	_Z36QBasicAtomicInt_fetchAndStoreRelaxedPVii @ 3643 NONAME
+	_Z36QBasicAtomicInt_fetchAndStoreReleasePVii @ 3644 NONAME
+	_Z37QBasicAtomicPointer_testAndSetAcquirePVPvS_S_ @ 3645 NONAME
+	_Z37QBasicAtomicPointer_testAndSetRelaxedPVPvS_S_ @ 3646 NONAME
+	_Z37QBasicAtomicPointer_testAndSetReleasePVPvS_S_ @ 3647 NONAME
+	_Z38QBasicAtomicPointer_fetchAndAddAcquirePVPvi @ 3648 NONAME
+	_Z38QBasicAtomicPointer_fetchAndAddRelaxedPVPvi @ 3649 NONAME
+	_Z38QBasicAtomicPointer_fetchAndAddReleasePVPvi @ 3650 NONAME
+	_Z40QBasicAtomicPointer_fetchAndStoreAcquirePVPvS_ @ 3651 NONAME
+	_Z40QBasicAtomicPointer_fetchAndStoreRelaxedPVPvS_ @ 3652 NONAME
+	_Z40QBasicAtomicPointer_fetchAndStoreReleasePVPvS_ @ 3653 NONAME
+	_ZN10QTextCodec11validCodecsEv @ 3654 NONAME
+	_ZN20QStateMachinePrivate12clearHistoryEv @ 3655 NONAME
 
Index: /trunk/src/s60installs/eabi/QtGuiu.def
===================================================================
--- /trunk/src/s60installs/eabi/QtGuiu.def	(revision 768)
+++ /trunk/src/s60installs/eabi/QtGuiu.def	(revision 769)
@@ -1819,5 +1819,5 @@
 	_ZN12QLineControl17processMouseEventEP11QMouseEvent @ 1818 NONAME
 	_ZN12QLineControl17resetInputContextEv @ 1819 NONAME
-	_ZN12QLineControl17updateDisplayTextEv @ 1820 NONAME
+	_ZN12QLineControl17updateDisplayTextEv @ 1820 NONAME ABSENT
 	_ZN12QLineControl18displayTextChangedERK7QString @ 1821 NONAME
 	_ZN12QLineControl18removeSelectedTextEv @ 1822 NONAME
@@ -4664,5 +4664,5 @@
 	_ZN20QGraphicsItemPrivate12setPosHelperERK7QPointF @ 4663 NONAME
 	_ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItem @ 4664 NONAME
-	_ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEb @ 4665 NONAME
+	_ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEb @ 4665 NONAME ABSENT
 	_ZN20QGraphicsItemPrivate15resetFocusProxyEv @ 4666 NONAME
 	_ZN20QGraphicsItemPrivate16setEnabledHelperEbbb @ 4667 NONAME
@@ -11742,45 +11742,45 @@
 	_ZNK11QVectorPath12addCacheDataEP14QPaintEngineExPvPFvS1_S2_E @ 11741 NONAME
 	_ZNK20QGraphicsItemPrivate20discardUpdateRequestEbbb @ 11742 NONAME
-	_ZN11QEglContext10extensionsEv @ 11743 NONAME ABSENT
+	_ZN11QEglContext10extensionsEv @ 11743 NONAME
 	_ZN11QEglContext10getDisplayEP12QPaintDevice @ 11744 NONAME ABSENT
-	_ZN11QEglContext10waitClientEv @ 11745 NONAME ABSENT
-	_ZN11QEglContext10waitNativeEv @ 11746 NONAME ABSENT
-	_ZN11QEglContext11doneCurrentEv @ 11747 NONAME ABSENT
-	_ZN11QEglContext11errorStringEi @ 11748 NONAME ABSENT
-	_ZN11QEglContext11makeCurrentEi @ 11749 NONAME ABSENT
+	_ZN11QEglContext10waitClientEv @ 11745 NONAME
+	_ZN11QEglContext10waitNativeEv @ 11746 NONAME
+	_ZN11QEglContext11doneCurrentEv @ 11747 NONAME
+	_ZN11QEglContext11errorStringEi @ 11748 NONAME
+	_ZN11QEglContext11makeCurrentEi @ 11749 NONAME
 	_ZN11QEglContext11openDisplayEP12QPaintDevice @ 11750 NONAME ABSENT
-	_ZN11QEglContext11swapBuffersEi @ 11751 NONAME ABSENT
-	_ZN11QEglContext12chooseConfigERK14QEglPropertiesN4QEgl16PixelFormatMatchE @ 11752 NONAME ABSENT
-	_ZN11QEglContext12hasExtensionEPKc @ 11753 NONAME ABSENT
-	_ZN11QEglContext13createContextEPS_PK14QEglProperties @ 11754 NONAME ABSENT
-	_ZN11QEglContext13createSurfaceEP12QPaintDevicePK14QEglProperties @ 11755 NONAME ABSENT
-	_ZN11QEglContext14currentContextEN4QEgl3APIE @ 11756 NONAME ABSENT
+	_ZN11QEglContext11swapBuffersEi @ 11751 NONAME
+	_ZN11QEglContext12chooseConfigERK14QEglPropertiesN4QEgl16PixelFormatMatchE @ 11752 NONAME
+	_ZN11QEglContext12hasExtensionEPKc @ 11753 NONAME
+	_ZN11QEglContext13createContextEPS_PK14QEglProperties @ 11754 NONAME
+	_ZN11QEglContext13createSurfaceEP12QPaintDevicePK14QEglProperties @ 11755 NONAME
+	_ZN11QEglContext14currentContextEN4QEgl3APIE @ 11756 NONAME
 	_ZN11QEglContext14defaultDisplayEP12QPaintDevice @ 11757 NONAME ABSENT
-	_ZN11QEglContext14destroySurfaceEi @ 11758 NONAME ABSENT
-	_ZN11QEglContext14dumpAllConfigsEv @ 11759 NONAME ABSENT
-	_ZN11QEglContext15lazyDoneCurrentEv @ 11760 NONAME ABSENT
-	_ZN11QEglContext17setCurrentContextEN4QEgl3APIEPS_ @ 11761 NONAME ABSENT
+	_ZN11QEglContext14destroySurfaceEi @ 11758 NONAME
+	_ZN11QEglContext14dumpAllConfigsEv @ 11759 NONAME
+	_ZN11QEglContext15lazyDoneCurrentEv @ 11760 NONAME
+	_ZN11QEglContext17setCurrentContextEN4QEgl3APIEPS_ @ 11761 NONAME
 	_ZN11QEglContext7destroyEv @ 11762 NONAME ABSENT
-	_ZN11QEglContextC1Ev @ 11763 NONAME ABSENT
-	_ZN11QEglContextC2Ev @ 11764 NONAME ABSENT
-	_ZN11QEglContextD1Ev @ 11765 NONAME ABSENT
-	_ZN11QEglContextD2Ev @ 11766 NONAME ABSENT
-	_ZN14QEglProperties11removeValueEi @ 11767 NONAME ABSENT
-	_ZN14QEglProperties14dumpAllConfigsEv @ 11768 NONAME ABSENT
-	_ZN14QEglProperties14setPixelFormatEN6QImage6FormatE @ 11769 NONAME ABSENT
-	_ZN14QEglProperties17setRenderableTypeEN4QEgl3APIE @ 11770 NONAME ABSENT
-	_ZN14QEglProperties19reduceConfigurationEv @ 11771 NONAME ABSENT
-	_ZN14QEglProperties20setPaintDeviceFormatEP12QPaintDevice @ 11772 NONAME ABSENT
-	_ZN14QEglProperties8setValueEii @ 11773 NONAME ABSENT
-	_ZN14QEglPropertiesC1Ei @ 11774 NONAME ABSENT
-	_ZN14QEglPropertiesC1Ev @ 11775 NONAME ABSENT
-	_ZN14QEglPropertiesC2Ei @ 11776 NONAME ABSENT
-	_ZN14QEglPropertiesC2Ev @ 11777 NONAME ABSENT
-	_ZNK11QEglContext12configAttribEiPi @ 11778 NONAME ABSENT
-	_ZNK11QEglContext16configPropertiesEi @ 11779 NONAME ABSENT
-	_ZNK11QEglContext7isValidEv @ 11780 NONAME ABSENT
-	_ZNK11QEglContext9isCurrentEv @ 11781 NONAME ABSENT
-	_ZNK14QEglProperties5valueEi @ 11782 NONAME ABSENT
-	_ZNK14QEglProperties8toStringEv @ 11783 NONAME ABSENT
+	_ZN11QEglContextC1Ev @ 11763 NONAME
+	_ZN11QEglContextC2Ev @ 11764 NONAME
+	_ZN11QEglContextD1Ev @ 11765 NONAME
+	_ZN11QEglContextD2Ev @ 11766 NONAME
+	_ZN14QEglProperties11removeValueEi @ 11767 NONAME
+	_ZN14QEglProperties14dumpAllConfigsEv @ 11768 NONAME
+	_ZN14QEglProperties14setPixelFormatEN6QImage6FormatE @ 11769 NONAME
+	_ZN14QEglProperties17setRenderableTypeEN4QEgl3APIE @ 11770 NONAME
+	_ZN14QEglProperties19reduceConfigurationEv @ 11771 NONAME
+	_ZN14QEglProperties20setPaintDeviceFormatEP12QPaintDevice @ 11772 NONAME
+	_ZN14QEglProperties8setValueEii @ 11773 NONAME
+	_ZN14QEglPropertiesC1Ei @ 11774 NONAME
+	_ZN14QEglPropertiesC1Ev @ 11775 NONAME
+	_ZN14QEglPropertiesC2Ei @ 11776 NONAME
+	_ZN14QEglPropertiesC2Ev @ 11777 NONAME
+	_ZNK11QEglContext12configAttribEiPi @ 11778 NONAME
+	_ZNK11QEglContext16configPropertiesEi @ 11779 NONAME
+	_ZNK11QEglContext7isValidEv @ 11780 NONAME
+	_ZNK11QEglContext9isCurrentEv @ 11781 NONAME
+	_ZNK14QEglProperties5valueEi @ 11782 NONAME
+	_ZNK14QEglProperties8toStringEv @ 11783 NONAME
 	_ZNK11QFontEngine10glyphCacheEPvN21QFontEngineGlyphCache4TypeERK10QTransform @ 11784 NONAME
 	_ZNK20QGraphicsItemPrivate21effectiveBoundingRectERK6QRectF @ 11785 NONAME
@@ -11806,3 +11806,18 @@
 	_ZN9QS60Style10timerEventEP11QTimerEvent @ 11805 NONAME
 	_ZN9QS60Style11eventFilterEP7QObjectP6QEvent @ 11806 NONAME
+	_ZN11QEglContext10clearErrorEv @ 11807 NONAME
+	_ZN11QEglContext13nativeDisplayEv @ 11808 NONAME
+	_ZN11QEglContext14destroyContextEv @ 11809 NONAME
+	_ZN11QEglContext3dpyE @ 11810 NONAME DATA 4
+	_ZN11QEglContext5errorEv @ 11811 NONAME
+	_ZN11QEglContext7displayEv @ 11812 NONAME
+	_ZN11QFontEngine16getGlyphBearingsEjPfS0_ @ 11813 NONAME
+	_ZN12QLineControl17updateDisplayTextEb @ 11814 NONAME
+	_ZN13QFontDatabase25removeAllApplicationFontsEv @ 11815 NONAME
+	_ZN14QWidgetPrivate11inTabWidgetEP7QWidget @ 11816 NONAME
+	_ZN14QWidgetPrivate17canKeypadNavigateEN2Qt11OrientationE @ 11817 NONAME
+	_ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEbb @ 11818 NONAME
+	_ZN20QGraphicsItemPrivate16clearFocusHelperEb @ 11819 NONAME
+	_ZN24QImagePixmapCleanupHooks13isImageCachedERK6QImage @ 11820 NONAME
+	_ZN24QImagePixmapCleanupHooks14isPixmapCachedERK7QPixmap @ 11821 NONAME
 
Index: /trunk/src/s60installs/eabi/QtNetworku.def
===================================================================
--- /trunk/src/s60installs/eabi/QtNetworku.def	(revision 768)
+++ /trunk/src/s60installs/eabi/QtNetworku.def	(revision 769)
@@ -994,3 +994,5 @@
 	_ZN15QNetworkRequest20setOriginatingObjectEP7QObject @ 993 NONAME
 	_ZNK15QNetworkRequest17originatingObjectEv @ 994 NONAME
+	_Z19qt_qhostinfo_lookupRK7QStringP7QObjectPKcPbPi @ 995 NONAME
+	_Z24qt_qhostinfo_clear_cachev @ 996 NONAME
 
Index: /trunk/src/s60installs/eabi/QtOpenVGu.def
===================================================================
--- /trunk/src/s60installs/eabi/QtOpenVGu.def	(revision 768)
+++ /trunk/src/s60installs/eabi/QtOpenVGu.def	(revision 769)
@@ -174,3 +174,28 @@
 	_ZN13QVGPixmapData22destroyImageAndContextEv @ 173 NONAME
 	_ZN13QVGPixmapData9hibernateEv @ 174 NONAME
+	_ZN12QVGImagePool11detachImageEP13QVGPixmapData @ 175 NONAME
+	_ZN12QVGImagePool12reclaimSpaceE13VGImageFormatllP13QVGPixmapData @ 176 NONAME
+	_ZN12QVGImagePool12releaseImageEP13QVGPixmapDatam @ 177 NONAME
+	_ZN12QVGImagePool12setImagePoolEPS_ @ 178 NONAME
+	_ZN12QVGImagePool13removeFromLRUEP13QVGPixmapData @ 179 NONAME
+	_ZN12QVGImagePool15moveToHeadOfLRUEP13QVGPixmapData @ 180 NONAME
+	_ZN12QVGImagePool20createImageForPixmapE13VGImageFormatllmP13QVGPixmapData @ 181 NONAME
+	_ZN12QVGImagePool20createPermanentImageE13VGImageFormatllm @ 182 NONAME
+	_ZN12QVGImagePool20createTemporaryImageE13VGImageFormatllmP13QVGPixmapData @ 183 NONAME
+	_ZN12QVGImagePool8instanceEv @ 184 NONAME
+	_ZN12QVGImagePool8useImageEP13QVGPixmapData @ 185 NONAME
+	_ZN12QVGImagePool9hibernateEv @ 186 NONAME
+	_ZN12QVGImagePool9pixmapLRUEv @ 187 NONAME
+	_ZN12QVGImagePoolC1Ev @ 188 NONAME
+	_ZN12QVGImagePoolC2Ev @ 189 NONAME
+	_ZN12QVGImagePoolD0Ev @ 190 NONAME
+	_ZN12QVGImagePoolD1Ev @ 191 NONAME
+	_ZN12QVGImagePoolD2Ev @ 192 NONAME
+	_ZN13QVGPixmapData13destroyImagesEv @ 193 NONAME
+	_ZN13QVGPixmapData13reclaimImagesEv @ 194 NONAME
+	_ZN13QVGPixmapData19detachImageFromPoolEv @ 195 NONAME
+	_ZTI12QVGImagePool @ 196 NONAME
+	_ZTV12QVGImagePool @ 197 NONAME
+	_ZN25QVGEGLWindowSurfaceDirect6scrollEP7QWidgetRK7QRegionii @ 198 NONAME
+	_ZNK25QVGEGLWindowSurfaceDirect22supportsStaticContentsEv @ 199 NONAME
 
Index: /trunk/src/s60installs/qt.iby
===================================================================
--- /trunk/src/s60installs/qt.iby	(revision 768)
+++ /trunk/src/s60installs/qt.iby	(revision 769)
@@ -4,87 +4,54 @@
 #include <bldvariant.hrh>
 
-// Dependancies for more than one module
-#include <base.iby>
-#include <openenv.iby> // QtCore, QtGui, QtNetwork, QtOpenGL, QSvgIconEngine,
-#include <cone.iby> // QtGui, QtOpenGL
-#include <stdcpp.iby> // for std C++ support
-
-// QtGui dependancies
-#include <bafl.iby>
-#include <store.iby>
-#include <fntstore.iby>
-#include <ecom.iby>
-#include <fontutils.iby>
-#include <fepbase.iby>
-#include <fbserv.iby>
-#include <bitgdi.iby>
-#include <gdi.iby>
-#include <wserv.iby>
-#include <apparc.iby>
-#include <uikon.iby>
-#include <etext.iby>
-#include <emime.iby>
-#include <eikstd.iby>
-#include <mmf.iby>
-#include <avkon.iby>
-#include <commonui.iby>
-#include <platformenv.iby>
-#include <senduiservices.iby>
-#include <aknicon.iby>
-#include <aknskins.iby>
-
-// QtNetwork dependancies
-#include <esock_core.iby>
-#include <insock.iby>
-
-// QtOpenGL dependancies
-///@todo Problem here as we need libegl.dll and libglesv2.dll but they may come from a variety of places
-/// depending on the platform we're on
-
 #warning("qt.iby: hack - BINARY_SELECTION_ORDER really needs to be at the baseport/device level as it depends on the device type");
 BINARY_SELECTION_ORDER ARMV6,ARMV5 // hack - this really needs to be at the baseport/device level as it depends on the device type
 
-file=ABI_DIR\BUILD_DIR\QtCore.dll            SHARED_LIB_DIR\QtCore.dll       PAGED
-file=ABI_DIR\BUILD_DIR\QtGui.dll             SHARED_LIB_DIR\QtGui.dll        PAGED
-file=ABI_DIR\BUILD_DIR\QtOpenGL.dll          SHARED_LIB_DIR\QtOpenGL.dll     PAGED
-file=ABI_DIR\BUILD_DIR\QtOpenVG.dll          SHARED_LIB_DIR\QtOpenVG.dll     PAGED
-file=ABI_DIR\BUILD_DIR\QtSvg.dll             SHARED_LIB_DIR\QtSvg.dll        PAGED
-file=ABI_DIR\BUILD_DIR\QtSql.dll             SHARED_LIB_DIR\QtSql.dll        PAGED
-file=ABI_DIR\BUILD_DIR\QtXml.dll             SHARED_LIB_DIR\QtXml.dll        PAGED
-file=ABI_DIR\BUILD_DIR\QtNetwork.dll         SHARED_LIB_DIR\QtNetwork.dll    PAGED
-file=ABI_DIR\BUILD_DIR\QtScript.dll          SHARED_LIB_DIR\QtScript.dll     PAGED
-file=ABI_DIR\BUILD_DIR\QtTest.dll            SHARED_LIB_DIR\QtTest.dll       PAGED
-file=ABI_DIR\BUILD_DIR\QtWebKit.dll          SHARED_LIB_DIR\QtWebKit.dll     PAGED
-file=ABI_DIR\BUILD_DIR\phonon.dll            SHARED_LIB_DIR\phonon.dll       PAGED
-file=ABI_DIR\BUILD_DIR\QtMultimedia.dll      SHARED_LIB_DIR\QtMultimedia.dll PAGED
-file=ABI_DIR\BUILD_DIR\QtXmlPatterns.dll     SHARED_LIB_DIR\QtXmlPatterns.dll       PAGED
-file=ABI_DIR\BUILD_DIR\QtDeclarative.dll     SHARED_LIB_DIR\QtDeclarative.dll       PAGED
+file=ABI_DIR\BUILD_DIR\QtCore.dll            SHARED_LIB_DIR\QtCore.dll
+file=ABI_DIR\BUILD_DIR\QtGui.dll             SHARED_LIB_DIR\QtGui.dll
+file=ABI_DIR\BUILD_DIR\QtOpenVG.dll          SHARED_LIB_DIR\QtOpenVG.dll
+file=ABI_DIR\BUILD_DIR\QtSvg.dll             SHARED_LIB_DIR\QtSvg.dll
+file=ABI_DIR\BUILD_DIR\QtSql.dll             SHARED_LIB_DIR\QtSql.dll
+file=ABI_DIR\BUILD_DIR\QtXml.dll             SHARED_LIB_DIR\QtXml.dll
+file=ABI_DIR\BUILD_DIR\QtNetwork.dll         SHARED_LIB_DIR\QtNetwork.dll
+file=ABI_DIR\BUILD_DIR\QtScript.dll          SHARED_LIB_DIR\QtScript.dll
+file=ABI_DIR\BUILD_DIR\QtTest.dll            SHARED_LIB_DIR\QtTest.dll
+file=ABI_DIR\BUILD_DIR\QtWebKit.dll          SHARED_LIB_DIR\QtWebKit.dll
+file=ABI_DIR\BUILD_DIR\phonon.dll            SHARED_LIB_DIR\phonon.dll
+file=ABI_DIR\BUILD_DIR\QtMultimedia.dll      SHARED_LIB_DIR\QtMultimedia.dll
+file=ABI_DIR\BUILD_DIR\QtXmlPatterns.dll     SHARED_LIB_DIR\QtXmlPatterns.dll
 
 // imageformats
-file=ABI_DIR\BUILD_DIR\qgif.dll              SHARED_LIB_DIR\qgif.dll         PAGED
-file=ABI_DIR\BUILD_DIR\qico.dll              SHARED_LIB_DIR\qico.dll         PAGED
-file=ABI_DIR\BUILD_DIR\qjpeg.dll             SHARED_LIB_DIR\qjpeg.dll        PAGED
-file=ABI_DIR\BUILD_DIR\qmng.dll              SHARED_LIB_DIR\qmng.dll         PAGED
-file=ABI_DIR\BUILD_DIR\qsvg.dll              SHARED_LIB_DIR\qsvg.dll         PAGED
-file=ABI_DIR\BUILD_DIR\qtiff.dll             SHARED_LIB_DIR\qtiff.dll        PAGED
+file=ABI_DIR\BUILD_DIR\qgif.dll              SHARED_LIB_DIR\qgif.dll
+file=ABI_DIR\BUILD_DIR\qico.dll              SHARED_LIB_DIR\qico.dll
+file=ABI_DIR\BUILD_DIR\qjpeg.dll             SHARED_LIB_DIR\qjpeg.dll
+file=ABI_DIR\BUILD_DIR\qmng.dll              SHARED_LIB_DIR\qmng.dll
+file=ABI_DIR\BUILD_DIR\qsvg.dll              SHARED_LIB_DIR\qsvg.dll
+file=ABI_DIR\BUILD_DIR\qtiff.dll             SHARED_LIB_DIR\qtiff.dll
 
 // codecs
-file=ABI_DIR\BUILD_DIR\qcncodecs.dll         SHARED_LIB_DIR\qcncodecs.dll    PAGED
-file=ABI_DIR\BUILD_DIR\qjpcodecs.dll         SHARED_LIB_DIR\qjpcodecs.dll    PAGED
-file=ABI_DIR\BUILD_DIR\qkrcodecs.dll         SHARED_LIB_DIR\qkrcodecs.dll    PAGED
-file=ABI_DIR\BUILD_DIR\qtwcodecs.dll         SHARED_LIB_DIR\qtwcodecs.dll    PAGED
+file=ABI_DIR\BUILD_DIR\qcncodecs.dll         SHARED_LIB_DIR\qcncodecs.dll
+file=ABI_DIR\BUILD_DIR\qjpcodecs.dll         SHARED_LIB_DIR\qjpcodecs.dll
+file=ABI_DIR\BUILD_DIR\qkrcodecs.dll         SHARED_LIB_DIR\qkrcodecs.dll
+file=ABI_DIR\BUILD_DIR\qtwcodecs.dll         SHARED_LIB_DIR\qtwcodecs.dll
 
 // iconengines
-file=ABI_DIR\BUILD_DIR\qsvgicon.dll          SHARED_LIB_DIR\qsvgicon.dll     PAGED
+file=ABI_DIR\BUILD_DIR\qsvgicon.dll          SHARED_LIB_DIR\qsvgicon.dll
 
 // Phonon MMF backend
-file=ABI_DIR\BUILD_DIR\phonon_mmf.dll        SHARED_LIB_DIR\phonon_mmf.dll   PAGED
+// This is commented out by default, as normally Helix backend will be used.
+// If the Helix backend is present, it will override MMF backend, so make sure to remove it from
+// image creation in addition to uncommenting the following lines if you want to use MMF backend.
+//file=ABI_DIR\BUILD_DIR\phonon_mmf.dll        SHARED_LIB_DIR\phonon_mmf.dll
+//data=\epoc32\data\z\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin
+
+// QtMultimedia audio backend
+file=ABI_DIR\BUILD_DIR\qaudio.dll            SHARED_LIB_DIR\qaudio.dll
 
 // graphicssystems
-file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll     PAGED
+file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll
 
 // S60 version compatibility plugins for 5.0 (3.1 and 3.2 devices are never likely to have this in ROM,
 // so don't bother including those plugins
-file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll   SHARED_LIB_DIR\qts60plugin_5_0.dll   PAGED
+file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll   SHARED_LIB_DIR\qts60plugin_5_0.dll
 
 S60_APP_RESOURCE(s60main)
@@ -107,6 +74,7 @@
 data=\epoc32\data\z\resource\qt\plugins\iconengines\qsvgicon.qtplugin      resource\qt\plugins\iconengines\qsvgicon.qtplugin
 
-// Phonon MMF backend
-data=\epoc32\data\z\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin
+
+// QtMultimedia audio backend
+data=\epoc32\data\qt\qtlibspluginstubs\qaudio.qtplugin resource\qt\plugins\audio\qaudio.qtplugin
 
 // graphicssystems
@@ -114,5 +82,7 @@
 
 // Stub sis file
-data=ZSYSTEM\install\qt.sis    System\Install\qt.sis
+data=ZSYSTEM\install\qt_stub.sis    System\Install\qt_stub.sis
+data=ZSYSTEM\install\qtwebkit_stub.sis    System\Install\qtwebkit_stub.sis
 
 #endif // __QT_IBY__
+
Index: /trunk/src/s60installs/s60installs.pro
===================================================================
--- /trunk/src/s60installs/s60installs.pro	(revision 768)
+++ /trunk/src/s60installs/s60installs.pro	(revision 769)
@@ -8,35 +8,47 @@
     # WARNING: Changing TARGET name will break Symbian SISX upgrade functionality
     # DO NOT TOUCH TARGET VARIABLE IF YOU ARE NOT SURE WHAT YOU ARE DOING
-    TARGET = "Qt"
-    TARGET.UID3 = 0x2001E61C
+    TARGET = "Qt$${QT_LIBINFIX}"
+
+    isEmpty(QT_LIBINFIX) {
+        TARGET.UID3 = 0x2001E61C
+
+        # sqlite3 is expected to be already found on phone if infixed configuration is built.
+        BLD_INF_RULES.prj_exports += \
+            "sqlite3.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis" \
+            "sqlite3_selfsigned.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3_selfsigned.sis"
+        sqlitedeployment = \
+            "; Deploy sqlite onto phone that does not have it already" \
+            "@\"$${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis\", (0x2002af5f)"
+        qtlibraries.pkg_postrules += sqlitedeployment
+    } else {
+        # Always use experimental UID for infixed configuration to avoid UID clash
+        TARGET.UID3 = 0xE001E61C
+    }
     VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
 
-    qtresources.sources = $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/s60main.rsc
+    qtresources.sources = $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/s60main$${QT_LIBINFIX}.rsc
     qtresources.path = c:$$APP_RESOURCE_DIR
+    DEPLOYMENT += qtresources
 
     qtlibraries.sources = \
-        QtCore.dll \
-        QtXml.dll \
-        QtGui.dll \
-        QtNetwork.dll \
-        QtTest.dll \
-        QtSql.dll
+        QtCore$${QT_LIBINFIX}.dll \
+        QtXml$${QT_LIBINFIX}.dll \
+        QtGui$${QT_LIBINFIX}.dll \
+        QtNetwork$${QT_LIBINFIX}.dll \
+        QtTest$${QT_LIBINFIX}.dll \
+        QtSql$${QT_LIBINFIX}.dll
 
     qts60plugindeployment = \
         "IF package(0x1028315F)" \
-        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_5_0.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0.dll\"" \
+        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
         "ELSEIF package(0x102752AE)" \
-        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_3_2.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2.dll\"" \
+        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \
         "ELSEIF package(0x102032BE)" \
-        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_3_1.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1.dll\"" \
+        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \
         "ELSE" \
-        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_5_0.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0.dll\"" \
+        "   \"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
         "ENDIF"
     qtlibraries.pkg_postrules += qts60plugindeployment
 
-    sqlitedeployment = \
-        "; Deploy sqlite onto phone that does not have it already" \
-        "@\"$$PWD/sqlite3.sis\", (0x2002af5f)"
-    qtlibraries.pkg_postrules += sqlitedeployment
 
     qtlibraries.path = c:/sys/bin
@@ -62,16 +74,16 @@
     qtlibraries.pkg_prerules += "(0x2002af5f), 0, 5, 0, {\"sqlite3\"}"
 
-    !contains(QT_CONFIG, no-jpeg): imageformats_plugins.sources += qjpeg.dll
-    !contains(QT_CONFIG, no-gif):  imageformats_plugins.sources += qgif.dll
-    !contains(QT_CONFIG, no-mng):  imageformats_plugins.sources += qmng.dll
-    !contains(QT_CONFIG, no-tiff): imageformats_plugins.sources += qtiff.dll
-    !contains(QT_CONFIG, no-ico):  imageformats_plugins.sources += qico.dll
+    !contains(QT_CONFIG, no-jpeg): imageformats_plugins.sources += qjpeg$${QT_LIBINFIX}.dll
+    !contains(QT_CONFIG, no-gif):  imageformats_plugins.sources += qgif$${QT_LIBINFIX}.dll
+    !contains(QT_CONFIG, no-mng):  imageformats_plugins.sources += qmng$${QT_LIBINFIX}.dll
+    !contains(QT_CONFIG, no-tiff): imageformats_plugins.sources += qtiff$${QT_LIBINFIX}.dll
+    !contains(QT_CONFIG, no-ico):  imageformats_plugins.sources += qico$${QT_LIBINFIX}.dll
     imageformats_plugins.path = c:$$QT_PLUGINS_BASE_DIR/imageformats
 
-    codecs_plugins.sources = qcncodecs.dll qjpcodecs.dll qtwcodecs.dll qkrcodecs.dll
+    codecs_plugins.sources = qcncodecs$${QT_LIBINFIX}.dll qjpcodecs$${QT_LIBINFIX}.dll qtwcodecs$${QT_LIBINFIX}.dll qkrcodecs$${QT_LIBINFIX}.dll
     codecs_plugins.path = c:$$QT_PLUGINS_BASE_DIR/codecs
 
     contains(QT_CONFIG, phonon-backend) {
-        phonon_backend_plugins.sources += phonon_mmf.dll
+        phonon_backend_plugins.sources += phonon_mmf$${QT_LIBINFIX}.dll
 
         phonon_backend_plugins.path = c:$$QT_PLUGINS_BASE_DIR/phonon_backend
@@ -83,10 +95,10 @@
     qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,)
 
-    DEPLOYMENT += qtresources qtlibraries qtbackup imageformats_plugins codecs_plugins graphicssystems_plugins
+    DEPLOYMENT += qtlibraries qtbackup imageformats_plugins codecs_plugins graphicssystems_plugins
 
     contains(QT_CONFIG, svg): {
-       qtlibraries.sources += QtSvg.dll
-       imageformats_plugins.sources += qsvg.dll
-       iconengines_plugins.sources = qsvgicon.dll
+       qtlibraries.sources += QtSvg$${QT_LIBINFIX}.dll
+       imageformats_plugins.sources += qsvg$${QT_LIBINFIX}.dll
+       iconengines_plugins.sources = qsvgicon$${QT_LIBINFIX}.dll
        iconengines_plugins.path = c:$$QT_PLUGINS_BASE_DIR/iconengines
        DEPLOYMENT += iconengines_plugins
@@ -94,30 +106,30 @@
 
     contains(QT_CONFIG, phonon): {
-       qtlibraries.sources += phonon.dll
+       qtlibraries.sources += phonon$${QT_LIBINFIX}.dll
     }
 
     contains(QT_CONFIG, script): {
-        qtlibraries.sources += QtScript.dll
+        qtlibraries.sources += QtScript$${QT_LIBINFIX}.dll
     }
 
     contains(QT_CONFIG, xmlpatterns): {
-       qtlibraries.sources += QtXmlPatterns.dll
+       qtlibraries.sources += QtXmlPatterns$${QT_LIBINFIX}.dll
     }
 
     contains(QT_CONFIG, declarative): {
-        qtlibraries.sources += QtDeclarative.dll
+        qtlibraries.sources += QtDeclarative$${QT_LIBINFIX}.dll
     }
 
     graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems
     contains(QT_CONFIG, openvg) {
-        qtlibraries.sources += QtOpenVG.dll
-        graphicssystems_plugins.sources += qvggraphicssystem.dll
+        qtlibraries.sources += QtOpenVG$${QT_LIBINFIX}.dll
+        graphicssystems_plugins.sources += qvggraphicssystem$${QT_LIBINFIX}.dll
     }
 
     contains(QT_CONFIG, multimedia) {
-        qtlibraries.sources += QtMultimedia.dll
+        qtlibraries.sources += QtMultimedia$${QT_LIBINFIX}.dll
     }
 
     BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)"
-    BLD_INF_RULES.prj_exports += "qtdemoapps.iby $$CORE_APP_LAYER_IBY_EXPORT_PATH(qtdemoapps.iby)"
+    BLD_INF_RULES.prj_exports += "qtdemoapps.iby $$CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH(qtdemoapps.iby)"
 }
Index: /trunk/src/script/api/qscriptengine.cpp
===================================================================
--- /trunk/src/script/api/qscriptengine.cpp	(revision 768)
+++ /trunk/src/script/api/qscriptengine.cpp	(revision 769)
@@ -42,4 +42,5 @@
 #include <QtCore/qmetaobject.h>
 
+#include "CodeBlock.h"
 #include "Error.h"
 #include "JSArray.h"
@@ -663,5 +664,5 @@
             encoding = QCoreApplication::UnicodeUTF8;
         else
-            return JSC::throwError(exec, JSC::GeneralError, QString::fromLatin1("qsTranslate(): invalid encoding '%s'").arg(encStr));
+            return JSC::throwError(exec, JSC::GeneralError, QString::fromLatin1("qsTranslate(): invalid encoding '%0'").arg(encStr));
     }
     int n = -1;
@@ -697,10 +698,19 @@
         return JSC::throwError(exec, JSC::GeneralError, "qsTr(): second argument (comment) must be a string");
     if ((args.size() > 2) && !args.at(2).isNumber())
-        return JSC::throwError(exec, JSC::GeneralError, "qsTranslate(): third argument (n) must be a number");
+        return JSC::throwError(exec, JSC::GeneralError, "qsTr(): third argument (n) must be a number");
 #ifndef QT_NO_QOBJECT
     QString context;
-    QScriptContext *ctx = QScriptEnginePrivate::contextForFrame(exec);
-    if (ctx && ctx->parentContext())
-        context = QFileInfo(QScriptContextInfo(ctx->parentContext()).fileName()).baseName();
+    // The first non-empty source URL in the call stack determines the translation context.
+    {
+        JSC::ExecState *frame = exec->removeHostCallFrameFlag();
+        while (frame) {
+            if (frame->codeBlock() && frame->codeBlock()->source()
+                && !frame->codeBlock()->source()->url().isEmpty()) {
+                context = QFileInfo(frame->codeBlock()->source()->url()).baseName();
+                break;
+            }
+            frame = frame->callerFrame()->removeHostCallFrameFlag();
+        }
+    }
 #endif
     QString text(args.at(0).toString(exec));
@@ -769,5 +779,5 @@
 
 QScriptEnginePrivate::QScriptEnginePrivate()
-    : registeredScriptValues(0), freeScriptValues(0),
+    : registeredScriptValues(0), freeScriptValues(0), freeScriptValuesCount(0),
       registeredScriptStrings(0), inEval(false)
 {
@@ -1008,9 +1018,13 @@
         return;
     QScript::GlobalObject *glob = static_cast<QScript::GlobalObject*>(originalGlobalObject());
-    if (object == originalGlobalObjectProxy)
+    if (object == originalGlobalObjectProxy) {
         glob->customGlobalObject = 0;
-    else {
+        // Sync the internal prototype, since JSObject::prototype() is not virtual.
+        glob->setPrototype(originalGlobalObjectProxy->prototype());
+    } else {
         Q_ASSERT(object != originalGlobalObject());
         glob->customGlobalObject = object;
+        // Sync the internal prototype, since JSObject::prototype() is not virtual.
+        glob->setPrototype(object->prototype());
     }
 }
@@ -1590,5 +1604,5 @@
 #ifndef QT_NO_REGEXP
 
-extern QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax);
+Q_DECL_IMPORT extern QString qt_regexp_toCanonical(const QString &, QRegExp::PatternSyntax);
 
 /*!
@@ -2922,9 +2936,9 @@
     JSC::JSGlobalObject *glob = d->originalGlobalObject();
     if (!jscObject || !jscObject.isObject())
-        jscObject = glob;
+        jscObject = d->globalObject();
 //    unsigned attribs = JSC::DontEnum;
     JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 5, JSC::Identifier(exec, "qsTranslate"), QScript::functionQsTranslate));
     JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 2, JSC::Identifier(exec, "QT_TRANSLATE_NOOP"), QScript::functionQsTranslateNoOp));
-    JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr));
+    JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::PrototypeFunction(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr));
     JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TR_NOOP"), QScript::functionQsTrNoOp));
 
Index: /trunk/src/script/api/qscriptengine_p.h
===================================================================
--- /trunk/src/script/api/qscriptengine_p.h	(revision 768)
+++ /trunk/src/script/api/qscriptengine_p.h	(revision 769)
@@ -256,4 +256,6 @@
     QScriptValuePrivate *registeredScriptValues;
     QScriptValuePrivate *freeScriptValues;
+    static const int maxFreeScriptValues = 256;
+    int freeScriptValuesCount;
     QScriptStringPrivate *registeredScriptStrings;
     QHash<int, QScriptTypeInfo*> m_typeInfos;
@@ -378,4 +380,5 @@
         QScriptValuePrivate *p = freeScriptValues;
         freeScriptValues = p->next;
+        --freeScriptValuesCount;
         return p;
     }
@@ -385,6 +388,11 @@
 inline void QScriptEnginePrivate::freeScriptValuePrivate(QScriptValuePrivate *p)
 {
-    p->next = freeScriptValues;
-    freeScriptValues = p;
+    if (freeScriptValuesCount < maxFreeScriptValues) {
+        p->next = freeScriptValues;
+        freeScriptValues = p;
+        ++freeScriptValuesCount;
+    } else {
+        qFree(p);
+    }
 }
 
Index: /trunk/src/script/api/qscriptvalue.cpp
===================================================================
--- /trunk/src/script/api/qscriptvalue.cpp	(revision 768)
+++ /trunk/src/script/api/qscriptvalue.cpp	(revision 769)
@@ -793,4 +793,5 @@
         return;
     }
+    JSC::JSObject *thisObject = JSC::asObject(d->jscValue);
     JSC::JSValue other = d->engine->scriptValueToJSCValue(prototype);
 
@@ -799,5 +800,5 @@
     while (nextPrototypeValue && nextPrototypeValue.isObject()) {
         JSC::JSObject *nextPrototype = JSC::asObject(nextPrototypeValue);
-        if (nextPrototype == JSC::asObject(d->jscValue)) {
+        if (nextPrototype == thisObject) {
             qWarning("QScriptValue::setPrototype() failed: cyclic prototype value");
             return;
@@ -805,5 +806,13 @@
         nextPrototypeValue = nextPrototype->prototype();
     }
-    JSC::asObject(d->jscValue)->setPrototype(other);
+
+    thisObject->setPrototype(other);
+
+    // Sync the internal Global Object prototype if appropriate.
+    if (((thisObject == d->engine->originalGlobalObjectProxy)
+         && !d->engine->customGlobalObject())
+        || (thisObject == d->engine->customGlobalObject())) {
+        d->engine->originalGlobalObject()->setPrototype(other);
+    }
 }
 
@@ -1149,8 +1158,13 @@
 
     if (d->type != other.d_ptr->type) {
-        if (d->type == QScriptValuePrivate::JavaScriptCore)
-            return JSC::JSValue::strictEqual(d->jscValue, d->engine->scriptValueToJSCValue(other));
-        else if (other.d_ptr->type == QScriptValuePrivate::JavaScriptCore)
-            return JSC::JSValue::strictEqual(other.d_ptr->engine->scriptValueToJSCValue(*this), other.d_ptr->jscValue);
+        if (d->type == QScriptValuePrivate::JavaScriptCore) {
+            QScriptEnginePrivate *eng_p = d->engine ? d->engine : other.d_ptr->engine;
+            if (eng_p)
+                return JSC::JSValue::strictEqual(d->jscValue, eng_p->scriptValueToJSCValue(other));
+        } else if (other.d_ptr->type == QScriptValuePrivate::JavaScriptCore) {
+            QScriptEnginePrivate *eng_p = other.d_ptr->engine ? other.d_ptr->engine : d->engine;
+            if (eng_p)
+                return JSC::JSValue::strictEqual(eng_p->scriptValueToJSCValue(*this), other.d_ptr->jscValue);
+        }
 
         return false;
@@ -1942,5 +1956,5 @@
     if (!array.isUndefinedOrNull()) {
         if (!array.isObject()) {
-            return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError));
+            return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError, "Arguments must be an array"));
         }
         if (JSC::asObject(array)->classInfo() == &JSC::Arguments::info)
@@ -1953,6 +1967,5 @@
                 applyArgs.append(JSC::asArray(array)->get(exec, i));
         } else {
-            Q_ASSERT_X(false, Q_FUNC_INFO, "implement me");
-//            return JSC::throwError(exec, JSC::TypeError);
+            return d->engine->scriptValueFromJSCValue(JSC::throwError(exec, JSC::TypeError, "Arguments must be an array"));
         }
     }
Index: /trunk/src/script/bridge/qscriptclassobject.cpp
===================================================================
--- /trunk/src/script/bridge/qscriptclassobject.cpp	(revision 768)
+++ /trunk/src/script/bridge/qscriptclassobject.cpp	(revision 769)
@@ -227,5 +227,5 @@
 
     QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec);
-    //JSC::ExecState *oldFrame = eng_p->currentFrame;
+    JSC::ExecState *oldFrame = eng_p->currentFrame;
     eng_p->pushContext(exec, JSC::JSValue(), args, callee, true);
     QScriptContext *ctx = eng_p->contextForFrame(eng_p->currentFrame);
@@ -235,4 +235,6 @@
     if (!result.isObject())
         result = defaultObject;
+    eng_p->popContext();
+    eng_p->currentFrame = oldFrame;
     return JSC::asObject(eng_p->scriptValueToJSCValue(result));
 }
Index: /trunk/src/script/bridge/qscriptqobject_p.h
===================================================================
--- /trunk/src/script/bridge/qscriptqobject_p.h	(revision 768)
+++ /trunk/src/script/bridge/qscriptqobject_p.h	(revision 769)
@@ -305,5 +305,5 @@
     static WTF::PassRefPtr<JSC::Structure> createStructure(JSC::JSValue prototype)
     {
-        return JSC::Structure::create(prototype, JSC::TypeInfo(JSC::ObjectType));
+        return JSC::Structure::create(prototype, JSC::TypeInfo(JSC::ObjectType, JSC::ImplementsHasInstance));
     }
 
Index: /trunk/src/script/parser/qscriptlexer.cpp
===================================================================
--- /trunk/src/script/parser/qscriptlexer.cpp	(revision 768)
+++ /trunk/src/script/parser/qscriptlexer.cpp	(revision 769)
@@ -32,5 +32,5 @@
 QT_BEGIN_NAMESPACE
 
-extern double qstrtod(const char *s00, char const **se, bool *ok);
+Q_DECL_IMPORT extern double qstrtod(const char *s00, char const **se, bool *ok);
 
 #define shiftWindowsLineBreak() \
Index: /trunk/src/sql/drivers/drivers.pri
===================================================================
--- /trunk/src/sql/drivers/drivers.pri	(revision 768)
+++ /trunk/src/sql/drivers/drivers.pri	(revision 769)
@@ -50,4 +50,5 @@
      mac:!contains( LIBS, .*odbc.* ):LIBS        *= -liodbc
      unix:!contains( LIBS, .*odbc.* ):LIBS       *= -lodbc
+     unix:DEFINES += UNICODE
 
      win32 {
Index: /trunk/src/sql/drivers/mysql/qsql_mysql.cpp
===================================================================
--- /trunk/src/sql/drivers/mysql/qsql_mysql.cpp	(revision 768)
+++ /trunk/src/sql/drivers/mysql/qsql_mysql.cpp	(revision 769)
@@ -321,4 +321,14 @@
 }
 
+static bool qIsInteger(int t)
+{
+    return t == MYSQL_TYPE_TINY
+           || t == MYSQL_TYPE_SHORT
+           || t == MYSQL_TYPE_LONG
+           || t == MYSQL_TYPE_LONGLONG
+           || t == MYSQL_TYPE_INT24;
+}
+
+
 void QMYSQLResultPrivate::bindBlobs()
 {
@@ -369,4 +379,11 @@
             hasBlobs = true;
         } else {
+            // fieldInfo->length specifies the display width, which may be too
+            // small to hold valid integer values (see
+            // http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html ), so
+            // always use the MAX_BIGINT_WIDTH for integer types
+            if (qIsInteger(fieldInfo->type)) {
+                fieldInfo->length = MAX_BIGINT_WIDTH;
+            }
             fieldInfo->type = MYSQL_TYPE_STRING;
         }
Index: /trunk/src/sql/drivers/oci/qsql_oci.cpp
===================================================================
--- /trunk/src/sql/drivers/oci/qsql_oci.cpp	(revision 768)
+++ /trunk/src/sql/drivers/oci/qsql_oci.cpp	(revision 769)
@@ -518,5 +518,5 @@
     else if (ocitype == QLatin1String("LONG") || ocitype == QLatin1String("NCLOB")
              || ocitype == QLatin1String("CLOB"))
-        type = QVariant::String;
+        type = QVariant::ByteArray;
     else if (ocitype == QLatin1String("RAW") || ocitype == QLatin1String("LONG RAW")
              || ocitype == QLatin1String("ROWID") || ocitype == QLatin1String("BLOB")
@@ -544,5 +544,4 @@
     case SQLT_RDD:
     case SQLT_LNG:
-    case SQLT_CLOB:
 #ifdef SQLT_INTERVAL_YM
     case SQLT_INTERVAL_YM:
@@ -582,4 +581,5 @@
     case SQLT_LVB:
     case SQLT_BLOB:
+    case SQLT_CLOB:
     case SQLT_FILE:
     case SQLT_NTY:
Index: /trunk/src/sql/drivers/odbc/qsql_odbc.cpp
===================================================================
--- /trunk/src/sql/drivers/odbc/qsql_odbc.cpp	(revision 768)
+++ /trunk/src/sql/drivers/odbc/qsql_odbc.cpp	(revision 769)
@@ -67,5 +67,5 @@
 # undef UNICODE
 # define SQLTCHAR SQLCHAR
-# define SQL_C_WCHAR SQL_C_CHAR
+# define SQL_C_TCHAR SQL_C_CHAR
 #endif
 
@@ -79,9 +79,52 @@
 #endif
 
-
 static const int COLNAMESIZE = 256;
 //Map Qt parameter types to ODBC types
 static const SQLSMALLINT qParamType[4] = { SQL_PARAM_INPUT, SQL_PARAM_INPUT, SQL_PARAM_OUTPUT, SQL_PARAM_INPUT_OUTPUT };
 
+inline static QString fromSQLTCHAR(const QVarLengthArray<SQLTCHAR>& input, int size=-1)
+{
+    QString result;
+
+    int realsize = qMin(size, input.size());
+    if(realsize > 0 && input[realsize-1] == 0)
+        realsize--;
+    switch(sizeof(SQLTCHAR)) {
+        case 1:
+            result=QString::fromUtf8((const char *)input.constData(), realsize);
+            break;
+        case 2:
+            result=QString::fromUtf16((const ushort *)input.constData(), realsize);
+            break;
+        case 4:
+            result=QString::fromUcs4((const uint *)input.constData(), realsize);
+            break;
+        default:
+            qCritical() << "sizeof(SQLTCHAR) is " << sizeof(SQLTCHAR) << "Don't know how to handle this";
+    }
+    return result;
+}
+
+inline static QVarLengthArray<SQLTCHAR> toSQLTCHAR(const QString &input)
+{
+    QVarLengthArray<SQLTCHAR> result;
+    result.resize(input.size());
+    switch(sizeof(SQLTCHAR)) {
+        case 1:
+            memcpy(result.data(), input.toUtf8().data(), input.size());
+            break;
+        case 2:
+            memcpy(result.data(), input.unicode(), input.size() * 2);
+            break;
+        case 4:
+            memcpy(result.data(), input.toUcs4().data(), input.size() * 4);
+            break;
+        default:
+            qCritical() << "sizeof(SQLTCHAR) is " << sizeof(SQLTCHAR) << "Don't know how to handle this";
+    }
+    result.append(0); // make sure it's null terminated, doesn't matter if it already is, it does if it isn't.
+    return result;
+}
+
 class QODBCDriverPrivate
 {
@@ -89,9 +132,8 @@
     enum DefaultCase{Lower, Mixed, Upper, Sensitive};
     QODBCDriverPrivate()
-    : hEnv(0), hDbc(0), useSchema(false), disconnectCount(0), isMySqlServer(false),
-           isMSSqlServer(false), hasSQLFetchScroll(true), hasMultiResultSets(false),
-           isQuoteInitialized(false), quote(QLatin1Char('"'))
+    : hEnv(0), hDbc(0), unicode(false), useSchema(false), disconnectCount(0), isMySqlServer(false),
+           isMSSqlServer(false), isFreeTDSDriver(false), hasSQLFetchScroll(true),
+           hasMultiResultSets(false), isQuoteInitialized(false), quote(QLatin1Char('"'))
     {
-        unicode = false;
     }
 
@@ -99,9 +141,10 @@
     SQLHANDLE hDbc;
 
-    uint unicode :1;
-    uint useSchema :1;
+    bool unicode;
+    bool useSchema;
     int disconnectCount;
     bool isMySqlServer;
     bool isMSSqlServer;
+    bool isFreeTDSDriver;
     bool hasSQLFetchScroll;
     bool hasMultiResultSets;
@@ -130,5 +173,8 @@
     : hStmt(0), useSchema(false), hasSQLFetchScroll(true), driverPrivate(dpp), userForwardOnly(false)
     {
-        unicode = false;
+        unicode = dpp->unicode;
+        useSchema = dpp->useSchema;
+        disconnectCount = dpp->disconnectCount;
+        hasSQLFetchScroll = dpp->hasSQLFetchScroll;
     }
 
@@ -140,6 +186,6 @@
     SQLHANDLE hStmt;
 
-    uint unicode :1;
-    uint useSchema :1;
+    bool unicode;
+    bool useSchema;
 
     QSqlRecord rInf;
@@ -178,16 +224,15 @@
 
     description_[0] = 0;
-    r = SQLGetDiagRec(handleType,
-                      handle,
-                      i,
-                      state_,
-                      &nativeCode_,
-                      0,
-                      NULL,
-                      &msgLen);
-    if(r == SQL_NO_DATA)
-        return QString();
-    description_.resize(msgLen+1);
     do {
+        r = SQLGetDiagRec(handleType,
+                          handle,
+                          i,
+                          state_,
+                          &nativeCode_,
+                          0,
+                          NULL,
+                          &msgLen);
+        if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && msgLen > 0)
+            description_.resize(msgLen+1);
         r = SQLGetDiagRec(handleType,
                             handle,
@@ -203,7 +248,7 @@
             QString tmpstore;
 #ifdef UNICODE
-            tmpstore = QString((const QChar*)description_.data(), msgLen);
+            tmpstore = fromSQLTCHAR(description_, msgLen);
 #else
-            tmpstore = QString::fromLocal8Bit((const char*)description_.data(), msgLen);
+            tmpstore = QString::fromUtf8((const char*)description_.constData(), msgLen);
 #endif
             if(result != tmpstore) {
@@ -224,5 +269,5 @@
     return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ')
              + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->dpDbc()) + QLatin1Char(' ')
-             + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode));
+             + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)).simplified();
 }
 
@@ -230,5 +275,5 @@
 {
     return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ')
-             + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode));
+             + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified();
 }
 
@@ -308,5 +353,7 @@
     case SQL_CHAR:
     case SQL_VARCHAR:
+#if (ODBCVER >= 0x0350)
     case SQL_GUID:
+#endif
     case SQL_LONGVARCHAR:
         type = QVariant::String;
@@ -332,43 +379,87 @@
     } else {
         colSize++; // make sure there is room for more than the 0 termination
-        if (unicode) {
-            colSize *= 2; // a tiny bit faster, since it saves a SQLGetData() call
-        }
-    }
-    QVarLengthArray<char> buf(colSize);
-    while (true) {
+    }
+    if(unicode) {
         r = SQLGetData(hStmt,
                         column+1,
-                        unicode ? SQL_C_WCHAR : SQL_C_CHAR,
-                        (SQLPOINTER)buf.data(),
-                        colSize,
+                        SQL_C_TCHAR,
+                        NULL,
+                        0,
                         &lengthIndicator);
-        if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
-            if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+        if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
+            colSize = lengthIndicator/sizeof(SQLTCHAR) + 1;
+        QVarLengthArray<SQLTCHAR> buf(colSize);
+        memset(buf.data(), 0, colSize*sizeof(SQLTCHAR));
+        while (true) {
+            r = SQLGetData(hStmt,
+                            column+1,
+                            SQL_C_TCHAR,
+                            (SQLPOINTER)buf.data(),
+                            colSize*sizeof(SQLTCHAR),
+                            &lengthIndicator);
+            if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+                if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+                    fieldVal.clear();
+                    break;
+                }
+                // if SQL_SUCCESS_WITH_INFO is returned, indicating that
+                // more data can be fetched, the length indicator does NOT
+                // contain the number of bytes returned - it contains the
+                // total number of bytes that CAN be fetched
+                // colSize-1: remove 0 termination when there is more data to fetch
+                int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator/sizeof(SQLTCHAR);
+                    fieldVal += fromSQLTCHAR(buf, rSize);
+                if (lengthIndicator < (unsigned int)colSize*sizeof(SQLTCHAR)) {
+                    // workaround for Drivermanagers that don't return SQL_NO_DATA
+                    break;
+                }
+            } else if (r == SQL_NO_DATA) {
+                break;
+            } else {
+                qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
                 fieldVal.clear();
                 break;
             }
-            // if SQL_SUCCESS_WITH_INFO is returned, indicating that
-            // more data can be fetched, the length indicator does NOT
-            // contain the number of bytes returned - it contains the
-            // total number of bytes that CAN be fetched
-            // colSize-1: remove 0 termination when there is more data to fetch
-            int rSize = (r == SQL_SUCCESS_WITH_INFO) ? (unicode ? colSize-2 : colSize-1) : lengthIndicator;
-            if (unicode) {
-                fieldVal += QString((const QChar*) buf.constData(), rSize / 2);
+        }
+    } else {
+        r = SQLGetData(hStmt,
+                        column+1,
+                        SQL_C_CHAR,
+                        NULL,
+                        0,
+                        &lengthIndicator);
+        if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
+            colSize = lengthIndicator + 1;
+        QVarLengthArray<SQLCHAR> buf(colSize);
+        while (true) {
+            r = SQLGetData(hStmt,
+                            column+1,
+                            SQL_C_CHAR,
+                            (SQLPOINTER)buf.data(),
+                            colSize,
+                            &lengthIndicator);
+            if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+                if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+                    fieldVal.clear();
+                    break;
+                }
+                // if SQL_SUCCESS_WITH_INFO is returned, indicating that
+                // more data can be fetched, the length indicator does NOT
+                // contain the number of bytes returned - it contains the
+                // total number of bytes that CAN be fetched
+                // colSize-1: remove 0 termination when there is more data to fetch
+                int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator;
+                    fieldVal += QString::fromUtf8((const char *)buf.constData(), rSize);
+                if (lengthIndicator < (unsigned int)colSize) {
+                    // workaround for Drivermanagers that don't return SQL_NO_DATA
+                    break;
+                }
+            } else if (r == SQL_NO_DATA) {
+                break;
             } else {
-                fieldVal += QString::fromAscii(buf.constData(), rSize);
-            }
-            memset(buf.data(), 0, colSize);
-            if (lengthIndicator < colSize) {
-                // workaround for Drivermanagers that don't return SQL_NO_DATA
+                qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
+                fieldVal.clear();
                 break;
             }
-        } else if (r == SQL_NO_DATA) {
-            break;
-        } else {
-            qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
-            fieldVal.clear();
-            break;
         }
     }
@@ -387,8 +478,9 @@
     SQLRETURN r = SQL_ERROR;
 
-    SQLTCHAR colName[COLNAMESIZE];
+    QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE);
+
     r = SQLDescribeCol(hStmt,
                        column + 1,
-                       colName,
+                       colName.data(),
                        COLNAMESIZE,
                        &colNameLen,
@@ -523,8 +615,8 @@
     SQLSMALLINT nullable;
     SQLRETURN r = SQL_ERROR;
-    SQLTCHAR colName[COLNAMESIZE];
+    QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE);
     r = SQLDescribeCol(p->hStmt,
                         i+1,
-                        colName,
+                        colName.data(),
                         (SQLSMALLINT)COLNAMESIZE,
                         &colNameLen,
@@ -552,7 +644,7 @@
 
 #ifdef UNICODE
-    QString qColName((const QChar*)colName, colNameLen);
+    QString qColName(fromSQLTCHAR(colName, colNameLen));
 #else
-    QString qColName = QString::fromLocal8Bit((const char*)colName);
+    QString qColName = QString::fromUtf8((const char *)colName.constData());
 #endif
     // nullable can be SQL_NO_NULLS, SQL_NULLABLE or SQL_NULLABLE_UNKNOWN
@@ -582,5 +674,11 @@
         return SQL_OV_ODBC3;
 #endif
+    if (connOpts.contains(QLatin1String("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC2"), Qt::CaseInsensitive))
+        return SQL_OV_ODBC2;
+#ifdef _IODBCUNIX_H
+    return SQL_OV_ODBC3;
+#else
     return SQL_OV_ODBC2;
+#endif
 }
 
@@ -588,5 +686,5 @@
 {
     if (!isQuoteInitialized) {
-        char driverResponse[4];
+        SQLTCHAR driverResponse[4];
         SQLSMALLINT length;
         int r = SQLGetInfo(hDbc,
@@ -595,9 +693,12 @@
                 sizeof(driverResponse),
                 &length);
-        if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+        if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
+#ifdef UNICODE
+            quote = QChar(driverResponse[0]);
+#else
             quote = QLatin1Char(driverResponse[0]);
-        } else {
+#endif
+        else
             quote = QLatin1Char('"');
-        }
         isQuoteInitialized = true;
     }
@@ -643,9 +744,9 @@
             r = SQLSetConnectAttr(hDbc, SQL_ATTR_CURRENT_CATALOG,
 #ifdef UNICODE
-                                    (SQLWCHAR*) val.unicode(),
+                                    toSQLTCHAR(val).data(),
 #else
-                                    (SQLCHAR*) val.toLatin1().constData(),
-#endif
-                                    SQL_NTS);
+                                    (SQLCHAR*) val.toUtf8().data(),
+#endif
+                                    val.length()*sizeof(SQLTCHAR));
         } else if (opt.toUpper() == QLatin1String("SQL_ATTR_METADATA_ID")) {
             if (val.toUpper() == QLatin1String("SQL_TRUE")) {
@@ -665,9 +766,9 @@
             r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACEFILE,
 #ifdef UNICODE
-                                    (SQLWCHAR*) val.unicode(),
+                                    toSQLTCHAR(val).data(),
 #else
-                                    (SQLCHAR*) val.toLatin1().constData(),
-#endif
-                                    SQL_NTS);
+                                    (SQLCHAR*) val.toUtf8().data(),
+#endif
+                                    val.length()*sizeof(SQLTCHAR));
         } else if (opt.toUpper() == QLatin1String("SQL_ATTR_TRACE")) {
             if (val.toUpper() == QLatin1String("SQL_OPT_TRACE_OFF")) {
@@ -815,8 +916,4 @@
 {
     d = new QODBCPrivate(p);
-    d->unicode = p->unicode;
-    d->useSchema = p->useSchema;
-    d->disconnectCount = p->disconnectCount;
-    d->hasSQLFetchScroll = p->hasSQLFetchScroll;
 }
 
@@ -881,10 +978,10 @@
 #ifdef UNICODE
     r = SQLExecDirect(d->hStmt,
-                       (SQLWCHAR*) query.unicode(),
+                       toSQLTCHAR(query).data(),
                        (SQLINTEGER) query.length());
 #else
-    QByteArray query8 = query.toLocal8Bit();
+    QByteArray query8 = query.toUtf8();
     r = SQLExecDirect(d->hStmt,
-                       (SQLCHAR*) query8.constData(),
+                       (SQLCHAR*) query8.data(),
                        (SQLINTEGER) query8.length());
 #endif
@@ -1232,10 +1329,10 @@
 #ifdef UNICODE
     r = SQLPrepare(d->hStmt,
-                    (SQLWCHAR*) query.unicode(),
+                    toSQLTCHAR(query).data(),
                     (SQLINTEGER) query.length());
 #else
-    QByteArray query8 = query.toLocal8Bit();
+    QByteArray query8 = query.toUtf8();
     r = SQLPrepare(d->hStmt,
-                    (SQLCHAR*) query8.constData(),
+                    (SQLCHAR*) query8.data(),
                     (SQLINTEGER) query8.length());
 #endif
@@ -1436,15 +1533,15 @@
                 if (d->unicode) {
                     QString str = val.toString();
-                    str.utf16();
                     if (*ind != SQL_NULL_DATA)
-                        *ind = str.length() * sizeof(QChar);
-                    int strSize = str.length() * sizeof(QChar);
+                        *ind = str.length() * sizeof(SQLTCHAR);
+                    int strSize = str.length() * sizeof(SQLTCHAR);
 
                     if (bindValueType(i) & QSql::Out) {
-                        QByteArray ba((char*)str.constData(), str.capacity() * sizeof(QChar));
+                        QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str));
+                        ba.reserve(str.capacity());
                         r = SQLBindParameter(d->hStmt,
                                             i + 1,
                                             qParamType[(QFlag)(bindValueType(i)) & QSql::InOut],
-                                            SQL_C_WCHAR,
+                                            SQL_C_TCHAR,
                                             strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR,
                                             0, // god knows... don't change this!
@@ -1453,18 +1550,19 @@
                                             ba.size(),
                                             ind);
-                        tmpStorage.append(ba);
+                        tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR)));
                         break;
                     }
-
+                    QByteArray strba((const char *)toSQLTCHAR(str).constData(), str.size()*sizeof(SQLTCHAR));
                     r = SQLBindParameter(d->hStmt,
                                           i + 1,
                                           qParamType[(QFlag)(bindValueType(i)) & QSql::InOut],
-                                          SQL_C_WCHAR,
+                                          SQL_C_TCHAR,
                                           strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR,
                                           strSize,
                                           0,
-                                          (void *)str.constData(),
-                                          strSize,
+                                          (SQLPOINTER)strba.constData(),
+                                          strba.size(),
                                           ind);
+                    tmpStorage.append(strba);
                     break;
                 }
@@ -1472,5 +1570,5 @@
 #endif
                 {
-                    QByteArray str = val.toString().toAscii();
+                    QByteArray str = val.toString().toUtf8();
                     if (*ind != SQL_NULL_DATA)
                         *ind = str.length();
@@ -1573,13 +1671,16 @@
             case QVariant::String:
                 if (d->unicode) {
-                    if (bindValueType(i) & QSql::Out)
-                        values[i] = QString::fromUtf16((ushort*)tmpStorage.takeFirst().constData());
+                    if (bindValueType(i) & QSql::Out) {
+                        QByteArray first = tmpStorage.takeFirst();
+                        QVarLengthArray<SQLTCHAR> array;
+                        array.append((SQLTCHAR *)first.constData(), first.size());
+                        values[i] = fromSQLTCHAR(array, first.size()/sizeof(SQLTCHAR*));
+                    }
                     break;
                 }
                 // fall through
             default: {
-                QByteArray ba = tmpStorage.takeFirst();
                 if (bindValueType(i) & QSql::Out)
-                    values[i] = QString::fromAscii(ba.constData());
+                    values[i] = tmpStorage.takeFirst();
                 break; }
         }
@@ -1790,17 +1891,19 @@
 
     SQLSMALLINT cb;
-    SQLTCHAR connOut[1024];
+    QVarLengthArray<SQLTCHAR> connOut(1024);
+    memset(connOut.data(), 0, connOut.size() * sizeof(SQLTCHAR));
     r = SQLDriverConnect(d->hDbc,
                           NULL,
 #ifdef UNICODE
-                          (SQLWCHAR*)connQStr.unicode(),
+                          toSQLTCHAR(connQStr).data(),
 #else
-                          (SQLCHAR*)connQStr.toLatin1().constData(),
+                          (SQLCHAR*)connQStr.toUtf8().data(),
 #endif
                           (SQLSMALLINT)connQStr.length(),
-                          connOut,
+                          connOut.data(),
                           1024,
                           &cb,
-                          SQL_DRIVER_NOPROMPT);
+                          /*SQL_DRIVER_NOPROMPT*/0);
+
     if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) {
         setLastError(qMakeError(tr("Unable to connect"), QSqlError::ConnectionError, d));
@@ -1887,4 +1990,5 @@
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WCHAR)) {
         unicode = true;
+        return;
     }
 
@@ -1896,4 +2000,5 @@
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WVARCHAR)) {
         unicode = true;
+        return;
     }
 
@@ -1905,5 +2010,23 @@
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WLONGVARCHAR)) {
         unicode = true;
-    }
+        return;
+    }
+    SQLHANDLE hStmt;
+    r = SQLAllocHandle(SQL_HANDLE_STMT,
+                                  hDbc,
+                                  &hStmt);
+
+    r = SQLExecDirect(hStmt, toSQLTCHAR(QLatin1String("select 'test'")).data(), SQL_NTS);
+    if(r == SQL_SUCCESS) {
+        r = SQLFetch(hStmt);
+        if(r == SQL_SUCCESS) {
+            QVarLengthArray<SQLWCHAR> buffer(10);
+            r = SQLGetData(hStmt, 1, SQL_C_WCHAR, buffer.data(), buffer.size() * sizeof(SQLWCHAR), NULL);
+            if(r == SQL_SUCCESS && fromSQLTCHAR(buffer) == QLatin1String("test")) {
+                unicode = true;
+            }
+        }
+    }
+    r = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
 }
 
@@ -1978,21 +2101,37 @@
 {
     SQLRETURN   r;
-    char serverString[200];
+    QVarLengthArray<SQLTCHAR> serverString(200);
     SQLSMALLINT t;
+    memset(serverString.data(), 0, serverString.size() * sizeof(SQLTCHAR));
 
     r = SQLGetInfo(hDbc,
                    SQL_DBMS_NAME,
-                   serverString,
-                   sizeof(serverString),
+                   serverString.data(),
+                   serverString.size() * sizeof(SQLTCHAR),
                    &t);
     if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
         QString serverType;
 #ifdef UNICODE
-        serverType = QString(reinterpret_cast<const QChar*>(serverString), t/sizeof(QChar));
+        serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR));
 #else
-        serverType = QString::fromLocal8Bit(serverString, t);
+        serverType = QString::fromUtf8((const char *)serverString.constData(), t);
 #endif
         isMySqlServer = serverType.contains(QLatin1String("mysql"), Qt::CaseInsensitive);
         isMSSqlServer = serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive);
+    }
+    r = SQLGetInfo(hDbc,
+                   SQL_DRIVER_NAME,
+                   serverString.data(),
+                   serverString.size() * sizeof(SQLTCHAR),
+                   &t);
+    if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+        QString serverType;
+#ifdef UNICODE
+        serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR));
+#else
+        serverType = QString::fromUtf8((const char *)serverString.constData(), t);
+#endif
+        isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive);
+        unicode = isFreeTDSDriver == false;
     }
 }
@@ -2010,16 +2149,16 @@
 void QODBCDriverPrivate::checkHasMultiResults()
 {
-    char driverResponse[4];
+    QVarLengthArray<SQLTCHAR> driverResponse(2);
     SQLSMALLINT length;
     SQLRETURN r = SQLGetInfo(hDbc,
                              SQL_MULT_RESULT_SETS,
-                             driverResponse,
-                             sizeof(driverResponse),
+                             driverResponse.data(),
+                             driverResponse.size() * sizeof(SQLTCHAR),
                              &length);
     if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
 #ifdef UNICODE
-        hasMultiResultSets = QString(reinterpret_cast<const QChar*>(driverResponse), length/sizeof(QChar)).startsWith(QLatin1Char('Y'));
+        hasMultiResultSets = fromSQLTCHAR(driverResponse, length/sizeof(SQLTCHAR)).startsWith(QLatin1Char('Y'));
 #else
-        hasMultiResultSets = QString::fromLocal8Bit(driverResponse, length).startsWith(QLatin1Char('Y'));
+        hasMultiResultSets = QString::fromUtf8((const char *)driverResponse.constData(), length).startsWith(QLatin1Char('Y'));
 #endif
 }
@@ -2135,7 +2274,7 @@
                    0,
 #ifdef UNICODE
-                   (SQLWCHAR*)joinedTableTypeString.unicode(),
+                   toSQLTCHAR(joinedTableTypeString).data(),
 #else
-                   (SQLCHAR*)joinedTableTypeString.toLatin1().constData(),
+                   (SQLCHAR*)joinedTableTypeString.toUtf8().data(),
 #endif
                    joinedTableTypeString.length() /* characters, not bytes */);
@@ -2150,4 +2289,9 @@
     else
         r = SQLFetch(hStmt);
+
+    if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r != SQL_NO_DATA) {
+        qWarning() << "QODBCDriver::tables failed to retrieve table/view list: (" << r << "," << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ")";
+        return QStringList();
+    }
 
     while (r == SQL_SUCCESS) {
@@ -2209,19 +2353,19 @@
     r = SQLPrimaryKeys(hStmt,
 #ifdef UNICODE
-                        catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(),
+                        catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
 #else
-                        catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(),
+                        catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
 #endif
                         catalog.length(),
 #ifdef UNICODE
-                        schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(),
+                        schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
 #else
-                        schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(),
+                        schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
 #endif
                         schema.length(),
 #ifdef UNICODE
-                        (SQLWCHAR*)table.unicode(),
+                        toSQLTCHAR(table).data(),
 #else
-                        (SQLCHAR*)table.toLatin1().constData(),
+                        (SQLCHAR*)table.toUtf8().data(),
 #endif
                         table.length() /* in characters, not in bytes */);
@@ -2234,19 +2378,19 @@
                         SQL_BEST_ROWID,
 #ifdef UNICODE
-                        catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(),
+                        catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
 #else
-                        catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(),
+                        catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
 #endif
                         catalog.length(),
 #ifdef UNICODE
-                        schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(),
+                        schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
 #else
-                        schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(),
+                        schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
 #endif
                         schema.length(),
 #ifdef UNICODE
-                        (SQLWCHAR*)table.unicode(),
+                        toSQLTCHAR(table).data(),
 #else
-                        (SQLCHAR*)table.toLatin1().constData(),
+                        (SQLCHAR*)table.toUtf8().data(),
 #endif
                         table.length(),
@@ -2334,19 +2478,19 @@
     r =  SQLColumns(hStmt,
 #ifdef UNICODE
-                     catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(),
+                     catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
 #else
-                     catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(),
+                     catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
 #endif
                      catalog.length(),
 #ifdef UNICODE
-                     schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(),
+                     schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
 #else
-                     schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(),
+                     schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
 #endif
                      schema.length(),
 #ifdef UNICODE
-                     (SQLWCHAR*)table.unicode(),
+                     toSQLTCHAR(table).data(),
 #else
-                     (SQLCHAR*)table.toLatin1().constData(),
+                     (SQLCHAR*)table.toUtf8().data(),
 #endif
                      table.length(),
Index: /trunk/src/sql/drivers/odbc/qsql_odbc.h
===================================================================
--- /trunk/src/sql/drivers/odbc/qsql_odbc.h	(revision 768)
+++ /trunk/src/sql/drivers/odbc/qsql_odbc.h	(revision 769)
@@ -74,8 +74,4 @@
 #if defined(Q_CC_BOR)
 #  undef _MSC_VER
-#endif
-
-#ifndef Q_ODBC_VERSION_2
-#include <sqlucode.h>
 #endif
 
Index: /trunk/src/sql/drivers/sqlite/qsql_sqlite.cpp
===================================================================
--- /trunk/src/sql/drivers/sqlite/qsql_sqlite.cpp	(revision 768)
+++ /trunk/src/sql/drivers/sqlite/qsql_sqlite.cpp	(revision 769)
@@ -246,7 +246,7 @@
                 break;
             default:
-                values[i + idx] = QString::fromUtf16(static_cast<const ushort *>(
+                values[i + idx] = QString(reinterpret_cast<const QChar *>(
                             sqlite3_column_text16(stmt, i)),
-                            sqlite3_column_bytes16(stmt, i) / sizeof(ushort));
+                            sqlite3_column_bytes16(stmt, i) / sizeof(QChar));
                 break;
             }
@@ -260,4 +260,5 @@
         sqlite3_reset(stmt);
         return false;
+    case SQLITE_CONSTRAINT:
     case SQLITE_ERROR:
         // SQLITE_ERROR is a generic error code and we must call sqlite3_reset()
@@ -501,30 +502,4 @@
 }
 
-static int qGetSqliteTimeout(QString opts)
-{
-    enum { DefaultTimeout = 5000 };
-
-    opts.remove(QLatin1Char(' '));
-    foreach(QString option, opts.split(QLatin1Char(';'))) {
-        if (option.startsWith(QLatin1String("QSQLITE_BUSY_TIMEOUT="))) {
-            bool ok;
-            int nt = option.mid(21).toInt(&ok);
-            if (ok)
-                return nt;
-        }
-    }
-    return DefaultTimeout;
-}
-
-static int qGetSqliteOpenMode(QString opts)
-{
-    opts.remove(QLatin1Char(' '));
-    foreach(QString option, opts.split(QLatin1Char(';'))) {
-        if (option == QLatin1String("QSQLITE_OPEN_READONLY"))
-                return SQLITE_OPEN_READONLY;
-    }
-    return SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
-}
-
 /*
    SQLite dbs have no user name, passwords, hosts or ports.
@@ -538,7 +513,24 @@
     if (db.isEmpty())
         return false;
-
-    if (sqlite3_open_v2(db.toUtf8().constData(), &d->access, qGetSqliteOpenMode(conOpts), NULL) == SQLITE_OK) {
-        sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
+    bool sharedCache = false;
+    int openMode = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, timeOut=5000;
+    QStringList opts=QString(conOpts).remove(QLatin1Char(' ')).split(QLatin1Char(';'));
+    foreach(const QString &option, opts) {
+        if (option.startsWith(QLatin1String("QSQLITE_BUSY_TIMEOUT="))) {
+            bool ok;
+            int nt = option.mid(21).toInt(&ok);
+            if (ok)
+                timeOut = nt;
+        }
+        if (option == QLatin1String("QSQLITE_OPEN_READONLY"))
+            openMode = SQLITE_OPEN_READONLY;
+        if (option == QLatin1String("QSQLITE_ENABLE_SHARED_CACHE"))
+            sharedCache = true;
+    }
+
+    sqlite3_enable_shared_cache(sharedCache);
+
+    if (sqlite3_open_v2(db.toUtf8().constData(), &d->access, openMode, NULL) == SQLITE_OK) {
+        sqlite3_busy_timeout(d->access, timeOut);
         setOpen(true);
         setOpenError(false);
Index: /trunk/src/sql/kernel/qsqldatabase.cpp
===================================================================
--- /trunk/src/sql/kernel/qsqldatabase.cpp	(revision 768)
+++ /trunk/src/sql/kernel/qsqldatabase.cpp	(revision 769)
@@ -1268,4 +1268,5 @@
     \i QSQLITE_BUSY_TIMEOUT
     \i QSQLITE_OPEN_READONLY
+    \i QSQLITE_ENABLE_SHARED_CACHE
     \endlist
 
Index: /trunk/src/sql/kernel/qsqlquery.cpp
===================================================================
--- /trunk/src/sql/kernel/qsqlquery.cpp	(revision 768)
+++ /trunk/src/sql/kernel/qsqlquery.cpp	(revision 769)
@@ -823,4 +823,7 @@
   the result set.
 
+  \note Calling setForwardOnly after execution of the query will result
+  in unexpected results at best, and crashes at worst.
+
   \sa isForwardOnly(), next(), seek(), QSqlResult::setForwardOnly()
 */
@@ -1000,7 +1003,15 @@
   paramType is QSql::Out or QSql::InOut, the placeholder will be
   overwritten with data from the database after the exec() call.
+  In this case, sufficient space must be pre-allocated to store
+  the result into.
 
   To bind a NULL value, use a null QVariant; for example, use
   \c {QVariant(QVariant::String)} if you are binding a string.
+
+  Values cannot be bound to multiple locations in the query, eg:
+  \code
+  INSERT INTO testtable (id, name, samename) VALUES (:id, :name, :name)
+  \endcode
+  Binding to name will bind to the first :name, but not the second.
 
   \sa addBindValue(), prepare(), exec(), boundValue() boundValues()
Index: /trunk/src/sql/kernel/qsqlresult.cpp
===================================================================
--- /trunk/src/sql/kernel/qsqlresult.cpp	(revision 768)
+++ /trunk/src/sql/kernel/qsqlresult.cpp	(revision 769)
@@ -137,5 +137,5 @@
     }
 
-    return QString::fromUtf16(arr, int(ptr - arr) + 1);
+    return QString(reinterpret_cast<const QChar *>(arr), int(ptr - arr) + 1);
 }
 
@@ -564,4 +564,7 @@
     scrollable. isForwardOnly() will always return the correct status of
     the result set.
+
+    \note Calling setForwardOnly after execution of the query will result
+    in unexpected results at best, and crashes at worst.
 
     \sa isForwardOnly(), fetchNext(), QSqlQuery::setForwardOnly()
@@ -708,5 +711,13 @@
     placeholder name in the current record (row).
 
-    Note that binding an undefined placeholder will result in undefined behavior.
+   Values cannot be bound to multiple locations in the query, eg:
+   \code
+   INSERT INTO testtable (id, name, samename) VALUES (:id, :name, :name)
+   \endcode
+   Binding to name will bind to the first :name, but not the second.
+
+    \note Binding an undefined placeholder will result in undefined behavior.
+
+    \sa QSqlQuery::bindValue()
 */
 void QSqlResult::bindValue(const QString& placeholder, const QVariant& val,
Index: /trunk/src/src.pro
===================================================================
--- /trunk/src/src.pro	(revision 768)
+++ /trunk/src/src.pro	(revision 769)
@@ -111,4 +111,5 @@
       src_webkit.depends = src_gui src_sql src_network src_xml 
       contains(QT_CONFIG, phonon):src_webkit.depends += src_phonon
+      contains(QT_CONFIG, xmlpatterns): src_webkit.depends += src_xmlpatterns
       contains(QT_CONFIG, declarative):src_declarative.depends += src_webkit
       #exists($$QT_SOURCE_TREE/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro): src_webkit.depends += src_javascriptcore
Index: /trunk/src/svg/qgraphicssvgitem.cpp
===================================================================
--- /trunk/src/svg/qgraphicssvgitem.cpp	(revision 768)
+++ /trunk/src/svg/qgraphicssvgitem.cpp	(revision 769)
@@ -268,4 +268,5 @@
 /*!
   \property QGraphicsSvgItem::maximumCacheSize
+  \since 4.6
 
   This property holds the maximum size of the device coordinate cache
@@ -313,5 +314,6 @@
 /*!
   \property QGraphicsSvgItem::elementId
-
+  \since 4.6
+  
   This property holds the element's XML ID.
  */
Index: /trunk/src/svg/qsvghandler.cpp
===================================================================
--- /trunk/src/svg/qsvghandler.cpp	(revision 768)
+++ /trunk/src/svg/qsvghandler.cpp	(revision 769)
@@ -75,5 +75,5 @@
 #define QT_INHERIT QLatin1String(qt_inherit_text)
 
-double qstrtod(const char *s00, char const **se, bool *ok);
+Q_DECL_IMPORT double qstrtod(const char *s00, char const **se, bool *ok);
 
 // ======== duplicated from qcolor_p
Index: /trunk/src/testlib/qplaintestlogger.cpp
===================================================================
--- /trunk/src/testlib/qplaintestlogger.cpp	(revision 768)
+++ /trunk/src/testlib/qplaintestlogger.cpp	(revision 769)
@@ -182,4 +182,5 @@
                 RDebug::Print(format, hbuffer);
             }
+            delete hbuffer;
         }
         else {
Index: /trunk/src/testlib/qtestcase.cpp
===================================================================
--- /trunk/src/testlib/qtestcase.cpp	(revision 768)
+++ /trunk/src/testlib/qtestcase.cpp	(revision 769)
@@ -965,5 +965,5 @@
          " -xml       : Outputs results as XML document\n"
          " -lightxml  : Outputs results as stream of XML tags\n"
-         " -flush     : Flushes the resutls\n"
+         " -flush     : Flushes the results\n"
          " -o filename: Writes all output into a file\n"
          " -silent    : Only outputs warnings and failures\n"
@@ -1114,4 +1114,12 @@
         } else if (strcmp(argv[i], "-qws") == 0) {
             // do nothing
+        } else if (strcmp(argv[i], "-graphicssystem") == 0) {
+            // do nothing
+            if (i + 1 >= argc) {
+                printf("-graphicssystem needs an extra parameter specifying the graphics system\n");
+                exit(1);
+            } else {
+                ++i;
+            }
         } else if (argv[i][0] == '-') {
             printf("Unknown option: '%s'\n\n%s", argv[i], testOptions);
@@ -1299,9 +1307,21 @@
             QTestResult::setSkipCurrentTest(false);
 
+            // Data tag requested but none available?
+            if (data && !dataCount) {
+                // Let empty data tag through.
+                if (!*data)
+                    data = 0;
+                else {
+                    printf("Unknown testdata for function %s: '%s'\n", slotName, data);
+                    printf("Function has no testdata.\n");
+                    return false;
+                }
+            }
+
             /* For each entry in the data table, do: */
             do {
                 if (!data || !qstrcmp(data, table.testData(curDataIndex)->dataTag())) {
                     foundFunction = true;
-                    QTestDataSetter s(table.isEmpty() ? static_cast<QTestData *>(0)
+                    QTestDataSetter s(curDataIndex >= dataCount ? static_cast<QTestData *>(0)
                                                       : table.testData(curDataIndex));
 
Index: /trunk/src/testlib/qtestlogger.cpp
===================================================================
--- /trunk/src/testlib/qtestlogger.cpp	(revision 768)
+++ /trunk/src/testlib/qtestlogger.cpp	(revision 769)
@@ -212,8 +212,5 @@
         failureElement->addAttribute(QTest::AI_Line, buf);
         failureElement->addAttribute(QTest::AI_Description, description);
-        const char* tag = QTestResult::currentDataTag();
-        if (tag) {
-            failureElement->addAttribute(QTest::AI_Tag, tag);
-        }
+        addTag(failureElement);
         currentLogElement->addLogElement(failureElement);
     }
@@ -278,4 +275,25 @@
 }
 
+void QTestLogger::addTag(QTestElement* element)
+{
+    const char *tag = QTestResult::currentDataTag();
+    const char *gtag = QTestResult::currentGlobalDataTag();
+    const char *filler = (tag && gtag) ? ":" : "";
+    if ((!tag || !tag[0]) && (!gtag || !gtag[0])) {
+        return;
+    }
+
+    if (!tag) {
+        tag = "";
+    }
+    if (!gtag) {
+        gtag = "";
+    }
+
+    QTestCharBuffer buf;
+    QTest::qt_asprintf(&buf, "%s%s%s", gtag, filler, tag);
+    element->addAttribute(QTest::AI_Tag, buf.constData());
+}
+
 void QTestLogger::addMessage(MessageTypes type, const char *message, const char *file, int line)
 {
@@ -298,5 +316,5 @@
     case QAbstractTestLogger::QWarning:
         ++qwarnCounter;
-        typeBuf = "qwarning";
+        typeBuf = "qwarn";
         break;
     case QAbstractTestLogger::QFatal:
@@ -319,4 +337,5 @@
     errorElement->addAttribute(QTest::AI_Type, typeBuf);
     errorElement->addAttribute(QTest::AI_Description, message);
+    addTag(errorElement);
 
     if(file)
Index: /trunk/src/testlib/qtestlogger_p.h
===================================================================
--- /trunk/src/testlib/qtestlogger_p.h	(revision 768)
+++ /trunk/src/testlib/qtestlogger_p.h	(revision 769)
@@ -84,4 +84,5 @@
                      const char *file = 0, int line = 0);
         void addBenchmarkResult(const QBenchmarkResult &result);
+        void addTag(QTestElement* element);
 
         void addMessage(MessageTypes type, const char *message,
Index: /trunk/src/testlib/qtestxmlstreamer.cpp
===================================================================
--- /trunk/src/testlib/qtestxmlstreamer.cpp	(revision 768)
+++ /trunk/src/testlib/qtestxmlstreamer.cpp	(revision 769)
@@ -112,5 +112,12 @@
         QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
 
-        QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n    <Description><![CDATA[%s]]></Description>\n</Message>\n",
+        QTestCharBuffer tagbuf;
+        if (element->attribute(QTest::AI_Tag)) {
+            QTestCharBuffer cdataTag;
+            QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag));
+            QTest::qt_asprintf(&tagbuf, "    <DataTag><![CDATA[%s]]></DataTag>\n", cdataTag.constData());
+        }
+
+        QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n%s    <Description><![CDATA[%s]]></Description>\n</Message>\n",
                            element->attributeValue(QTest::AI_Type),
                            element->attributeName(QTest::AI_File),
@@ -118,4 +125,5 @@
                            element->attributeName(QTest::AI_Line),
                            element->attributeValue(QTest::AI_Line),
+                           tagbuf.constData(),
                            cdataDesc.constData());
         break;
@@ -150,5 +158,27 @@
 
     if (element->elementType() == QTest::LET_TestCase) {
-        QTest::qt_asprintf(formatted, "</TestFunction>\n");
+        bool failed = false;
+        for (QTestElement* child = element->childElements(); child; child = child->nextElement()) {
+            if (   child->elementType() == QTest::LET_Failure
+                && child->attribute(QTest::AI_Result)
+                && (    !strcmp(child->attributeValue(QTest::AI_Result), "fail")
+                    ||  !strcmp(child->attributeValue(QTest::AI_Result), "xpass"))
+                )
+            {
+                failed = true;
+                break;
+            }
+        }
+
+        // For passing functions, no Incident has been output yet.
+        // For failing functions, we already output one.
+        // Please note: we are outputting "pass" even if there was an xfail etc.
+        // This is by design (arguably bad design, but dangerous to change now!)
+        if (element->attribute(QTest::AI_Result) && !failed) {
+            QTest::qt_asprintf(formatted, "<Incident type=\"pass\" file=\"\" line=\"0\" />\n</TestFunction>\n");
+        }
+        else {
+            QTest::qt_asprintf(formatted, "</TestFunction>\n");
+        }
     } else {
         formatted->data()[0] = '\0';
@@ -158,27 +188,9 @@
 void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
 {
-    if(!element || !formatted)
+    Q_UNUSED(element);
+    if (!formatted)
         return;
 
-    if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){
-        QTestCharBuffer buf;
-        QTestCharBuffer quotedFile;
-        QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
-
-        QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"",
-                           element->attributeName(QTest::AI_File),
-                           quotedFile.constData(),
-                           element->attributeName(QTest::AI_Line),
-                           element->attributeValue(QTest::AI_Line));
-
-        if( !element->childElements() ) {
-            QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
-                               element->attributeValue(QTest::AI_Result), buf.constData());
-        } else {
-            formatted->data()[0] = '\0';
-        }
-    } else {
-        formatted->data()[0] = '\0';
-    }
+    formatted->data()[0] = '\0';
 }
 
Index: /trunk/src/tools/moc/generator.cpp
===================================================================
--- /trunk/src/tools/moc/generator.cpp	(revision 768)
+++ /trunk/src/tools/moc/generator.cpp	(revision 769)
@@ -739,16 +739,21 @@
                 if (p.read.isEmpty())
                     continue;
+                QByteArray prefix;
+                if (p.inPrivateClass.size()) {
+                    prefix = p.inPrivateClass;
+                    prefix.append("->");
+                }
                 if (p.gspec == PropertyDef::PointerSpec)
-                    fprintf(out, "        case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s())); break;\n",
-                            propindex, p.read.constData());
+                    fprintf(out, "        case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
+                            propindex, prefix.constData(), p.read.constData());
                 else if (p.gspec == PropertyDef::ReferenceSpec)
-                    fprintf(out, "        case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s())); break;\n",
-                            propindex, p.read.constData());
+                    fprintf(out, "        case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
+                            propindex, prefix.constData(), p.read.constData());
                 else if (cdef->enumDeclarations.value(p.type, false))
-                    fprintf(out, "        case %d: *reinterpret_cast<int*>(_v) = QFlag(%s()); break;\n",
-                            propindex, p.read.constData());
+                    fprintf(out, "        case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
+                            propindex, prefix.constData(), p.read.constData());
                 else
-                    fprintf(out, "        case %d: *reinterpret_cast< %s*>(_v) = %s(); break;\n",
-                            propindex, p.type.constData(), p.read.constData());
+                    fprintf(out, "        case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
+                            propindex, p.type.constData(), prefix.constData(), p.read.constData());
             }
             fprintf(out, "        }\n");
@@ -769,10 +774,15 @@
                 if (p.write.isEmpty())
                     continue;
+                QByteArray prefix;
+                if (p.inPrivateClass.size()) {
+                    prefix = p.inPrivateClass;
+                    prefix.append("->");
+                }
                 if (cdef->enumDeclarations.value(p.type, false)) {
-                    fprintf(out, "        case %d: %s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
-                            propindex, p.write.constData());
+                    fprintf(out, "        case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
+                            propindex, prefix.constData(), p.write.constData());
                 } else {
-                    fprintf(out, "        case %d: %s(*reinterpret_cast< %s*>(_v)); break;\n",
-                            propindex, p.write.constData(), p.type.constData());
+                    fprintf(out, "        case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
+                            propindex, prefix.constData(), p.write.constData(), p.type.constData());
                 }
             }
@@ -792,6 +802,11 @@
                 if (!p.reset.endsWith(')'))
                     continue;
-                fprintf(out, "        case %d: %s; break;\n",
-                        propindex, p.reset.constData());
+                QByteArray prefix;
+                if (p.inPrivateClass.size()) {
+                    prefix = p.inPrivateClass;
+                    prefix.append("->");
+                }
+                fprintf(out, "        case %d: %s%s; break;\n",
+                        propindex, prefix.constData(), p.reset.constData());
             }
             fprintf(out, "        }\n");
Index: /trunk/src/tools/moc/keywords.cpp
===================================================================
--- /trunk/src/tools/moc/keywords.cpp	(revision 768)
+++ /trunk/src/tools/moc/keywords.cpp	(revision 769)
@@ -44,10 +44,10 @@
 
 static const short keyword_trans[][128] = {
-    {0,0,0,0,0,0,0,0,0,525,522,0,0,0,0,0,
-     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-     525,252,523,526,0,38,239,524,25,26,236,234,30,235,27,237,
+    {0,0,0,0,0,0,0,0,0,533,530,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     533,252,531,534,0,38,239,532,25,26,236,234,30,235,27,237,
      22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
      0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-     8,21,8,8,8,8,8,8,8,8,8,31,527,32,238,8,
+     8,21,8,8,8,8,8,8,8,8,8,31,535,32,238,8,
      0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
      14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
@@ -191,5 +191,5 @@
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
-     530,530,530,530,530,530,530,530,530,530,0,0,0,0,0,0,
+     538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -350,5 +350,5 @@
     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-     0,0,0,0,0,0,0,0,0,0,529,0,0,0,0,528,
+     0,0,0,0,0,0,0,0,0,0,537,0,0,0,0,536,
      0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -426,4 +426,12 @@
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,450,0,506,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+     522,0,0,481,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@@ -926,10 +934,10 @@
     {CHARACTER, 0, 69, 479, CHARACTER},
     {CHARACTER, 0, 95, 480, CHARACTER},
-    {CHARACTER, 0, 83, 481, CHARACTER},
+    {CHARACTER, 48, 0, 0, CHARACTER},
     {CHARACTER, 0, 76, 482, CHARACTER},
     {CHARACTER, 0, 79, 483, CHARACTER},
     {CHARACTER, 0, 84, 484, CHARACTER},
     {Q_PRIVATE_SLOT_TOKEN, 0, 0, 0, CHARACTER},
-    {CHARACTER, 48, 0, 0, CHARACTER},
+    {CHARACTER, 49, 0, 0, CHARACTER},
     {CHARACTER, 0, 77, 487, CHARACTER},
     {CHARACTER, 0, 79, 488, CHARACTER},
@@ -968,4 +976,12 @@
     {CHARACTER, 0, 69, 521, CHARACTER},
     {Q_SCRIPTABLE_TOKEN, 0, 0, 0, CHARACTER},
+    {CHARACTER, 0, 82, 523, CHARACTER},
+    {CHARACTER, 0, 79, 524, CHARACTER},
+    {CHARACTER, 0, 80, 525, CHARACTER},
+    {CHARACTER, 0, 69, 526, CHARACTER},
+    {CHARACTER, 0, 82, 527, CHARACTER},
+    {CHARACTER, 0, 84, 528, CHARACTER},
+    {CHARACTER, 0, 89, 529, CHARACTER},
+    {Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
     {NEWLINE, 0, 0, 0, NOTOKEN},
     {QUOTE, 0, 0, 0, NOTOKEN},
Index: /trunk/src/tools/moc/moc.cpp
===================================================================
--- /trunk/src/tools/moc/moc.cpp	(revision 768)
+++ /trunk/src/tools/moc/moc.cpp	(revision 769)
@@ -659,4 +659,7 @@
                     parseSlotInPrivate(&def, access);
                     break;
+                case Q_PRIVATE_PROPERTY_TOKEN:
+                    parsePrivateProperty(&def);
+                    break;
                 case ENUM: {
                     EnumDef enumDef;
@@ -873,9 +876,6 @@
 }
 
-
-void Moc::parseProperty(ClassDef *def)
-{
-    next(LPAREN);
-    PropertyDef propDef;
+void Moc::createPropertyDef(PropertyDef &propDef)
+{
     QByteArray type = parseType().name;
     if (type.isEmpty())
@@ -965,5 +965,4 @@
         }
     }
-    next(RPAREN);
     if (propDef.read.isNull()) {
         QByteArray msg;
@@ -989,4 +988,39 @@
         warning(msg.constData());
     }
+}
+
+void Moc::parseProperty(ClassDef *def)
+{
+    next(LPAREN);
+    PropertyDef propDef;
+    createPropertyDef(propDef);
+    next(RPAREN);
+
+
+    if(!propDef.notify.isEmpty())
+        def->notifyableProperties++;
+    def->propertyList += propDef;
+}
+
+void Moc::parsePrivateProperty(ClassDef *def)
+{
+    next(LPAREN);
+    PropertyDef propDef;
+    next(IDENTIFIER);
+    propDef.inPrivateClass = lexem();
+    while (test(SCOPE)) {
+        propDef.inPrivateClass += lexem();
+        next(IDENTIFIER);
+        propDef.inPrivateClass += lexem();
+    }
+    // also allow void functions
+    if (test(LPAREN)) {
+        next(RPAREN);
+        propDef.inPrivateClass += "()";
+    }
+
+    next(COMMA);
+
+    createPropertyDef(propDef);
 
     if(!propDef.notify.isEmpty())
Index: /trunk/src/tools/moc/moc.h
===================================================================
--- /trunk/src/tools/moc/moc.h	(revision 768)
+++ /trunk/src/tools/moc/moc.h	(revision 769)
@@ -117,5 +117,5 @@
 {
     PropertyDef():notifyId(-1), constant(false), final(false), gspec(ValueSpec){}
-    QByteArray name, type, read, write, reset, designable, scriptable, editable, stored, user, notify;
+    QByteArray name, type, read, write, reset, designable, scriptable, editable, stored, user, notify, inPrivateClass;
     int notifyId;
     bool constant;
@@ -218,4 +218,5 @@
     void parseSignals(ClassDef *def);
     void parseProperty(ClassDef *def);
+    void createPropertyDef(PropertyDef &def);
     void parseEnumOrFlag(ClassDef *def, bool isFlag);
     void parseFlag(ClassDef *def);
@@ -225,4 +226,5 @@
     void parseDeclareMetatype();
     void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access);
+    void parsePrivateProperty(ClassDef *def);
 
     void parseFunctionArguments(FunctionDef *def);
Index: /trunk/src/tools/moc/token.cpp
===================================================================
--- /trunk/src/tools/moc/token.cpp	(revision 768)
+++ /trunk/src/tools/moc/token.cpp	(revision 769)
@@ -180,4 +180,5 @@
         case Q_SLOT_TOKEN: return "Q_SLOT_TOKEN";
         case Q_PRIVATE_SLOT_TOKEN: return "Q_PRIVATE_SLOT_TOKEN";
+        case Q_PRIVATE_PROPERTY_TOKEN: return "Q_PRIVATE_PROPERTY_TOKEN";
         case SPECIAL_TREATMENT_MARK: return "SPECIAL_TREATMENT_MARK";
         case MOC_INCLUDE_BEGIN: return "MOC_INCLUDE_BEGIN";
Index: /trunk/src/tools/moc/token.h
===================================================================
--- /trunk/src/tools/moc/token.h	(revision 768)
+++ /trunk/src/tools/moc/token.h	(revision 769)
@@ -186,4 +186,5 @@
     Q_INVOKABLE_TOKEN,
     Q_SCRIPTABLE_TOKEN,
+    Q_PRIVATE_PROPERTY_TOKEN,
     Q_META_TOKEN_END,
     SPECIAL_TREATMENT_MARK = Q_META_TOKEN_END,
Index: /trunk/src/tools/moc/util/generate_keywords.cpp
===================================================================
--- /trunk/src/tools/moc/util/generate_keywords.cpp	(revision 768)
+++ /trunk/src/tools/moc/util/generate_keywords.cpp	(revision 769)
@@ -249,5 +249,5 @@
     { "Q_SLOT", "Q_SLOT_TOKEN" },
     { "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
-
+    { "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
     { "\n", "NEWLINE" },
     { "\"", "QUOTE" },
Index: /trunk/src/tools/rcc/rcc.cpp
===================================================================
--- /trunk/src/tools/rcc/rcc.cpp	(revision 768)
+++ /trunk/src/tools/rcc/rcc.cpp	(revision 769)
@@ -545,4 +545,6 @@
     RCCFileInfo *s = new RCCFileInfo(file);
     s->m_parent = parent;
+    if (parent->m_children.contains(filename))
+        qWarning("potential duplicate alias detected: '%s'", qPrintable(filename));
     parent->m_children.insertMulti(filename, s);
     return true;
Index: /trunk/src/tools/uic/cpp/cppwriteinitialization.cpp
===================================================================
--- /trunk/src/tools/uic/cpp/cppwriteinitialization.cpp	(revision 768)
+++ /trunk/src/tools/uic/cpp/cppwriteinitialization.cpp	(revision 769)
@@ -2789,6 +2789,6 @@
 
     QMap<QString, bool> map; // bool is dummy. The idea is to sort that (always generate in the same order) by putting a set into a map
-    foreach (QString str, directives)
-        map[str] = true;
+    foreach (const QString &str, directives)
+        map.insert(str, true);
 
     if (map.size() == 1) {
@@ -2799,5 +2799,5 @@
     outputStream << "#if";
     bool doOr = false;
-    foreach (QString str, map.keys()) {
+    foreach (const QString &str, map.keys()) {
         if (doOr)
             outputStream << " ||";
Index: /trunk/src/tools/uic/qclass_lib_map.h
===================================================================
--- /trunk/src/tools/uic/qclass_lib_map.h	(revision 768)
+++ /trunk/src/tools/uic/qclass_lib_map.h	(revision 769)
@@ -458,4 +458,5 @@
 QT_CLASS_LIB(QWebSettings, QtWebKit, qwebsettings.h)
 QT_CLASS_LIB(QWebView, QtWebKit, qwebview.h)
+QT_CLASS_LIB(QAudio, QtMultimedia, qaudio.h)
 QT_CLASS_LIB(QAudioDeviceInfo, QtMultimedia, qaudiodeviceinfo.h)
 QT_CLASS_LIB(QAbstractAudioDeviceInfo, QtMultimedia, qaudioengine.h)
Index: /trunk/src/tools/uic3/converter.cpp
===================================================================
--- /trunk/src/tools/uic3/converter.cpp	(revision 768)
+++ /trunk/src/tools/uic3/converter.cpp	(revision 769)
@@ -402,5 +402,5 @@
             if (objName == receiver) {
                 // see if it's a custom slot
-                foreach (QString cs, ui_custom_slots) {
+                foreach (const QString &cs, ui_custom_slots) {
                     if (cs == slot) {
                         resolved = true;
@@ -1123,5 +1123,5 @@
                 QStringList flags = prop->elementSet().split(QLatin1Char('|'));
                 QStringList v;
-                foreach (QString fl, flags) {
+                foreach (const QString &fl, flags) {
                     QString e = WidgetInfo::resolveEnumerator(className, fl);
                     if (e.isEmpty()) {
@@ -1284,5 +1284,5 @@
     //split type name on <>*& and whitespace
     QStringList typeNames = t.split(QRegExp(QLatin1String("<|>|\\*|&| ")), QString::SkipEmptyParts);
-    foreach(QString typeName , typeNames) {
+    foreach(const QString &typeName , typeNames) {
         QString newName = fixClassName(typeName);
         if( newName != typeName ) {
Index: /trunk/src/tools/uic3/main.cpp
===================================================================
--- /trunk/src/tools/uic3/main.cpp	(revision 768)
+++ /trunk/src/tools/uic3/main.cpp	(revision 769)
@@ -339,8 +339,8 @@
         ui3.computeDeps(e, globalIncludes, localIncludes, impl);
 
-        foreach (QString i, globalIncludes)
+        foreach (const QString &i, globalIncludes)
             printf("%s\n", i.toLatin1().constData());
 
-        foreach (QString i, localIncludes)
+        foreach (const QString &i, localIncludes)
             printf("%s\n", i.toLatin1().constData());
 
Index: /trunk/src/xml/dom/qdom.cpp
===================================================================
--- /trunk/src/xml/dom/qdom.cpp	(revision 768)
+++ /trunk/src/xml/dom/qdom.cpp	(revision 769)
@@ -2974,5 +2974,5 @@
 
 /*!
-    Returns the next sibilng element with tag name \a tagName if \a tagName
+    Returns the next sibling element with tag name \a tagName if \a tagName
     is non-empty; otherwise returns any next sibling element.
     Returns a null element if no such sibling exists.
@@ -3488,4 +3488,5 @@
             // Dont use normal insert function since we would create infinite recursion
             notations->map.insertMulti(p->nodeName(), p);
+        p = p->next;
     }
 }
Index: /trunk/src/xmlpatterns/api/qxmlresultitems.cpp
===================================================================
--- /trunk/src/xmlpatterns/api/qxmlresultitems.cpp	(revision 768)
+++ /trunk/src/xmlpatterns/api/qxmlresultitems.cpp	(revision 769)
@@ -70,4 +70,8 @@
   sequence and returns it, and current() always returns the QXmlItem
   that next() returned the last time it was called.
+
+  \note When using the QXmlResultItems overload of QXmlQuery::evaluateTo()
+  to execute a query, it is advisable to create a new instance of this
+  class for each new set of results rather than reusing an old instance.
 
   \sa QXmlItem::isNode(), QXmlItem::isAtomicValue(), QXmlNodeModelIndex
Index: /trunk/src/xmlpatterns/data/qatomicvalue.cpp
===================================================================
--- /trunk/src/xmlpatterns/data/qatomicvalue.cpp	(revision 768)
+++ /trunk/src/xmlpatterns/data/qatomicvalue.cpp	(revision 769)
@@ -227,4 +227,6 @@
         case QVariant::Time:
             return BuiltinTypes::xsDateTime;
+        case QMetaType::Float:
+	    return BuiltinTypes::xsFloat;
         case QVariant::Double:
             return BuiltinTypes::xsDouble;
Index: /trunk/src/xmlpatterns/data/qdecimal_p.h
===================================================================
--- /trunk/src/xmlpatterns/data/qdecimal_p.h	(revision 768)
+++ /trunk/src/xmlpatterns/data/qdecimal_p.h	(revision 769)
@@ -62,5 +62,5 @@
  * Defined in QtCore's qlocale.cpp.
  */
-extern char *qdtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp);
+Q_DECL_IMPORT extern char *qdtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp);
 
 namespace QPatternist
Index: /trunk/src/xmlpatterns/schema/qxsdschemaparser.cpp
===================================================================
--- /trunk/src/xmlpatterns/schema/qxsdschemaparser.cpp	(revision 768)
+++ /trunk/src/xmlpatterns/schema/qxsdschemaparser.cpp	(revision 769)
@@ -265,4 +265,9 @@
 }
 
+void XsdSchemaParser::addIncludedSchemas(const NamespaceSet &schemas)
+{
+    m_includedSchemas += schemas;
+}
+
 void XsdSchemaParser::setIncludedSchemas(const NamespaceSet &schemas)
 {
@@ -270,7 +275,17 @@
 }
 
+void XsdSchemaParser::addImportedSchemas(const NamespaceSet &schemas)
+{
+    m_importedSchemas += schemas;
+}
+
 void XsdSchemaParser::setImportedSchemas(const NamespaceSet &schemas)
 {
     m_importedSchemas = schemas;
+}
+
+void XsdSchemaParser::addRedefinedSchemas(const NamespaceSet &schemas)
+{
+    m_redefinedSchemas += schemas;
 }
 
@@ -298,4 +313,5 @@
     m_includedSchemas.insert(uri);
     m_importedSchemas.insert(uri);
+    m_redefinedSchemas.insert(uri);
 }
 
@@ -595,6 +611,12 @@
             parser.setImportedSchemas(m_importedSchemas);
             parser.setRedefinedSchemas(m_redefinedSchemas);
-            if (!parser.parse(XsdSchemaParser::IncludeParser))
+            if (!parser.parse(XsdSchemaParser::IncludeParser)) {
                 return;
+            } else {
+                // add indirectly loaded schemas to the list of already loaded ones
+                addIncludedSchemas(parser.m_includedSchemas);
+                addImportedSchemas(parser.m_importedSchemas);
+                addRedefinedSchemas(parser.m_redefinedSchemas);
+            }
         }
     }
@@ -685,6 +707,12 @@
                 parser.setImportedSchemas(m_importedSchemas);
                 parser.setRedefinedSchemas(m_redefinedSchemas);
-                if (!parser.parse(XsdSchemaParser::ImportParser))
+                if (!parser.parse(XsdSchemaParser::ImportParser)) {
                     return;
+                } else {
+                    // add indirectly loaded schemas to the list of already loaded ones
+                    addIncludedSchemas(parser.m_includedSchemas);
+                    addImportedSchemas(parser.m_importedSchemas);
+                    addRedefinedSchemas(parser.m_redefinedSchemas);
+                }
             }
         }
@@ -703,6 +731,12 @@
                     parser.setImportedSchemas(m_importedSchemas);
                     parser.setRedefinedSchemas(m_redefinedSchemas);
-                    if (!parser.parse(XsdSchemaParser::ImportParser))
+                    if (!parser.parse(XsdSchemaParser::ImportParser)) {
                         return;
+                    } else {
+                        // add indirectly loaded schemas to the list of already loaded ones
+                        addIncludedSchemas(parser.m_includedSchemas);
+                        addImportedSchemas(parser.m_importedSchemas);
+                        addRedefinedSchemas(parser.m_redefinedSchemas);
+                    }
                 }
             }
@@ -840,6 +874,12 @@
             parser.setImportedSchemas(m_importedSchemas);
             parser.setRedefinedSchemas(m_redefinedSchemas);
-            if (!parser.parse(XsdSchemaParser::RedefineParser))
+            if (!parser.parse(XsdSchemaParser::RedefineParser)) {
                 return;
+            } else {
+                // add indirectly loaded schemas to the list of already loaded ones
+                addIncludedSchemas(parser.m_includedSchemas);
+                addImportedSchemas(parser.m_importedSchemas);
+                addRedefinedSchemas(parser.m_redefinedSchemas);
+            }
 
             delete reply;
@@ -4833,5 +4873,5 @@
             if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) {
                 const XsdAnnotation::Ptr annotation = parseAnnotation();
-                element->addAnnotation(annotation);
+                term->addAnnotation(annotation);
             } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) {
                 if (hasRefAttribute) {
Index: /trunk/src/xmlpatterns/schema/qxsdschemaparser_p.h
===================================================================
--- /trunk/src/xmlpatterns/schema/qxsdschemaparser_p.h	(revision 768)
+++ /trunk/src/xmlpatterns/schema/qxsdschemaparser_p.h	(revision 769)
@@ -121,8 +121,20 @@
 
             /**
+             * Adds @p schemas to the list of already included schemas, so the parser
+             * can detect multiple includes of the same schema.
+             */
+            void addIncludedSchemas(const NamespaceSet &schemas);
+
+            /**
              * Sets which @p schemas have been included already, so the parser
-             * can detect circular includes.
+             * can detect multiple includes of the same schema.
              */
             void setIncludedSchemas(const NamespaceSet &schemas);
+
+            /**
+             * Adds @p schemas to the list of already imported schemas, so the parser
+             * can detect multiple imports of the same schema.
+             */
+            void addImportedSchemas(const NamespaceSet &schemas);
 
             /**
@@ -133,6 +145,12 @@
 
             /**
+             * Adds @p schemas to the list of already redefined schemas, so the parser
+             * can detect multiple redefines of the same schema.
+             */
+            void addRedefinedSchemas(const NamespaceSet &schemas);
+
+            /**
              * Sets which @p schemas have been redefined already, so the parser
-             * can detect circular redefines.
+             * can detect multiple redefines of the same schema.
              */
             void setRedefinedSchemas(const NamespaceSet &schemas);
Index: /trunk/src/xmlpatterns/schema/qxsdschemaresolver.cpp
===================================================================
--- /trunk/src/xmlpatterns/schema/qxsdschemaresolver.cpp	(revision 768)
+++ /trunk/src/xmlpatterns/schema/qxsdschemaresolver.cpp	(revision 769)
@@ -633,5 +633,12 @@
                     // 1.2
                     const XsdSimpleType::Ptr anonType(new XsdSimpleType());
-                    anonType->setCategory(complexBaseType->contentType()->simpleType()->category());
+                    XsdSimpleType::TypeCategory baseCategory = complexBaseType->contentType()->simpleType()->category();
+                    anonType->setCategory(baseCategory);
+
+                    if (baseCategory == XsdSimpleType::SimpleTypeList) {
+                        const XsdSimpleType::Ptr baseSimpleType = complexBaseType->contentType()->simpleType();
+                        anonType->setItemType(baseSimpleType->itemType());
+                    }
+
                     anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction);
                     anonType->setWxsSuperType(complexBaseType->contentType()->simpleType());
Index: /trunk/src/xmlpatterns/xmlpatterns.pro
===================================================================
--- /trunk/src/xmlpatterns/xmlpatterns.pro	(revision 768)
+++ /trunk/src/xmlpatterns/xmlpatterns.pro	(revision 769)
@@ -26,12 +26,13 @@
 include($$PWD/utils/utils.pri)
 include($$PWD/qobjectmodel/qobjectmodel.pri, "", true)
-wince*:# The Microsoft MIPS compiler crashes if /Og is specified
-:
 
-# -O2/1 expands to /Og plus additional arguments.
-contains(DEFINES, MIPS): { 
-    QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/
-    QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/
+wince* {
+    # The Microsoft MIPS compiler crashes if /Og is specified.
+    # -O2/1 expands to /Og plus additional arguments.
+    contains(DEFINES, MIPS) {
+        QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/
+        QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/
+    }
 }
+
 symbian:TARGET.UID3 = 0x2001E62B
-HEADERS += 
Index: /trunk/tools/assistant/lib/fulltextsearch/qclucene-config_p.h
===================================================================
--- /trunk/tools/assistant/lib/fulltextsearch/qclucene-config_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/fulltextsearch/qclucene-config_p.h	(revision 769)
@@ -530,5 +530,5 @@
 /* #undef _CL__CND_DEBUG */
 
-/* debuging option */
+/* debugging option */
 /* #undef _DEBUG */
 
Index: /trunk/tools/assistant/lib/qhelpcollectionhandler.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpcollectionhandler.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpcollectionhandler.cpp	(revision 769)
@@ -253,5 +253,5 @@
         "Value BLOB )");
 
-    foreach (QString q, tables) {
+    foreach (const QString &q, tables) {
         if (!query->exec(q))
             return false;
@@ -324,5 +324,5 @@
     }
 
-    foreach (QString id, idsToInsert) {
+    foreach (const QString &id, idsToInsert) {
         m_query.prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
         m_query.bindValue(0, id);
@@ -347,5 +347,5 @@
     m_query.exec();
 
-    foreach (QString att, attributes) {
+    foreach (const QString &att, attributes) {
         m_query.prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)"));
         m_query.bindValue(0, nameId);
@@ -401,5 +401,5 @@
 
     addFilterAttributes(reader.filterAttributes());
-    foreach (QString filterName, reader.customFilters())
+    foreach (const QString &filterName, reader.customFilters())
         addCustomFilter(filterName, reader.filterAttributes(filterName));
 
@@ -500,5 +500,5 @@
         atts.insert(m_query.value(0).toString());
 
-    foreach (QString s, attributes) {
+    foreach (const QString &s, attributes) {
         if (!atts.contains(s)) {
             m_query.prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
Index: /trunk/tools/assistant/lib/qhelpcontentwidget.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpcontentwidget.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpcontentwidget.cpp	(revision 769)
@@ -254,5 +254,5 @@
     m_mutex.unlock();
 
-    foreach (QString dbFileName, fileNames) {
+    foreach (const QString &dbFileName, fileNames) {
         m_mutex.lock();
         if (m_abort) {
Index: /trunk/tools/assistant/lib/qhelpdbreader.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpdbreader.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpdbreader.cpp	(revision 769)
@@ -516,5 +516,5 @@
 {
     QString str;
-    foreach (QString s, list)
+    foreach (const QString &s, list)
         str.append(QLatin1Char('\'') + quote(s) + QLatin1String("\', "));
     if (str.endsWith(QLatin1String(", ")))
@@ -568,5 +568,5 @@
     bool needUpdate = !m_viewAttributes.count();
 
-    foreach (QString s, attributes)
+    foreach (const QString &s, attributes)
         m_viewAttributes.remove(s);
 
@@ -575,5 +575,5 @@
         m_indicesCache = indexIds;        
     }
-    foreach (QString s, attributes)
+    foreach (const QString &s, attributes)
         m_viewAttributes.insert(s);
     m_useAttributesCache = true;
Index: /trunk/tools/assistant/lib/qhelpenginecore.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpenginecore.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpenginecore.cpp	(revision 769)
@@ -169,5 +169,5 @@
     all defined filters.
 
-    The help engine also offers the possiblity to set and read values
+    The help engine also offers the possibility to set and read values
     in a persistant way comparable to ini files or Windows registry
     entries. For more information see setValue() or value().
@@ -363,5 +363,5 @@
         const QHelpCollectionHandler::DocInfoList docList =
             d->collectionHandler->registeredDocumentations();
-        foreach(const QHelpCollectionHandler::DocInfo info, docList) {
+        foreach(const QHelpCollectionHandler::DocInfo &info, docList) {
             if (info.namespaceName == namespaceName) {
                 if (QDir::isAbsolutePath(info.fileName))
@@ -387,5 +387,5 @@
         return list;
     const QHelpCollectionHandler::DocInfoList docList = d->collectionHandler->registeredDocumentations();
-    foreach(const QHelpCollectionHandler::DocInfo info, docList) {
+    foreach(const QHelpCollectionHandler::DocInfo &info, docList) {
         list.append(info.namespaceName);
     }
@@ -532,5 +532,5 @@
 
     const QStringList files = reader->files(filterAttributes, extensionFilter);
-    foreach (const QString file, files) {
+    foreach (const QString &file, files) {
         url.setPath(QLatin1String("/") + file);
         res.append(url);
Index: /trunk/tools/assistant/lib/qhelpgenerator.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpgenerator.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpgenerator.cpp	(revision 769)
@@ -204,5 +204,5 @@
 
     emit statusChanged(tr("Insert custom filters..."));
-    foreach (QHelpDataCustomFilter f, helpData->customFilters()) {
+    foreach (const QHelpDataCustomFilter &f, helpData->customFilters()) {
         if (!registerCustomFilter(f.name, f.filterAttributes, true)) {
             cleanupDB();
@@ -368,5 +368,5 @@
             "Value BLOB )");
 
-    foreach (QString q, tables) {
+    foreach (const QString &q, tables) {
         if (!d->query->exec(q)) {
             d->error = tr("Cannot create tables!");
@@ -630,5 +630,5 @@
     }
 
-    foreach (QString id, idsToInsert) {
+    foreach (const QString &id, idsToInsert) {
         d->query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
         d->query->bindValue(0, id);
@@ -665,5 +665,5 @@
     d->query->exec();
 
-    foreach (QString att, filterAttribs) {
+    foreach (const QString &att, filterAttribs) {
         d->query->prepare(QLatin1String("INSERT INTO FilterTable VALUES(?, ?)"));
         d->query->bindValue(0, nameId);
@@ -688,5 +688,5 @@
 
     QList<int> filterAtts;
-    foreach (QString filterAtt, filterAttributes) {
+    foreach (const QString &filterAtt, filterAttributes) {
         d->query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable WHERE Name=?"));
         d->query->bindValue(0, filterAtt);
@@ -705,5 +705,5 @@
     int i = 0;
     d->query->exec(QLatin1String("BEGIN"));
-    foreach (QHelpDataIndexItem itm, keywords) {
+    foreach (const QHelpDataIndexItem &itm, keywords) {
         pos = itm.reference.indexOf(QLatin1Char('#'));
         fileName = itm.reference.left(pos);
@@ -774,5 +774,5 @@
 
     // associate the filter attributes
-    foreach (QString filterAtt, filterAttributes) {
+    foreach (const QString &filterAtt, filterAttributes) {
         d->query->prepare(QLatin1String("INSERT INTO ContentsFilterTable (FilterAttributeId, ContentsId) "
             "SELECT Id, ? FROM FilterAttributeTable WHERE Name=?"));
@@ -799,5 +799,5 @@
         atts.insert(d->query->value(0).toString());
 
-    foreach (QString s, attributes) {
+    foreach (const QString &s, attributes) {
         if (!atts.contains(s)) {
             d->query->prepare(QLatin1String("INSERT INTO FilterAttributeTable VALUES(NULL, ?)"));
Index: /trunk/tools/assistant/lib/qhelpindexwidget.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpindexwidget.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpindexwidget.cpp	(revision 769)
@@ -163,5 +163,5 @@
     m_mutex.unlock();
 
-    foreach (QString dbFileName, m_helpEngine->fileNameReaderMap.keys()) {
+    foreach (const QString &dbFileName, m_helpEngine->fileNameReaderMap.keys()) {
         m_mutex.lock();
         if (m_abort) {
@@ -179,5 +179,5 @@
         if (!lst.isEmpty()) {
             m_mutex.lock();
-            foreach (QString s, lst)
+            foreach (const QString &s, lst)
                 indicesSet.insert(s);
             if (m_abort) {
@@ -318,5 +318,5 @@
         QRegExp regExp(wildcard, Qt::CaseInsensitive);
         regExp.setPatternSyntax(QRegExp::Wildcard);
-        foreach (QString index, d->indices) {
+        foreach (const QString &index, d->indices) {
             if (index.contains(regExp)) {
                 lst.append(index);
@@ -333,5 +333,5 @@
         }
     } else {
-        foreach (QString index, d->indices) {
+        foreach (const QString &index, d->indices) {
             if (index.contains(filter, Qt::CaseInsensitive)) {
                 lst.append(index);
Index: /trunk/tools/assistant/lib/qhelpsearchengine.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchengine.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchengine.cpp	(revision 769)
@@ -64,7 +64,7 @@
 
 #if defined(QT_CLUCENE_SUPPORT)
-    using namespace qt::fulltextsearch::clucene;
+    using namespace fulltextsearch::clucene;
 #else
-    using namespace qt::fulltextsearch::std;
+    using namespace fulltextsearch::std;
 #endif
 
@@ -196,5 +196,5 @@
     QHelpSearchResultWidget *resultWidget;
 
-    qt::fulltextsearch::QHelpSearchIndexReader *indexReader;
+    fulltextsearch::QHelpSearchIndexReader *indexReader;
     QHelpSearchIndexWriter *indexWriter;
 
@@ -215,5 +215,5 @@
 
     The QHelpSearchQuery class contains the field name and the associated search
-    term. Depending on the field the search term might get split up into seperate
+    term. Depending on the field the search term might get split up into separate
     terms to be parsed differently by the search engine.
 
@@ -239,13 +239,13 @@
     \value DEFAULT  the default field provided by the search widget, several terms should be
                     split and stored in the word list except search terms enclosed in quotes.
-    \value FUZZY    a field only provided in use with clucene. Terms should be split in seperate
+    \value FUZZY    a field only provided in use with clucene. Terms should be split in separate
                     words and passed to the search engine.
-    \value WITHOUT  a field only provided in use with clucene. Terms should be split in seperate
+    \value WITHOUT  a field only provided in use with clucene. Terms should be split in separate
                     words and passed to the search engine.
-    \value PHRASE   a field only provided in use with clucene. Terms should not be split in seperate
+    \value PHRASE   a field only provided in use with clucene. Terms should not be split in separate
                     words.
-    \value ALL      a field only provided in use with clucene. Terms should be split in seperate
+    \value ALL      a field only provided in use with clucene. Terms should be split in separate
                     words and passed to the search engine
-    \value ATLEAST  a field only provided in use with clucene. Terms should be split in seperate
+    \value ATLEAST  a field only provided in use with clucene. Terms should be split in separate
                     words and passed to the search engine
 */
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader.cpp	(revision 769)
@@ -44,6 +44,5 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
+namespace fulltextsearch {
 
 QHelpSearchIndexReader::QHelpSearchIndexReader()
@@ -101,6 +100,5 @@
 
 
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp	(revision 769)
@@ -56,7 +56,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace clucene {
+namespace fulltextsearch {
+namespace clucene {
 
 QHelpSearchIndexReaderClucene::QHelpSearchIndexReaderClucene()
@@ -388,7 +387,6 @@
 }
 
-        }   // namespace clucene
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace clucene
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h	(revision 769)
@@ -61,7 +61,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace clucene {
+namespace fulltextsearch {
+namespace clucene {
 
 class QHelpSearchIndexReaderClucene : public QHelpSearchIndexReader
@@ -85,7 +84,6 @@
 };
 
-        }   // namespace clucene
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace clucene
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader_default.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader_default.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader_default.cpp	(revision 769)
@@ -53,7 +53,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace std {
+namespace fulltextsearch {
+namespace std {
 
 namespace {
@@ -167,5 +166,5 @@
         bool containsAll = true;
         QStringList split = fileName.split(QLatin1String("@"));
-        foreach (const QString attribute, attributes) {
+        foreach (const QString &attribute, attributes) {
             if (!split.contains(attribute, Qt::CaseInsensitive)) {
                 containsAll = false;
@@ -181,7 +180,7 @@
 void Reader::setIndexFile(const QString &namespaceName, const QString &attributes)
 {
-    QString extention = namespaceName + QLatin1String("@") + attributes;
-    indexFile = indexPath + QLatin1String("/indexdb40.") + extention;
-    documentFile = indexPath + QLatin1String("/indexdoc40.") + extention;
+    QString extension = namespaceName + QLatin1String("@") + attributes;
+    indexFile = indexPath + QLatin1String("/indexdb40.") + extension;
+    documentFile = indexPath + QLatin1String("/indexdoc40.") + extension;
 }
 
@@ -236,5 +235,5 @@
 void Reader::searchInIndex(const QStringList &terms)
 {
-    foreach (const QString term, terms) {
+    foreach (const QString &term, terms) {
         QVector<Document> documents;
 
@@ -255,5 +254,5 @@
                 QString title, url;
                 QVector<DocumentInfo> documentsInfo;
-                foreach(const Document doc, documents) {
+                foreach(const Document &doc, documents) {
                     info.docNumber = doc.docNumber;
                     info.frequency = doc.frequency;
@@ -520,5 +519,5 @@
 
     QString queryTerm;
-    foreach (const QHelpSearchQuery query, queryList) {
+    foreach (const QHelpSearchQuery &query, queryList) {
         if (query.fieldName == QHelpSearchQuery::DEFAULT) {
             queryTerm = query.wordList.at(0);
@@ -542,5 +541,5 @@
     // setup the reader
     m_reader.setIndexPath(indexPath);
-    foreach(const QString namespaceName, registeredDocs) {
+    foreach(const QString &namespaceName, registeredDocs) {
         mutex.lock();
         if (m_cancel) {
@@ -554,5 +553,5 @@
             engine.filterAttributeSets(namespaceName);
 
-        foreach (QStringList attributes, attributeSets) {
+        foreach (const QStringList &attributes, attributeSets) {
             // read all index files
             m_reader.setIndexFile(namespaceName, attributes.join(QLatin1String("@")));
@@ -578,5 +577,5 @@
         if (!hits.isEmpty()) {
             if (termSeq.isEmpty()) {
-                foreach (const DocumentInfo docInfo, hits) {
+                foreach (const DocumentInfo &docInfo, hits) {
                     mutex.lock();
                     if (m_cancel) {
@@ -589,5 +588,5 @@
                 }
             } else {
-                foreach (const DocumentInfo docInfo, hits) {
+                foreach (const DocumentInfo &docInfo, hits) {
                     mutex.lock();
                     if (m_cancel) {
@@ -608,7 +607,6 @@
 }
 
-        }   // namespace std
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace std
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader_default_p.h
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader_default_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader_default_p.h	(revision 769)
@@ -65,7 +65,6 @@
 struct PosEntry;
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace std {
+namespace fulltextsearch {
+namespace std {
 
 class Reader
@@ -128,7 +127,6 @@
 };
 
-        }   // namespace std
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace std
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexreader_p.h
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexreader_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexreader_p.h	(revision 769)
@@ -67,6 +67,5 @@
 class QHelpEngineCore;
 
-namespace qt {
-    namespace fulltextsearch {
+namespace fulltextsearch {
 
 class QHelpSearchIndexReader : public QThread
@@ -101,6 +100,5 @@
 };
 
-    }   // namespace fulltextsearch
-}  // namespace qt
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp	(revision 769)
@@ -64,7 +64,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace clucene {
+namespace fulltextsearch {
+namespace clucene {
 
 // taken from qtexthtmlparser
@@ -587,5 +586,5 @@
     mutex.unlock();
 
-    start(QThread::NormalPriority);
+    start(QThread::LowestPriority);
 }
 
@@ -614,65 +613,67 @@
 void QHelpSearchIndexWriter::run()
 {
-    QMutexLocker mutexLocker(&mutex);
-
-    if (m_cancel)
-        return;
-
-    const bool reindex = this->m_reindex;
-    const QString collectionFile(this->m_collectionFile);
-
-    mutexLocker.unlock();
-
-    QHelpEngineCore engine(collectionFile, 0);
-    if (!engine.setupData())
-        return;
-
-    const QLatin1String key("CluceneIndexedNamespaces");
-    if (reindex)
-        engine.setCustomValue(key, QLatin1String(""));
-
-    QMap<QString, QDateTime> indexMap;
-    const QLatin1String oldKey("CluceneSearchNamespaces");
-    if (!engine.customValue(oldKey, QString()).isNull()) {
-        // old style qhc file < 4.4.2, need to convert...
-        const QStringList indexedNamespaces = engine.customValue(oldKey).
-            toString().split(QLatin1String("|"), QString::SkipEmptyParts);
-        foreach (const QString &nameSpace, indexedNamespaces)
-            indexMap.insert(nameSpace, QDateTime());
-        engine.removeCustomValue(oldKey);
-    } else {
-        QDataStream dataStream(engine.customValue(key).toByteArray());
-        dataStream >> indexMap;
-    }
-
-    QString indexPath = m_indexFilesFolder;
-
-    QFileInfo fInfo(indexPath);
-    if (fInfo.exists() && !fInfo.isWritable()) {
-        qWarning("Full Text Search, could not create index (missing permissions for '%s').", qPrintable(indexPath));
-        return;
-    }
-
-    emit indexingStarted();
-
-    QCLuceneIndexWriter *writer = 0;
-    QCLuceneStandardAnalyzer analyzer;
-    const QStringList registeredDocs = engine.registeredDocumentations();
-
-    QLocalSocket localSocket;
-    localSocket.connectToServer(QString(QLatin1String("QtAssistant%1"))
-        .arg(QLatin1String(QT_VERSION_STR)));
-
-    QLocalServer localServer;
-    bool otherInstancesRunning = true;
-    if (!localSocket.waitForConnected()) {
-        otherInstancesRunning = false;
-        localServer.listen(QString(QLatin1String("QtAssistant%1"))
-            .arg(QLatin1String(QT_VERSION_STR)));
-    }
-
 #if !defined(QT_NO_EXCEPTIONS)
     try {
 #endif
+        QMutexLocker mutexLocker(&mutex);
+
+        if (m_cancel)
+            return;
+
+        const bool reindex = this->m_reindex;
+        const QString collectionFile(this->m_collectionFile);
+
+        mutexLocker.unlock();
+
+        QHelpEngineCore engine(collectionFile, 0);
+        if (!engine.setupData())
+            return;
+
+        const QLatin1String key("CluceneIndexedNamespaces");
+        if (reindex)
+            engine.setCustomValue(key, QLatin1String(""));
+
+        QMap<QString, QDateTime> indexMap;
+        const QLatin1String oldKey("CluceneSearchNamespaces");
+        if (!engine.customValue(oldKey, QString()).isNull()) {
+            // old style qhc file < 4.4.2, need to convert...
+            const QStringList indexedNamespaces
+                = engine.customValue(oldKey).toString()
+                  .split(QLatin1String("|"), QString::SkipEmptyParts);
+            foreach (const QString &nameSpace, indexedNamespaces)
+                indexMap.insert(nameSpace, QDateTime());
+            engine.removeCustomValue(oldKey);
+        } else {
+            QDataStream dataStream(engine.customValue(key).toByteArray());
+            dataStream >> indexMap;
+        }
+
+        QString indexPath = m_indexFilesFolder;
+
+        QFileInfo fInfo(indexPath);
+        if (fInfo.exists() && !fInfo.isWritable()) {
+            qWarning("Full Text Search, could not create index (missing permissions for '%s').",
+                     qPrintable(indexPath));
+            return;
+        }
+
+        emit indexingStarted();
+
+        QCLuceneIndexWriter *writer = 0;
+        QCLuceneStandardAnalyzer analyzer;
+        const QStringList registeredDocs = engine.registeredDocumentations();
+
+        QLocalSocket localSocket;
+        localSocket.connectToServer(QString(QLatin1String("QtAssistant%1"))
+                                    .arg(QLatin1String(QT_VERSION_STR)));
+
+        QLocalServer localServer;
+        bool otherInstancesRunning = true;
+        if (!localSocket.waitForConnected()) {
+            otherInstancesRunning = false;
+            localServer.listen(QString(QLatin1String("QtAssistant%1"))
+                               .arg(QLatin1String(QT_VERSION_STR)));
+        }
+
         // check if it's locked, and if the other instance is running
         if (!otherInstancesRunning && QCLuceneIndexReader::isLocked(indexPath))
@@ -706,5 +707,6 @@
                 } else {
                     QString path = engine.documentationFileName(namespaceName);
-                    if (indexMap.value(namespaceName) < QFileInfo(path).lastModified()) {
+                    if (indexMap.value(namespaceName)
+                        < QFileInfo(path).lastModified()) {
                         // make sure we remove some outdated indexed stuff
                         indexMap.remove(namespaceName);
@@ -729,92 +731,83 @@
             writer = new QCLuceneIndexWriter(indexPath, analyzer, true);
         }
-#if !defined(QT_NO_EXCEPTIONS)
-    } catch (...) {
-        qWarning("Full Text Search, could not create index writer in '%s'.",
-            qPrintable(indexPath));
-        return;
-    }
-#endif
-
-#if !defined(QT_NO_EXCEPTIONS)
-    try {
-#endif
+
         writer->setMergeFactor(100);
         writer->setMinMergeDocs(1000);
         writer->setMaxFieldLength(QCLuceneIndexWriter::DEFAULT_MAX_FIELD_LENGTH);
+
+        QStringList namespaces;
+        foreach(const QString &namespaceName, registeredDocs) {
+            mutexLocker.relock();
+            if (m_cancel) {
+                closeIndexWriter(writer);
+                emit indexingFinished();
+                return;
+            }
+            mutexLocker.unlock();
+
+            namespaces.append(namespaceName);
+            if (indexMap.contains(namespaceName))
+                continue;
+
+            const QList<QStringList> attributeSets =
+                    engine.filterAttributeSets(namespaceName);
+
+            if (attributeSets.isEmpty()) {
+                const QList<QUrl> docFiles = indexableFiles(&engine, namespaceName,
+                                                            QStringList());
+                if (!addDocuments(docFiles, engine, QStringList(), namespaceName,
+                                  writer, analyzer))
+                    break;
+            } else {
+                bool bail = false;
+                foreach (const QStringList &attributes, attributeSets) {
+                    const QList<QUrl> docFiles = indexableFiles(&engine,
+                                                                namespaceName, attributes);
+                    if (!addDocuments(docFiles, engine, attributes, namespaceName,
+                                      writer, analyzer)) {
+                        bail = true;
+                        break;
+                    }
+                }
+                if (bail)
+                    break;
+            }
+
+            mutexLocker.relock();
+            if (!m_cancel) {
+                QString path(engine.documentationFileName(namespaceName));
+                indexMap.insert(namespaceName, QFileInfo(path).lastModified());
+                writeIndexMap(engine, indexMap);
+            }
+            mutexLocker.unlock();
+        }
+
+        closeIndexWriter(writer);
+
+        mutexLocker.relock();
+        if (!m_cancel) {
+            mutexLocker.unlock();
+
+            QStringList indexedNamespaces = indexMap.keys();
+            foreach(const QString &namespaceName, indexedNamespaces) {
+                mutexLocker.relock();
+                if (m_cancel)
+                    break;
+                mutexLocker.unlock();
+
+                if (!namespaces.contains(namespaceName)) {
+                    indexMap.remove(namespaceName);
+                    writeIndexMap(engine, indexMap);
+                    removeDocuments(indexPath, namespaceName);
+                }
+            }
+        }
+
 #if !defined(QT_NO_EXCEPTIONS)
     } catch (...) {
-        qWarning("Full Text Search, could not set writer properties.");
-        return;
+        qWarning("%s: Failed because of CLucene exception.", Q_FUNC_INFO);
     }
 #endif
 
-    QStringList namespaces;
-    foreach(const QString &namespaceName, registeredDocs) {
-        mutexLocker.relock();
-        if (m_cancel) {
-            closeIndexWriter(writer);
-            emit indexingFinished();
-            return;
-        }
-        mutexLocker.unlock();
-
-        namespaces.append(namespaceName);
-        if (indexMap.contains(namespaceName))
-            continue;
-
-        const QList<QStringList> attributeSets =
-            engine.filterAttributeSets(namespaceName);
-
-        if (attributeSets.isEmpty()) {
-            const QList<QUrl> docFiles = indexableFiles(&engine, namespaceName,
-                QStringList());
-            if (!addDocuments(docFiles, engine, QStringList(), namespaceName,
-                writer, analyzer))
-                break;
-        } else {
-            bool bail = false;
-            foreach (const QStringList &attributes, attributeSets) {
-                const QList<QUrl> docFiles = indexableFiles(&engine,
-                    namespaceName, attributes);
-                if (!addDocuments(docFiles, engine, attributes, namespaceName,
-                    writer, analyzer)) {
-                    bail = true;
-                    break;
-                }
-            }
-            if (bail)
-                break;
-        }
-
-        mutexLocker.relock();
-        if (!m_cancel) {
-            QString path(engine.documentationFileName(namespaceName));
-            indexMap.insert(namespaceName, QFileInfo(path).lastModified());
-            writeIndexMap(engine, indexMap);
-        }
-        mutexLocker.unlock();
-    }
-
-    closeIndexWriter(writer);
-
-    mutexLocker.relock();
-    if (!m_cancel) {
-        mutexLocker.unlock();
-
-        QStringList indexedNamespaces = indexMap.keys();
-        foreach(const QString &namespaceName, indexedNamespaces) {
-            mutexLocker.relock();
-            if (m_cancel)
-                break;
-            mutexLocker.unlock();
-
-            if (!namespaces.contains(namespaceName)) {
-                indexMap.remove(namespaceName);
-                writeIndexMap(engine, indexMap);
-                removeDocuments(indexPath, namespaceName);
-            }
-        }
-    }
     emit indexingFinished();
 }
@@ -902,7 +895,6 @@
 }
 
-        }   // namespace clucene
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace clucene
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene_p.h
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexwriter_clucene_p.h	(revision 769)
@@ -70,7 +70,6 @@
 class QCLuceneIndexWriter;
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace clucene {
+namespace fulltextsearch {
+namespace clucene {
 
 class QHelpSearchIndexWriter : public QThread
@@ -117,7 +116,7 @@
 };
 
-        }   // namespace clucene
-    }   // namespace fulltextsearch
 }   // namespace clucene
+}   // namespace fulltextsearch
+
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexwriter_default.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexwriter_default.cpp	(revision 769)
@@ -56,7 +56,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace std {
+namespace fulltextsearch {
+namespace std {
 
 Writer::Writer(const QString &path)
@@ -105,5 +104,5 @@
 
     QDataStream docStream(&docFile);
-    foreach(const QStringList list, documentList) {
+    foreach(const QStringList &list, documentList) {
         docStream << list.at(0);
         docStream << list.at(1);
@@ -127,7 +126,7 @@
 void Writer::setIndexFile(const QString &namespaceName, const QString &attributes)
 {
-    QString extention = namespaceName + QLatin1String("@") + attributes;
-    indexFile = indexPath + QLatin1String("/indexdb40.") + extention;
-    documentFile = indexPath + QLatin1String("/indexdoc40.") + extention;
+    QString extension = namespaceName + QLatin1String("@") + attributes;
+    indexFile = indexPath + QLatin1String("/indexdb40.") + extension;
+    documentFile = indexPath + QLatin1String("/indexdoc40.") + extension;
 }
 
@@ -193,5 +192,5 @@
     this->m_indexFilesFolder = indexFilesFolder;
 
-    start(QThread::NormalPriority);
+    start(QThread::LowestPriority);
 }
 
@@ -227,5 +226,5 @@
     QStringList namespaces;
     Writer writer(indexPath);
-    foreach(const QString namespaceName, registeredDocs) {
+    foreach(const QString &namespaceName, registeredDocs) {
         mutex.lock();
         if (m_cancel) {
@@ -243,5 +242,5 @@
             engine.filterAttributeSets(namespaceName);
 
-        foreach (QStringList attributes, attributeSets) {
+        foreach (const QStringList &attributes, attributeSets) {
             // cleanup maybe old or unfinished files
             writer.setIndexFile(namespaceName, attributes.join(QLatin1String("@")));
@@ -267,5 +266,5 @@
             int docNum = 0;
             const QStringList documentsList(documentsSet.toList());
-            foreach(const QString url, documentsList) {
+            foreach(const QString &url, documentsList) {
                 if (m_cancel)
                     return;
@@ -348,5 +347,5 @@
             engine.filterAttributeSets(namespaceName);
 
-        foreach (QStringList attributes, attributeSets) {
+        foreach (const QStringList &attributes, attributeSets) {
             writer.setIndexFile(namespaceName, attributes.join(QLatin1String("@")));
             writer.removeIndex();
@@ -380,7 +379,6 @@
 }
 
-        }   // namespace std
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace std
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchindexwriter_default_p.h
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchindexwriter_default_p.h	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchindexwriter_default_p.h	(revision 769)
@@ -66,7 +66,6 @@
 QT_BEGIN_NAMESPACE
 
-namespace qt {
-    namespace fulltextsearch {
-        namespace std {
+namespace fulltextsearch {
+namespace std {
 
 class Writer
@@ -124,7 +123,6 @@
 };
 
-        }   // namespace std
-    }   // namespace fulltextsearch
-}   // namespace qt
+}   // namespace std
+}   // namespace fulltextsearch
 
 QT_END_NAMESPACE
Index: /trunk/tools/assistant/lib/qhelpsearchquerywidget.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchquerywidget.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchquerywidget.cpp	(revision 769)
@@ -149,5 +149,5 @@
 
         // make sure we won't end up with an empty string
-        foreach (const QString escapeChar, escapableCharsList) {
+        foreach (const QString &escapeChar, escapableCharsList) {
             if (retValue.contains(escapeChar))
                 retValue.replace(escapeChar, QLatin1String(""));
@@ -156,6 +156,6 @@
             return retValue;
 
-        retValue = text; // now realy escape the string...
-        foreach (const QString escapeChar, escapableCharsList) {
+        retValue = text; // now really escape the string...
+        foreach (const QString &escapeChar, escapableCharsList) {
             if (retValue.contains(escapeChar))
                 retValue.replace(escapeChar, escape + escapeChar);
@@ -318,5 +318,5 @@
             if (!lst.isEmpty()) {
                 QStringList fuzzy;
-                foreach (const QString term, lst)
+                foreach (const QString &term, lst)
                     fuzzy += buildTermList(escapeString(term));
                 queryList.append(QHelpSearchQuery(QHelpSearchQuery::FUZZY, fuzzy));
@@ -326,5 +326,5 @@
             if (!lst.isEmpty()) {
                 QStringList without;
-                foreach (const QString term, lst)
+                foreach (const QString &term, lst)
                     without.append(escapeString(term));
                 queryList.append(QHelpSearchQuery(QHelpSearchQuery::WITHOUT, without));
@@ -340,5 +340,5 @@
             if (!lst.isEmpty()) {
                 QStringList all;
-                foreach (const QString term, lst)
+                foreach (const QString &term, lst)
                     all.append(escapeString(term));
                 queryList.append(QHelpSearchQuery(QHelpSearchQuery::ALL, all));
@@ -348,5 +348,5 @@
             if (!lst.isEmpty()) {
                 QStringList atLeast;
-                foreach (const QString term, lst)
+                foreach (const QString &term, lst)
                     atLeast += buildTermList(escapeString(term));
                 queryList.append(QHelpSearchQuery(QHelpSearchQuery::ATLEAST, atLeast));
@@ -534,5 +534,5 @@
 
 /*!
-    Returns a list of querys to use in combination with the search engines
+    Returns a list of queries to use in combination with the search engines
     search(QList<QHelpSearchQuery> &query) function.
 */
Index: /trunk/tools/assistant/lib/qhelpsearchresultwidget.cpp
===================================================================
--- /trunk/tools/assistant/lib/qhelpsearchresultwidget.cpp	(revision 768)
+++ /trunk/tools/assistant/lib/qhelpsearchresultwidget.cpp	(revision 769)
@@ -74,5 +74,5 @@
     void showResultPage(const QList<QHelpSearchEngine::SearchHit> hits)
     {
-        foreach (const QHelpSearchEngine::SearchHit hit, hits)
+        foreach (const QHelpSearchEngine::SearchHit &hit, hits)
             new QTreeWidgetItem(this, QStringList(hit.first) << hit.second);
     }
@@ -119,5 +119,5 @@
                             "documentation is still being indexed!"));
 
-            foreach (const QHelpSearchEngine::SearchHit hit, hits) {
+            foreach (const QHelpSearchEngine::SearchHit &hit, hits) {
                 htmlFile += QString(QLatin1String("<div style=\"text-align:left; font-weight:bold\""
                 "><a href=\"%1\">%2</a><div style=\"color:green; font-weight:normal;"
Index: /trunk/tools/assistant/tools/assistant/centralwidget.cpp
===================================================================
--- /trunk/tools/assistant/tools/assistant/centralwidget.cpp	(revision 768)
+++ /trunk/tools/assistant/tools/assistant/centralwidget.cpp	(revision 769)
@@ -1119,5 +1119,5 @@
 
     QStringList terms;
-    foreach (QHelpSearchQuery query, queryList) {
+    foreach (const QHelpSearchQuery &query, queryList) {
         switch (query.fieldName) {
             default: break;
Index: /trunk/tools/assistant/tools/assistant/doc/assistant.qdocconf
===================================================================
--- /trunk/tools/assistant/tools/assistant/doc/assistant.qdocconf	(revision 768)
+++ /trunk/tools/assistant/tools/assistant/doc/assistant.qdocconf	(revision 769)
@@ -13,4 +13,4 @@
               "<td width=\"30%\" align=\"left\">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
               "<td width=\"40%\" align=\"center\">Trademarks</td>\n" \
-              "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.2</div></td>\n" \
+              "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.3</div></td>\n" \
               "</tr></table></div></address>"
Index: /trunk/tools/assistant/tools/assistant/helpviewer.cpp
===================================================================
--- /trunk/tools/assistant/tools/assistant/helpviewer.cpp	(revision 768)
+++ /trunk/tools/assistant/tools/assistant/helpviewer.cpp	(revision 769)
@@ -152,6 +152,7 @@
     }
 
-    const QByteArray &ba = helpEngine->fileData(url);
-    return new HelpNetworkReply(request, ba.isEmpty() ? " " : ba, mimeType);
+    const QByteArray &data = helpEngine->findFile(url).isValid()
+        ? helpEngine->fileData(url) : QByteArray("File not found!");
+    return new HelpNetworkReply(request, data, mimeType);
 }
 
Index: /trunk/tools/configure/configure.pro
===================================================================
--- /trunk/tools/configure/configure.pro	(revision 768)
+++ /trunk/tools/configure/configure.pro	(revision 769)
@@ -4,6 +4,6 @@
 CONFIG   += console flat
 CONFIG   -= moc qt
-DEFINES  = UNICODE QT_NODLL QT_NO_CODECS QT_NO_TEXTCODEC QT_NO_UNICODETABLES QT_LITE_COMPONENT QT_NO_STL QT_NO_COMPRESS QT_BUILD_QMAKE QT_NO_THREAD QT_NO_QOBJECT _CRT_SECURE_NO_DEPRECATE
-
+DEFINES  = UNICODE QT_NODLL QT_NO_CODECS QT_NO_TEXTCODEC QT_NO_UNICODETABLES QT_LITE_COMPONENT QT_NO_STL QT_NO_COMPRESS QT_NO_THREAD QT_NO_QOBJECT _CRT_SECURE_NO_DEPRECATE
+DEFINES  += QT_BOOTSTRAPPED
 
 win32 : LIBS += -lole32 -ladvapi32
@@ -28,4 +28,5 @@
            $$QT_BUILD_TREE/include \
            $$QT_BUILD_TREE/include/QtCore \
+           $$QT_BUILD_TREE/tools/shared
 
 HEADERS  = configureapp.h environment.h tools.h\
@@ -59,5 +60,9 @@
            $$QT_SOURCE_TREE/src/corelib/tools/qstringlist.h \
            $$QT_SOURCE_TREE/src/corelib/tools/qstringmatcher.h \
-           $$QT_SOURCE_TREE/src/corelib/tools/qunicodetables_p.h
+           $$QT_SOURCE_TREE/src/corelib/tools/qunicodetables_p.h \
+           $$QT_SOURCE_TREE/src/corelib/xml/qxmlstream.h \
+           $$QT_SOURCE_TREE/src/corelib/xml/qxmlutils_p.h \
+           $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.h \
+           $$QT_SOURCE_TREE/tools/shared/windows/registry.h
 
 
@@ -103,5 +108,9 @@
            $$QT_SOURCE_TREE/src/corelib/tools/qrect.cpp \
            $$QT_SOURCE_TREE/src/corelib/kernel/qmetatype.cpp \
-           $$QT_SOURCE_TREE/src/corelib/global/qmalloc.cpp
+           $$QT_SOURCE_TREE/src/corelib/global/qmalloc.cpp \
+           $$QT_SOURCE_TREE/src/corelib/xml/qxmlstream.cpp \
+           $$QT_SOURCE_TREE/src/corelib/xml/qxmlutils.cpp \
+           $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.cpp \
+           $$QT_SOURCE_TREE/tools/shared/windows/registry.cpp
 
 win32:SOURCES += $$QT_SOURCE_TREE/src/corelib/io/qfsfileengine_win.cpp
Index: /trunk/tools/configure/configureapp.cpp
===================================================================
--- /trunk/tools/configure/configureapp.cpp	(revision 768)
+++ /trunk/tools/configure/configureapp.cpp	(revision 769)
@@ -248,5 +248,5 @@
     dictionary[ "PHONON_BACKEND" ]  = "yes";
     dictionary[ "MULTIMEDIA" ]      = "yes";
-    dictionary[ "AUDIO_BACKEND" ]   = "yes";
+    dictionary[ "AUDIO_BACKEND" ]   = "auto";
     dictionary[ "DIRECTSHOW" ]      = "no";
     dictionary[ "WEBKIT" ]          = "auto";
@@ -318,5 +318,4 @@
     dictionary[ "DBUS" ]            = "auto";
     dictionary[ "S60" ]             = "yes";
-    dictionary[ "SYMBIAN_DEFFILES" ] = "yes";
 
     dictionary[ "STYLE_WINDOWS" ]   = "yes";
@@ -971,4 +970,8 @@
                 break;
             dictionary[ "QT_LIBINFIX" ] = configCmdLine.at(i);
+            if (dictionary.contains("XQMAKESPEC") && dictionary["XQMAKESPEC"].startsWith("symbian")) {
+                dictionary[ "QT_INSTALL_PLUGINS" ] =
+                    QString("\\resource\\qt%1\\plugins").arg(dictionary[ "QT_LIBINFIX" ]);
+            }
         } else if( configCmdLine.at(i) == "-D" ) {
             ++i;
@@ -1478,4 +1481,5 @@
         dictionary[ "QT_GLIB" ]             = "no";
         dictionary[ "S60" ]                 = "yes";
+        dictionary[ "SYMBIAN_DEFFILES" ]    = "yes";
         // iconv makes makes apps start and run ridiculously slowly in symbian emulator (HW not tested)
         // iconv_open seems to return -1 always, so something is probably missing from the platform.
@@ -1485,4 +1489,5 @@
         dictionary[ "QT_INSTALL_PREFIX" ]   = "";
         dictionary[ "QT_INSTALL_PLUGINS" ]  = "\\resource\\qt\\plugins";
+        dictionary[ "QT_INSTALL_TRANSLATIONS" ]  = "\\resource\\qt\\translations";
         dictionary[ "ARM_FPU_TYPE" ]        = "softvfp";
         dictionary[ "SQL_SQLITE" ]          = "yes";
@@ -2066,4 +2071,50 @@
     } else if (part == "DECLARATIVE") {
         available = QFile::exists(sourcePath + "/src/declarative/qml/qmlcomponent.h");
+    } else if (part == "AUDIO_BACKEND") {
+        available = true;
+        if (dictionary.contains("XQMAKESPEC") && dictionary["XQMAKESPEC"].startsWith("symbian")) {
+            QString epocRoot = Environment::symbianEpocRoot();
+            const QDir epocRootDir(epocRoot);
+            if (epocRootDir.exists()) {
+                QStringList paths;
+                paths << "epoc32/release/armv5/lib/mmfdevsound.dso"
+                      << "epoc32/release/armv5/lib/mmfdevsound.lib"
+                      << "epoc32/release/winscw/udeb/mmfdevsound.dll"
+                      << "epoc32/release/winscw/udeb/mmfdevsound.lib"
+                      << "epoc32/include/mmf/server/sounddevice.h";
+
+                QStringList::iterator i = paths.begin();
+                while (i != paths.end()) {
+                    const QString &path = epocRoot + *i;
+                    if (QFile::exists(path))
+                        i = paths.erase(i);
+                    else
+                        ++i;
+                }
+
+                available = (paths.size() == 0);
+                if (!available) {
+                    if (epocRoot.isNull() || epocRoot == "")
+                        epocRoot = "<empty string>";
+                    cout << endl
+                         << "The QtMultimedia audio backend will not be built because required" << endl
+                         << "support for CMMFDevSound was not found in the SDK." << endl
+                         << "The SDK which was examined was located at the following path:" << endl
+                         << "    " << epocRoot << endl
+                         << "The following required files were missing from the SDK:" << endl;
+                    QString path;
+                    foreach (path, paths)
+                        cout << "    " << path << endl;
+                    cout << endl;
+                }
+            } else {
+                cout << endl
+                     << "The SDK root was determined to be '" << epocRoot << "'." << endl
+                     << "This directory was not found, so the SDK could not be checked for" << endl
+                     << "CMMFDevSound support.  The QtMultimedia audio backend will therefore" << endl
+                     << "not be built." << endl << endl;
+                available = false;
+            }
+        }
     }
 
@@ -2154,4 +2205,6 @@
     if (dictionary["DECLARATIVE"] == "auto")
         dictionary["DECLARATIVE"] = checkAvailability("DECLARATIVE") ? "yes" : "no";
+    if (dictionary["AUDIO_BACKEND"] == "auto")
+        dictionary["AUDIO_BACKEND"] = checkAvailability("AUDIO_BACKEND") ? "yes" : "no";
 
     // Qt/WinCE remote test application
@@ -2266,22 +2319,29 @@
     QString build32Key = buildKey + "Windows " + compiler + " %1 " + build_options.join(" ") + " " + build_defines.join(" ");
     QString build64Key = buildKey + "Windows x64 " + compiler + " %1 " + build_options.join(" ") + " " + build_defines.join(" ");
+    QString buildSymbianKey = buildKey + "Symbian " + build_options.join(" ") + " " + build_defines.join(" ");
     build32Key = build32Key.simplified();
     build64Key = build64Key.simplified();
-    build32Key.prepend("#  define ");
-    build64Key.prepend("#  define ");
-
-    QString buildkey = // Debug builds
-                       "#if (defined(_DEBUG) || defined(DEBUG))\n"
-                       "# if (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))\n"
+    buildSymbianKey = buildSymbianKey.simplified();
+    build32Key.prepend("#   define ");
+    build64Key.prepend("#   define ");
+    buildSymbianKey.prepend("# define ");
+
+    QString buildkey = "#if defined(__SYMBIAN32__)\n"
+                       + buildSymbianKey + "\"\n"
+                       "#else\n"
+                       // Debug builds
+                       "# if (defined(_DEBUG) || defined(DEBUG))\n"
+                       "#  if (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))\n"
                        + build64Key.arg("debug") + "\"\n"
+                       "#  else\n"
+                       + build32Key.arg("debug") + "\"\n"
+                       "#  endif\n"
                        "# else\n"
-                       + build32Key.arg("debug") + "\"\n"
-                       "# endif\n"
-                       "#else\n"
                        // Release builds
-                       "# if (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))\n"
+                       "#  if (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))\n"
                        + build64Key.arg("release") + "\"\n"
-                       "# else\n"
+                       "#  else\n"
                        + build32Key.arg("release") + "\"\n"
+                       "#  endif\n"
                        "# endif\n"
                        "#endif\n";
@@ -2968,4 +3028,6 @@
             qconfigList += "QT_NO_PRINTER";
             qconfigList += "QT_NO_SYSTEMTRAYICON";
+            if (dictionary.contains("QT_LIBINFIX"))
+                tmpStream << QString("#define QT_LIBINFIX \"%1\"").arg(dictionary["QT_LIBINFIX"]) << endl;
         }
 
@@ -3646,5 +3708,5 @@
                     txt << "all:\n";
                     txt << "\t" << args.join(" ") << "\n";
-                    txt << "\t" << dictionary[ "MAKE" ] << " -f " << it->target << "\n";
+                    txt << "\t\"$(MAKE)\" -$(MAKEFLAGS) -f " << it->target << "\n";
                     txt << "first: all\n";
                     txt << "qmake:\n";
Index: /trunk/tools/configure/environment.cpp
===================================================================
--- /trunk/tools/configure/environment.cpp	(revision 768)
+++ /trunk/tools/configure/environment.cpp	(revision 769)
@@ -61,4 +61,6 @@
 #endif
 
+#include <symbian/epocroot.h> // from tools/shared
+#include <windows/registry.h> // from tools/shared
 
 QT_BEGIN_NAMESPACE
@@ -95,124 +97,4 @@
         ++i;
     return &(compiler_info[i]);
-}
-
-/*!
-    Returns the path part of a registry key.
-    Ei.
-        For a key
-            "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
-        it returns
-            "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\"
-*/
-QString Environment::keyPath(const QString &rKey)
-{
-    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
-    if (idx == -1)
-        return QString();
-    return rKey.left(idx + 1);
-}
-
-/*!
-    Returns the name part of a registry key.
-    Ei.
-        For a key
-            "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
-        it returns
-            "ProductDir"
-*/
-QString Environment::keyName(const QString &rKey)
-{
-    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
-    if (idx == -1)
-        return rKey;
-
-    QString res(rKey.mid(idx + 1));
-    if (res == "Default" || res == ".")
-        res = "";
-    return res;
-}
-
-/*!
-    Returns a registry keys value in string form.
-    If the registry key does not exist, or cannot be accessed, a
-    QString() is returned.
-*/
-QString Environment::readRegistryKey(HKEY parentHandle, const QString &rSubkey)
-{
-#ifndef Q_OS_WIN32
-    return QString();
-#else
-    QString rSubkeyName = keyName(rSubkey);
-    QString rSubkeyPath = keyPath(rSubkey);
-
-    HKEY handle = 0;
-    LONG res = RegOpenKeyEx(parentHandle, (wchar_t*)rSubkeyPath.utf16(), 0, KEY_READ, &handle);
-    if (res != ERROR_SUCCESS)
-        return QString();
-
-    // get the size and type of the value
-    DWORD dataType;
-    DWORD dataSize;
-    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, &dataType, 0, &dataSize);
-    if (res != ERROR_SUCCESS) {
-        RegCloseKey(handle);
-        return QString();
-    }
-
-    // get the value
-    QByteArray data(dataSize, 0);
-    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, 0,
-                           reinterpret_cast<unsigned char*>(data.data()), &dataSize);
-    if (res != ERROR_SUCCESS) {
-        RegCloseKey(handle);
-        return QString();
-    }
-
-    QString result;
-    switch (dataType) {
-        case REG_EXPAND_SZ:
-        case REG_SZ: {
-            result = QString::fromWCharArray(((const wchar_t *)data.constData()));
-            break;
-        }
-
-        case REG_MULTI_SZ: {
-            QStringList l;
-            int i = 0;
-            for (;;) {
-                QString s = QString::fromWCharArray((const wchar_t *)data.constData() + i);
-                i += s.length() + 1;
-
-                if (s.isEmpty())
-                    break;
-                l.append(s);
-            }
-            result = l.join(", ");
-            break;
-        }
-
-        case REG_NONE:
-        case REG_BINARY: {
-            result = QString::fromWCharArray((const wchar_t *)data.constData(), data.size() / 2);
-            break;
-        }
-
-        case REG_DWORD_BIG_ENDIAN:
-        case REG_DWORD: {
-            Q_ASSERT(data.size() == sizeof(int));
-            int i;
-            memcpy((char*)&i, data.constData(), sizeof(int));
-            result = QString::number(i);
-            break;
-        }
-
-        default:
-            qWarning("QSettings: unknown data %d type in windows registry", dataType);
-            break;
-    }
-
-    RegCloseKey(handle);
-    return result;
-#endif
 }
 
@@ -580,3 +462,9 @@
 }
 
+QString Environment::symbianEpocRoot()
+{
+    // Call function defined in tools/shared/symbian/epocroot.h
+    return ::epocRoot();
+}
+
 QT_END_NAMESPACE
Index: /trunk/tools/configure/environment.h
===================================================================
--- /trunk/tools/configure/environment.h	(revision 768)
+++ /trunk/tools/configure/environment.h	(revision 769)
@@ -72,11 +72,10 @@
     static bool rmdir(const QString &name);
 
+    static QString symbianEpocRoot();
+
 private:
     static Compiler detectedCompiler;
 
     static CompilerInfo *compilerInfo(Compiler compiler);
-    static QString keyPath(const QString &rKey);
-    static QString keyName(const QString &rKey);
-    static QString readRegistryKey(HKEY parentHandle, const QString &rSubkey);
 };
 
Index: /trunk/tools/configure/tools.cpp
===================================================================
--- /trunk/tools/configure/tools.cpp	(revision 768)
+++ /trunk/tools/configure/tools.cpp	(revision 769)
@@ -147,4 +147,5 @@
             dictionary["EDITION"] = "Evaluation";
             dictionary["QT_EDITION"] = "QT_EDITION_EVALUATION";
+            licenseType = "Evaluation";
         }
     }
@@ -213,5 +214,5 @@
 
     // Override for evaluation licenses
-    if (dictionary["Edition"] == "Evaluation")
+    if (dictionary["EDITION"] == "Evaluation")
         dictionary["LICENSE_EXTENSION"] = "-EVALUATION";
 
Index: /trunk/tools/designer/src/components/formeditor/formwindow.cpp
===================================================================
--- /trunk/tools/designer/src/components/formeditor/formwindow.cpp	(revision 768)
+++ /trunk/tools/designer/src/components/formeditor/formwindow.cpp	(revision 769)
@@ -2220,4 +2220,9 @@
         }
 
+        if (manager->actionLower()->isEnabled()) {
+            popup->addAction(manager->actionLower());
+            popup->addAction(manager->actionRaise());
+            popup->addSeparator();
+        }
         popup->addAction(manager->actionCut());
         popup->addAction(manager->actionCopy());
Index: /trunk/tools/designer/src/components/formeditor/formwindow.h
===================================================================
--- /trunk/tools/designer/src/components/formeditor/formwindow.h	(revision 768)
+++ /trunk/tools/designer/src/components/formeditor/formwindow.h	(revision 769)
@@ -279,6 +279,4 @@
     void checkPreviewGeometry(QRect &r);
 
-    void finishContextMenu(QWidget *w, QWidget *menuParent, QContextMenuEvent *e);
-
     bool handleContextMenu(QWidget *widget, QWidget *managedWidget, QContextMenuEvent *e);
     bool handleMouseButtonDblClickEvent(QWidget *widget, QWidget *managedWidget, QMouseEvent *e);
Index: /trunk/tools/designer/src/components/formeditor/qdesigner_resource.cpp
===================================================================
--- /trunk/tools/designer/src/components/formeditor/qdesigner_resource.cpp	(revision 768)
+++ /trunk/tools/designer/src/components/formeditor/qdesigner_resource.cpp	(revision 769)
@@ -1447,5 +1447,5 @@
 
     QList<QWidget*> tabOrder;
-    foreach (QString widgetName, tabStops->elementTabStop()) {
+    foreach (const QString &widgetName, tabStops->elementTabStop()) {
         if (QWidget *w = qFindChild<QWidget*>(widget, widgetName)) {
             tabOrder.append(w);
@@ -2419,5 +2419,5 @@
     if (resourceSet) {
         const QStringList activePaths = resourceSet->activeQrcPaths();
-        foreach (QString path, activePaths) {
+        foreach (const QString &path, activePaths) {
             if (qrcPaths.contains(path)) {
                 DomResource *dom_res = new DomResource;
Index: /trunk/tools/designer/src/components/propertyeditor/designerpropertymanager.h
===================================================================
--- /trunk/tools/designer/src/components/propertyeditor/designerpropertymanager.h	(revision 768)
+++ /trunk/tools/designer/src/components/propertyeditor/designerpropertymanager.h	(revision 769)
@@ -103,5 +103,5 @@
     Q_OBJECT
 public:
-    DesignerPropertyManager(QDesignerFormEditorInterface *core, QObject *parent = 0);
+    explicit DesignerPropertyManager(QDesignerFormEditorInterface *core, QObject *parent = 0);
     ~DesignerPropertyManager();
 
Index: /trunk/tools/designer/src/designer/qdesigner_actions.cpp
===================================================================
--- /trunk/tools/designer/src/designer/qdesigner_actions.cpp	(revision 768)
+++ /trunk/tools/designer/src/designer/qdesigner_actions.cpp	(revision 769)
@@ -581,5 +581,5 @@
 
     bool atLeastOne = false;
-    foreach (QString fileName, fileNames) {
+    foreach (const QString &fileName, fileNames) {
         if (readInForm(fileName) && !atLeastOne)
             atLeastOne = true;
@@ -870,5 +870,5 @@
                 removeBackup(backupFile);
                 fi.setFile(fileName);
-                backupFile = QString();
+                backupFile.clear();
                 if (fi.exists())
                     backupFile = createBackup(fileName);
Index: /trunk/tools/designer/src/designer/qdesigner_server.cpp
===================================================================
--- /trunk/tools/designer/src/designer/qdesigner_server.cpp	(revision 768)
+++ /trunk/tools/designer/src/designer/qdesigner_server.cpp	(revision 769)
@@ -84,5 +84,5 @@
     if(sSocket->waitForConnected(3000))
     {
-        foreach(QString file, files)
+        foreach(const QString &file, files)
         {
             QFileInfo fi(file);
@@ -97,7 +97,6 @@
 void QDesignerServer::readFromClient()
 {
-    QString file = QString();
     while (m_socket->canReadLine()) {
-        file = QString::fromUtf8(m_socket->readLine());
+        QString file = QString::fromUtf8(m_socket->readLine());
         if (!file.isNull()) {
             file.remove(QLatin1Char('\n'));
@@ -144,5 +143,4 @@
 void QDesignerClient::readFromSocket()
 {
-    QString file = QString();
     while (m_socket->canReadLine()) {
         QString file = QString::fromUtf8(m_socket->readLine());
Index: /trunk/tools/designer/src/designer/qdesigner_server.h
===================================================================
--- /trunk/tools/designer/src/designer/qdesigner_server.h	(revision 768)
+++ /trunk/tools/designer/src/designer/qdesigner_server.h	(revision 769)
@@ -54,5 +54,5 @@
     Q_OBJECT
 public:
-    QDesignerServer(QObject *parent = 0);
+    explicit QDesignerServer(QObject *parent = 0);
     virtual ~QDesignerServer();
 
@@ -75,5 +75,5 @@
     Q_OBJECT
 public:
-    QDesignerClient(quint16 port, QObject *parent = 0);
+    explicit QDesignerClient(quint16 port, QObject *parent = 0);
     virtual ~QDesignerClient();
 
Index: /trunk/tools/designer/src/designer/versiondialog.cpp
===================================================================
--- /trunk/tools/designer/src/designer/versiondialog.cpp	(revision 768)
+++ /trunk/tools/designer/src/designer/versiondialog.cpp	(revision 769)
@@ -114,6 +114,5 @@
             m_path.lineTo(me->pos());
             bool gotIt = true;
-            QPoint pt;
-            foreach(pt, hitPoints) {
+            foreach(const QPoint &pt, hitPoints) {
                 if (!m_path.contains(pt)) {
                     gotIt = false;
@@ -122,5 +121,5 @@
             }
             if (gotIt) {
-                foreach(pt, missPoints) {
+                foreach(const QPoint &pt, missPoints) {
                     if (m_path.contains(pt)) {
                         gotIt = false;
Index: /trunk/tools/designer/src/lib/shared/actioneditor.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/actioneditor.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/actioneditor.cpp	(revision 769)
@@ -429,5 +429,5 @@
 }
 
-// Set an intial property and mark it as changed in the sheet
+// Set an initial property and mark it as changed in the sheet
 static void setInitialProperty(QDesignerPropertySheetExtension *sheet, const QString &name, const QVariant &value)
 {
Index: /trunk/tools/designer/src/lib/shared/actionrepository.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/actionrepository.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/actionrepository.cpp	(revision 769)
@@ -78,11 +78,4 @@
 }
 
-static QIcon fixActionIcon(const QIcon &icon)
-{
-    if (icon.isNull())
-        return qdesigner_internal::emptyIcon();
-    return icon;
-}
-
 namespace qdesigner_internal {
 
@@ -90,4 +83,5 @@
 ActionModel::ActionModel(QWidget *parent ) :
     QStandardItemModel(parent),
+    m_emptyIcon(emptyIcon()),
     m_core(0)
 {
@@ -128,5 +122,5 @@
        list += item(row, i);
 
-    setItems(m_core, actionOfItem(list.front()), list);
+    setItems(m_core, actionOfItem(list.front()), m_emptyIcon, list);
 }
 
@@ -151,5 +145,5 @@
         items.push_back(item);
     }
-    setItems(m_core, action, items);
+    setItems(m_core, action, m_emptyIcon, items);
     appendRow(items);
     return indexFromItem(items.front());
@@ -186,5 +180,7 @@
 }
 
-void  ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action, QStandardItemList &sl)
+void  ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action,
+                            const QIcon &defaultIcon,
+                            QStandardItemList &sl)
 {
 
@@ -201,5 +197,8 @@
     QStandardItem *item =  sl[NameColumn];
     item->setText(action->objectName());
-    item->setIcon(fixActionIcon(action->icon()));
+    QIcon icon = action->icon();
+    if (icon.isNull())
+        icon = defaultIcon;
+    item->setIcon(icon);
     item->setToolTip(firstTooltip);
     item->setWhatsThis(firstTooltip);
@@ -245,5 +244,5 @@
 
     QSet<QAction*> actions;
-    foreach (const  QModelIndex &index, indexes)
+    foreach (const QModelIndex &index, indexes)
         if (QStandardItem *item = itemFromIndex(index))
             if (QAction *action = actionOfItem(item))
Index: /trunk/tools/designer/src/lib/shared/actionrepository_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/actionrepository_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/actionrepository_p.h	(revision 769)
@@ -60,4 +60,5 @@
 #include <QtGui/QListView>
 #include <QtGui/QStackedWidget>
+#include <QtGui/QIcon>
 
 QT_BEGIN_NAMESPACE
@@ -111,8 +112,12 @@
 
 private:
+    typedef QList<QStandardItem *> QStandardItemList;
+
     void initializeHeaders();
-
-    typedef QList<QStandardItem *> QStandardItemList;
-    static void setItems(QDesignerFormEditorInterface *core, QAction *a, QStandardItemList &sl);
+    static void setItems(QDesignerFormEditorInterface *core, QAction *a,
+                         const QIcon &defaultIcon,
+                         QStandardItemList &sl);
+
+    const QIcon m_emptyIcon;
 
     QDesignerFormEditorInterface *m_core;
Index: /trunk/tools/designer/src/lib/shared/connectionedit_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/connectionedit_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/connectionedit_p.h	(revision 769)
@@ -88,5 +88,5 @@
     public:
         enum Type { Source, Target };
-        EndPoint(Connection *_con = 0, Type _type = Source) : con(_con), type(_type) {}
+        explicit EndPoint(Connection *_con = 0, Type _type = Source) : con(_con), type(_type) {}
         bool isNull() const { return con == 0; }
         bool operator == (const EndPoint &other) const { return con == other.con && type == other.type; }
Index: /trunk/tools/designer/src/lib/shared/filterwidget_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/filterwidget_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/filterwidget_p.h	(revision 769)
@@ -67,5 +67,5 @@
 
 /* A line edit that displays a grayed hintText (like "Type Here to Filter")
- * when not focussed and empty. When connecting to the changed signals and
+ * when not focused and empty. When connecting to the changed signals and
  * querying text, one has to be aware that the text is set to that hint
  * text if isShowingHintText() returns true (that is, does not contain
Index: /trunk/tools/designer/src/lib/shared/iconloader.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/iconloader.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/iconloader.cpp	(revision 769)
@@ -61,5 +61,5 @@
         << (QString::fromUtf8(":/trolltech/formeditor/images/designer_") + name);
 
-    foreach (QString f, candidates) {
+    foreach (const QString &f, candidates) {
         if (QFile::exists(f))
             return QIcon(f);
@@ -71,6 +71,5 @@
 QDESIGNER_SHARED_EXPORT QIcon emptyIcon()
 {
-    static const QIcon empty_icon(QLatin1String(":/trolltech/formeditor/images/emptyicon.png"));
-    return  empty_icon;
+    return QIcon(QLatin1String(":/trolltech/formeditor/images/emptyicon.png"));
 }
 
Index: /trunk/tools/designer/src/lib/shared/iconselector_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/iconselector_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/iconselector_p.h	(revision 769)
@@ -77,5 +77,5 @@
     Q_OBJECT
 
-    LanguageResourceDialog(QDesignerResourceBrowserInterface *rb, QWidget *parent = 0);
+    explicit LanguageResourceDialog(QDesignerResourceBrowserInterface *rb, QWidget *parent = 0);
 
 public:
Index: /trunk/tools/designer/src/lib/shared/plugindialog.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/plugindialog.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/plugindialog.cpp	(revision 769)
@@ -106,5 +106,5 @@
         QFont boldFont = topLevelItem->font(0);
 
-        foreach (QString fileName, fileNames) {
+        foreach (const QString &fileName, fileNames) {
             QPluginLoader loader(fileName);
             const QFileInfo fileInfo(fileName);
@@ -128,5 +128,5 @@
         QTreeWidgetItem *topLevelItem = setTopLevelItem(QLatin1String("Failed Plugins"));
         const QFont boldFont = topLevelItem->font(0);
-        foreach (const QString plugin, notLoadedPlugins) {
+        foreach (const QString &plugin, notLoadedPlugins) {
             const QString failureReason = pluginManager->failureReason(plugin);
             QTreeWidgetItem *pluginItem = setPluginItem(topLevelItem, plugin, boldFont);
Index: /trunk/tools/designer/src/lib/shared/qdesigner_introspection.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_introspection.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_introspection.cpp	(revision 769)
@@ -64,5 +64,5 @@
 {
     if (!c)
-        return QString::null;
+        return QString();
     return QString::fromUtf8(c);
 }
Index: /trunk/tools/designer/src/lib/shared/qdesigner_menu.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_menu.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_menu.cpp	(revision 769)
@@ -89,4 +89,5 @@
 QDesignerMenu::QDesignerMenu(QWidget *parent) :
     QMenu(parent),
+    m_subMenuPixmap(QPixmap(QLatin1String(":/trolltech/formeditor/images/submenu.png"))),
     m_currentIndex(0),
     m_addItem(new SpecialMenuAction(this)),
@@ -557,9 +558,8 @@
 QRect QDesignerMenu::subMenuPixmapRect(QAction *action) const
 {
-    static const QPixmap pm(QLatin1String(":/trolltech/formeditor/images/submenu.png"));
     const QRect g = actionGeometry(action);
-    const int x = layoutDirection() == Qt::LeftToRight ? (g.right() - pm.width() - 2) : 2;
-    const int y = g.top() + (g.height() - pm.height())/2 + 1;
-    return QRect(x, y, pm.width(), pm.height());
+    const int x = layoutDirection() == Qt::LeftToRight ? (g.right() - m_subMenuPixmap.width() - 2) : 2;
+    const int y = g.top() + (g.height() - m_subMenuPixmap.height())/2 + 1;
+    return QRect(x, y, m_subMenuPixmap.width(), m_subMenuPixmap.height());
 }
 
@@ -598,6 +598,5 @@
             p.fillRect(g, lg);
         } else if (hasSubMenuPixmap(a)) {
-            static const QPixmap pm(QLatin1String(":/trolltech/formeditor/images/submenu.png"));
-            p.drawPixmap(subMenuPixmapRect(a).topLeft(), pm);
+            p.drawPixmap(subMenuPixmapRect(a).topLeft(), m_subMenuPixmap);
         }
     }
Index: /trunk/tools/designer/src/lib/shared/qdesigner_menu_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_menu_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_menu_p.h	(revision 769)
@@ -58,4 +58,5 @@
 #include <QtGui/QAction>
 #include <QtGui/QMenu>
+#include <QtGui/QPixmap>
 #include <QtCore/QHash>
 
@@ -184,4 +185,5 @@
     bool hideSubMenuOnCursorKey();
     bool showSubMenuOnCursorKey();
+    const QPixmap m_subMenuPixmap;
 
     QPoint m_startPosition;
Index: /trunk/tools/designer/src/lib/shared/qdesigner_objectinspector_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_objectinspector_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_objectinspector_p.h	(revision 769)
@@ -86,5 +86,5 @@
     Q_OBJECT
 public:
-    QDesignerObjectInspector(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    explicit QDesignerObjectInspector(QWidget *parent = 0, Qt::WindowFlags flags = 0);
 
     // Select a qobject unmanaged by form window
Index: /trunk/tools/designer/src/lib/shared/qdesigner_promotiondialog_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_promotiondialog_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_promotiondialog_p.h	(revision 769)
@@ -81,7 +81,7 @@
         Q_OBJECT
     public:
-        NewPromotedClassPanel(const QStringList &baseClasses,
-                              int selectedBaseClass = -1,
-                               QWidget *parent = 0);
+        explicit NewPromotedClassPanel(const QStringList &baseClasses,
+                                       int selectedBaseClass = -1,
+                                       QWidget *parent = 0);
 
         signals:
@@ -115,8 +115,8 @@
         enum Mode { ModeEdit, ModeEditChooseClass };
 
-        QDesignerPromotionDialog(QDesignerFormEditorInterface *core,
-                                 QWidget *parent = 0,
-                                 const QString &promotableWidgetClassName = QString(),
-                                 QString *promoteTo = 0);
+        explicit QDesignerPromotionDialog(QDesignerFormEditorInterface *core,
+                                          QWidget *parent = 0,
+                                          const QString &promotableWidgetClassName = QString(),
+                                          QString *promoteTo = 0);
         // Return an alphabetically ordered list of base class names for adding new classes.
         static const QStringList &baseClassNames(const QDesignerPromotionInterface *promotion);
Index: /trunk/tools/designer/src/lib/shared/qdesigner_propertyeditor_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_propertyeditor_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_propertyeditor_p.h	(revision 769)
@@ -70,5 +70,5 @@
     Q_OBJECT
 public:
-    QDesignerPropertyEditor(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    explicit QDesignerPropertyEditor(QWidget *parent = 0, Qt::WindowFlags flags = 0);
 
     // A pair <ValidationMode, bool isTranslatable>.
Index: /trunk/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp	(revision 769)
@@ -676,5 +676,5 @@
         const QStringList parameterNames = qVariantValue<QStringList>(selectedItem->data(0, Qt::UserRole));
 
-        // TODO: Check wether signal is connected to slot
+        // TODO: Check whether signal is connected to slot
         integr->emitNavigateToSlot(objectName, signalSignature, parameterNames);
     }
Index: /trunk/tools/designer/src/lib/shared/qdesigner_toolbar.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_toolbar.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_toolbar.cpp	(revision 769)
@@ -449,5 +449,5 @@
 }
 
-//that's a trick to get acces to the initStyleOption which is a protected member
+//that's a trick to get access to the initStyleOption which is a protected member
 class FriendlyToolBar : public QToolBar {
 public:
Index: /trunk/tools/designer/src/lib/shared/qdesigner_utils_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_utils_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_utils_p.h	(revision 769)
@@ -299,5 +299,5 @@
     Q_OBJECT
 public:
-    DesignerIconCache(DesignerPixmapCache *pixmapCache, QObject *parent = 0);
+    explicit DesignerIconCache(DesignerPixmapCache *pixmapCache, QObject *parent = 0);
     QIcon icon(const PropertySheetIconValue &value) const;
     void clear();
@@ -314,5 +314,5 @@
 {
 public:
-    PropertySheetStringValue(const QString &value = QString(),
+    explicit PropertySheetStringValue(const QString &value = QString(),
                              bool translatable = true,
                              const QString &disambiguation = QString(),
@@ -346,9 +346,9 @@
 {
 public:
-    PropertySheetKeySequenceValue(const QKeySequence &value = QKeySequence(),
+    explicit PropertySheetKeySequenceValue(const QKeySequence &value = QKeySequence(),
                                   bool translatable = true,
                                   const QString &disambiguation = QString(),
                                   const QString &comment = QString());
-    PropertySheetKeySequenceValue(const QKeySequence::StandardKey &standardKey,
+    explicit PropertySheetKeySequenceValue(const QKeySequence::StandardKey &standardKey,
                                   bool translatable = true,
                                   const QString &disambiguation = QString(),
Index: /trunk/tools/designer/src/lib/shared/qdesigner_widgetbox_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qdesigner_widgetbox_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qdesigner_widgetbox_p.h	(revision 769)
@@ -71,5 +71,5 @@
     enum LoadMode { LoadMerge, LoadReplace, LoadCustomWidgetsOnly };
 
-    QDesignerWidgetBox(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    explicit QDesignerWidgetBox(QWidget *parent = 0, Qt::WindowFlags flags = 0);
 
     LoadMode loadMode() const;
Index: /trunk/tools/designer/src/lib/shared/qtresourceview_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/qtresourceview_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/qtresourceview_p.h	(revision 769)
@@ -69,5 +69,5 @@
     Q_OBJECT
 public:
-    QtResourceView(QDesignerFormEditorInterface *core, QWidget *parent = 0);
+    explicit QtResourceView(QDesignerFormEditorInterface *core, QWidget *parent = 0);
     ~QtResourceView();
 
@@ -121,5 +121,5 @@
     Q_OBJECT
 public:
-    QtResourceViewDialog(QDesignerFormEditorInterface *core, QWidget *parent = 0);
+    explicit QtResourceViewDialog(QDesignerFormEditorInterface *core, QWidget *parent = 0);
     virtual ~QtResourceViewDialog();
 
Index: /trunk/tools/designer/src/lib/shared/richtexteditor_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/richtexteditor_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/richtexteditor_p.h	(revision 769)
@@ -73,5 +73,5 @@
     Q_OBJECT
 public:
-    RichTextEditorDialog(QDesignerFormEditorInterface *core, QWidget *parent = 0);
+    explicit RichTextEditorDialog(QDesignerFormEditorInterface *core, QWidget *parent = 0);
     ~RichTextEditorDialog();
 
Index: /trunk/tools/designer/src/lib/shared/shared_settings.cpp
===================================================================
--- /trunk/tools/designer/src/lib/shared/shared_settings.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/shared_settings.cpp	(revision 769)
@@ -162,5 +162,5 @@
     // get template paths excluding internal ones
     QStringList rc = formTemplatePaths();
-    foreach (QString internalTemplatePath, defaultFormTemplatePaths()) {
+    foreach (const QString &internalTemplatePath, defaultFormTemplatePaths()) {
         const int index = rc.indexOf(internalTemplatePath);
         if (index != -1)
Index: /trunk/tools/designer/src/lib/shared/textpropertyeditor_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/textpropertyeditor_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/textpropertyeditor_p.h	(revision 769)
@@ -91,5 +91,5 @@
         };
 
-        TextPropertyEditor(QWidget *parent = 0, EmbeddingMode embeddingMode = EmbeddingNone, TextPropertyValidationMode validationMode = ValidationMultiLine);
+        explicit TextPropertyEditor(QWidget *parent = 0, EmbeddingMode embeddingMode = EmbeddingNone, TextPropertyValidationMode validationMode = ValidationMultiLine);
 
         TextPropertyValidationMode textPropertyValidationMode() const { return m_validationMode; }
Index: /trunk/tools/designer/src/lib/shared/widgetdatabase_p.h
===================================================================
--- /trunk/tools/designer/src/lib/shared/widgetdatabase_p.h	(revision 768)
+++ /trunk/tools/designer/src/lib/shared/widgetdatabase_p.h	(revision 769)
@@ -75,6 +75,6 @@
 {
 public:
-    WidgetDataBaseItem(const QString &name = QString(),
-                       const QString &group = QString());
+    explicit WidgetDataBaseItem(const QString &name = QString(),
+                                const QString &group = QString());
 
     QString name() const;
@@ -160,5 +160,5 @@
     Q_OBJECT
 public:
-    WidgetDataBase(QDesignerFormEditorInterface *core, QObject *parent = 0);
+    explicit WidgetDataBase(QDesignerFormEditorInterface *core, QObject *parent = 0);
     virtual ~WidgetDataBase();
 
Index: /trunk/tools/designer/src/lib/uilib/abstractformbuilder.cpp
===================================================================
--- /trunk/tools/designer/src/lib/uilib/abstractformbuilder.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/uilib/abstractformbuilder.cpp	(revision 769)
@@ -365,5 +365,5 @@
     if (!zOrderNames.isEmpty()) {
         QList<QWidget *> zOrder = qVariantValue<QWidgetList>(w->property("_q_zOrder"));
-        foreach (QString widgetName, zOrderNames) {
+        foreach (const QString &widgetName, zOrderNames) {
             if (QWidget *child = qFindChild<QWidget*>(w, widgetName)) {
                 if (child->parentWidget() == w) {
Index: /trunk/tools/designer/src/lib/uilib/formbuilder.cpp
===================================================================
--- /trunk/tools/designer/src/lib/uilib/formbuilder.cpp	(revision 768)
+++ /trunk/tools/designer/src/lib/uilib/formbuilder.cpp	(revision 769)
@@ -495,5 +495,5 @@
     m_customWidgets.clear();
 
-    foreach (QString path, m_pluginPaths) {
+    foreach (const QString &path, m_pluginPaths) {
         const QDir dir(path);
         const QStringList candidates = dir.entryList(QDir::Files);
Index: /trunk/tools/designer/src/plugins/activeqt/qaxwidgetextrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/activeqt/qaxwidgetextrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/activeqt/qaxwidgetextrainfo.h	(revision 769)
@@ -78,5 +78,5 @@
     Q_OBJECT
 public:
-    QAxWidgetExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit QAxWidgetExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/activeqt/qdesigneraxwidget.h
===================================================================
--- /trunk/tools/designer/src/plugins/activeqt/qdesigneraxwidget.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/activeqt/qdesigneraxwidget.h	(revision 769)
@@ -106,5 +106,5 @@
 class QDesignerAxPluginWidget : public QDesignerAxWidget
 {
-   // No Q_OBJECT here! - meta functionality is overriden
+   // No Q_OBJECT here! - meta functionality is overridden
 public:
     explicit QDesignerAxPluginWidget(QWidget *parent);
Index: /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_extrainfo.h	(revision 769)
@@ -82,5 +82,5 @@
     Q_OBJECT
 public:
-    Q3IconViewExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3IconViewExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3iconview/q3iconview_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3IconViewPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3IconViewPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_extrainfo.h	(revision 769)
@@ -80,5 +80,5 @@
     Q_OBJECT
 public:
-    Q3ListBoxExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3ListBoxExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3listbox/q3listbox_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ListBoxPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ListBoxPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_extrainfo.h	(revision 769)
@@ -83,5 +83,5 @@
     Q_OBJECT
 public:
-    Q3ListViewExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3ListViewExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3listview/q3listview_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ListViewPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ListViewPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3mainwindow/q3mainwindow_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3mainwindow/q3mainwindow_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3mainwindow/q3mainwindow_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3MainWindowPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3MainWindowPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3table/q3table_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3table/q3table_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3table/q3table_extrainfo.h	(revision 769)
@@ -80,5 +80,5 @@
     Q_OBJECT
 public:
-    Q3TableExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3TableExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3table/q3table_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3table/q3table_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3table/q3table_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3TablePlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3TablePlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_extrainfo.h	(revision 769)
@@ -80,5 +80,5 @@
     Q_OBJECT
 public:
-    Q3TextEditExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3TextEditExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3textedit/q3textedit_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3TextEditPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3TextEditPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_extrainfo.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_extrainfo.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_extrainfo.h	(revision 769)
@@ -79,5 +79,5 @@
     Q_OBJECT
 public:
-    Q3ToolBarExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
+    explicit Q3ToolBarExtraInfoFactory(QDesignerFormEditorInterface *core, QExtensionManager *parent = 0);
 
 protected:
Index: /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3toolbar/q3toolbar_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ToolBarPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ToolBarPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3widgets/q3widget_plugins.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3widgets/q3widget_plugins.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3widgets/q3widget_plugins.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ButtonGroupPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ButtonGroupPlugin(const QIcon &icon, QObject *parent = 0);
     virtual ~Q3ButtonGroupPlugin();
 
@@ -81,5 +81,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ComboBoxPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ComboBoxPlugin(const QIcon &icon, QObject *parent = 0);
     virtual ~Q3ComboBoxPlugin();
 
@@ -110,5 +110,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3DateEditPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3DateEditPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
@@ -134,5 +134,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3DateTimeEditPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3DateTimeEditPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
@@ -158,5 +158,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3FramePlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3FramePlugin(const QIcon &icon, QObject *parent = 0);
     virtual ~Q3FramePlugin();
 
@@ -187,5 +187,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3GroupBoxPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3GroupBoxPlugin(const QIcon &icon, QObject *parent = 0);
     virtual ~Q3GroupBoxPlugin();
 
@@ -216,5 +216,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3ProgressBarPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3ProgressBarPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
@@ -240,5 +240,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3TextBrowserPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3TextBrowserPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
@@ -264,5 +264,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3TimeEditPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3TimeEditPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3widgetstack/q3widgetstack_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3widgetstack/q3widgetstack_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3widgetstack/q3widgetstack_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3WidgetStackPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3WidgetStackPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.h	(revision 769)
@@ -60,5 +60,5 @@
     Q_OBJECT
 public:
-    Q3WizardHelper(Q3Wizard *wizard);
+    explicit Q3WizardHelper(Q3Wizard *wizard);
 private slots:
     void slotCurrentChanged();
@@ -72,5 +72,5 @@
     Q_INTERFACES(QDesignerExtraInfoExtension)
 public:
-    Q3WizardExtraInfo(Q3Wizard *wizard, QDesignerFormEditorInterface *core, QObject *parent);
+    explicit Q3WizardExtraInfo(Q3Wizard *wizard, QDesignerFormEditorInterface *core, QObject *parent);
 
     virtual QWidget *widget() const;
Index: /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_plugin.h
===================================================================
--- /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_plugin.h	(revision 768)
+++ /trunk/tools/designer/src/plugins/widgets/q3wizard/q3wizard_plugin.h	(revision 769)
@@ -52,5 +52,5 @@
     Q_INTERFACES(QDesignerCustomWidgetInterface)
 public:
-    Q3WizardPlugin(const QIcon &icon, QObject *parent = 0);
+    explicit Q3WizardPlugin(const QIcon &icon, QObject *parent = 0);
 
     virtual QString name() const;
Index: /trunk/tools/designer/src/src.pro
===================================================================
--- /trunk/tools/designer/src/src.pro	(revision 768)
+++ /trunk/tools/designer/src/src.pro	(revision 769)
@@ -10,5 +10,3 @@
 CONFIG(shared,shared|static):SUBDIRS += plugins
 
-wince*: SUBDIRS -= designer plugins
-symbian: SUBDIRS = uitools
-contains(DEFINES, QT_NO_CURSOR): SUBDIRS -= lib components
+symbian|wince*: SUBDIRS = uitools
Index: /trunk/tools/doxygen/config/phonon.doxyfile
===================================================================
--- /trunk/tools/doxygen/config/phonon.doxyfile	(revision 768)
+++ /trunk/tools/doxygen/config/phonon.doxyfile	(revision 769)
@@ -6,5 +6,5 @@
 #---------------------------------------------------------------------------
 PROJECT_NAME           = Qt
-PROJECT_NUMBER         = 4.6.2
+PROJECT_NUMBER         = 4.6.3
 OUTPUT_DIRECTORY       = doc
 CREATE_SUBDIRS         = NO
Index: /trunk/tools/linguist/linguist.pro
===================================================================
--- /trunk/tools/linguist/linguist.pro	(revision 768)
+++ /trunk/tools/linguist/linguist.pro	(revision 769)
@@ -5,4 +5,2 @@
     lupdate \
     lconvert
-CONFIG  += ordered
-
Index: /trunk/tools/linguist/linguist/linguist.pro
===================================================================
--- /trunk/tools/linguist/linguist/linguist.pro	(revision 768)
+++ /trunk/tools/linguist/linguist/linguist.pro	(revision 769)
@@ -99,4 +99,5 @@
 TR_DIR = $$PWD/../../../translations
 TRANSLATIONS = \
+    $$TR_DIR/linguist_cs.ts \
     $$TR_DIR/linguist_de.ts \
     $$TR_DIR/linguist_fr.ts \
Index: /trunk/tools/linguist/linguist/linguist.qrc
===================================================================
--- /trunk/tools/linguist/linguist/linguist.qrc	(revision 768)
+++ /trunk/tools/linguist/linguist/linguist.qrc	(revision 769)
@@ -1,4 +1,4 @@
 <RCC>
-    <qresource prefix="/" >
+    <qresource prefix="/">
         <file>images/appicon.png</file>
         <file>images/mac/accelerator.png</file>
@@ -29,5 +29,4 @@
         <file>images/s_check_warning.png</file>
         <file>images/splash.png</file>
-        <file>images/transbox.png</file>
         <file>images/up.png</file>
         <file>images/down.png</file>
Index: /trunk/tools/linguist/linguist/mainwindow.cpp
===================================================================
--- /trunk/tools/linguist/linguist/mainwindow.cpp	(revision 768)
+++ /trunk/tools/linguist/linguist/mainwindow.cpp	(revision 769)
@@ -94,4 +94,6 @@
 #include <QUrl>
 #include <QWhatsThis>
+
+#include <ctype.h>
 
 QT_BEGIN_NAMESPACE
@@ -2367,11 +2369,26 @@
 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;
-    }
-    return !mnemonic.isEmpty();
+    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 (; *p < 256 && ::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 false;
 }
 
Index: /trunk/tools/linguist/linguist/messageeditor.cpp
===================================================================
--- /trunk/tools/linguist/linguist/messageeditor.cpp	(revision 768)
+++ /trunk/tools/linguist/linguist/messageeditor.cpp	(revision 769)
@@ -99,12 +99,6 @@
     setObjectName(QLatin1String("scroll area"));
 
-    // Use white explicitly as the background color for the editor page.
     QPalette p;
-    p.setColor(QPalette::Active,   QPalette::Base,   Qt::white);
-    p.setColor(QPalette::Inactive, QPalette::Base,   Qt::white);
-    p.setColor(QPalette::Disabled, QPalette::Base,   Qt::white);
-    p.setColor(QPalette::Active,   QPalette::Window, Qt::white);
-    p.setColor(QPalette::Inactive, QPalette::Window, Qt::white);
-    p.setColor(QPalette::Disabled, QPalette::Window, Qt::white);
+    p.setBrush(QPalette::Window, p.brush(QPalette::Active, QPalette::Base));
     setPalette(p);
 
@@ -136,8 +130,4 @@
 {
     QFrame *editorPage = new QFrame;
-
-    editorPage->setStyleSheet(QLatin1String(
-            "QLabel { font-weight: bold; }"
-            ));
     editorPage->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
 
Index: /trunk/tools/linguist/linguist/messageeditorwidgets.cpp
===================================================================
--- /trunk/tools/linguist/linguist/messageeditorwidgets.cpp	(revision 768)
+++ /trunk/tools/linguist/linguist/messageeditorwidgets.cpp	(revision 769)
@@ -172,4 +172,7 @@
 
     m_label = new QLabel(this);
+    QFont fnt;
+    fnt.setBold(true);
+    m_label->setFont(fnt);
     m_label->setText(label);
     layout->addWidget(m_label);
@@ -250,4 +253,7 @@
 {
     m_label = new QLabel(this);
+    QFont fnt;
+    fnt.setBold(true);
+    m_label->setFont(fnt);
     m_label->setText(label);
 
Index: /trunk/tools/linguist/linguist/messagemodel.cpp
===================================================================
--- /trunk/tools/linguist/linguist/messagemodel.cpp	(revision 768)
+++ /trunk/tools/linguist/linguist/messagemodel.cpp	(revision 769)
@@ -585,10 +585,14 @@
 }
 
-void MultiContextItem::appendMessageItem(MessageItem *m)
-{
+void MultiContextItem::appendMessageItems(const QList<MessageItem *> &m)
+{
+    QList<MessageItem *> nullItems = m; // Basically, just a reservation
+    for (int i = 0; i < nullItems.count(); ++i)
+        nullItems[i] = 0;
     for (int i = 0; i < m_messageLists.count() - 1; ++i)
-        m_messageLists[i].append(0);
-    m_messageLists.last().append(m);
-    m_multiMessageList.append(MultiMessageItem(m));
+        m_messageLists[i] += nullItems;
+    m_messageLists.last() += m;
+    foreach (MessageItem *mi, m)
+        m_multiMessageList.append(MultiMessageItem(mi));
 }
 
@@ -711,4 +715,5 @@
     }
     m_msgModel->endInsertColumns();
+    int appendedContexts = 0;
     for (int i = 0; i < dm->contextCount(); ++i) {
         ContextItem *c = dm->contextItem(i);
@@ -717,24 +722,33 @@
             MultiContextItem *mc = multiContextItem(mcx);
             mc->assignLastModel(c, readWrite);
+            QList<MessageItem *> appendItems;
             for (int j = 0; j < c->messageCount(); ++j) {
                 MessageItem *m = c->messageItem(j);
                 int msgIdx = mc->findMessage(m->text(), m->comment());
-                if (msgIdx >= 0) {
+                if (msgIdx >= 0)
                     mc->putMessageItem(msgIdx, m);
-                } else {
-                    int msgCnt = mc->messageCount();
-                    m_msgModel->beginInsertRows(m_msgModel->createIndex(mcx, 0, 0), msgCnt, msgCnt);
-                    mc->appendMessageItem(m);
-                    m_msgModel->endInsertRows();
-                    ++m_numMessages;
-                }
+                else
+                    appendItems << m;
+            }
+            if (!appendItems.isEmpty()) {
+                int msgCnt = mc->messageCount();
+                m_msgModel->beginInsertRows(m_msgModel->createIndex(mcx, 0, 0),
+                                            msgCnt, msgCnt + appendItems.size() - 1);
+                mc->appendMessageItems(appendItems);
+                m_msgModel->endInsertRows();
+                m_numMessages += appendItems.size();
             }
         } else {
-            MultiContextItem item(modelCount() - 1, c, readWrite);
-            m_msgModel->beginInsertRows(QModelIndex(), contextCount(), contextCount());
-            m_multiContextList.append(item);
-            m_msgModel->endInsertRows();
-            m_numMessages += item.messageCount();
-        }
+            m_multiContextList << MultiContextItem(modelCount() - 1, c, readWrite);
+            m_numMessages += c->messageCount();
+            ++appendedContexts;
+        }
+    }
+    if (appendedContexts) {
+        // Do that en block to avoid itemview inefficiency. It doesn't hurt that we
+        // announce the availability of the data "long" after it was actually added.
+        m_msgModel->beginInsertRows(QModelIndex(),
+                                    contextCount() - appendedContexts, contextCount() - 1);
+        m_msgModel->endInsertRows();
     }
     dm->setWritable(readWrite);
Index: /trunk/tools/linguist/linguist/messagemodel.h
===================================================================
--- /trunk/tools/linguist/linguist/messagemodel.h	(revision 768)
+++ /trunk/tools/linguist/linguist/messagemodel.h	(revision 769)
@@ -333,5 +333,5 @@
     void moveModel(int oldPos, int newPos); // newPos is *before* removing at oldPos
     void putMessageItem(int pos, MessageItem *m);
-    void appendMessageItem(MessageItem *m);
+    void appendMessageItems(const QList<MessageItem *> &m);
     void removeMultiMessageItem(int pos);
     void incrementFinishedCount() { ++m_finishedCount; }
Index: /trunk/tools/linguist/lupdate/cpp.cpp
===================================================================
--- /trunk/tools/linguist/lupdate/cpp.cpp	(revision 768)
+++ /trunk/tools/linguist/lupdate/cpp.cpp	(revision 769)
@@ -66,13 +66,14 @@
 class HashString {
 public:
-    HashString() : m_hashed(false) {}
-    explicit HashString(const QString &str) : m_str(str), m_hashed(false) {}
-    void setValue(const QString &str) { m_str = str; m_hashed = false; }
+    HashString() : m_hash(0x80000000) {}
+    explicit HashString(const QString &str) : m_str(str), m_hash(0x80000000) {}
+    void setValue(const QString &str) { m_str = str; m_hash = 0x80000000; }
     const QString &value() const { return m_str; }
     bool operator==(const HashString &other) const { return m_str == other.m_str; }
 private:
     QString m_str;
+    // qHash() of a QString is only 28 bits wide, so we can use
+    // the highest bit(s) as the "hash valid" flag.
     mutable uint m_hash;
-    mutable bool m_hashed;
     friend uint qHash(const HashString &str);
 };
@@ -80,8 +81,6 @@
 uint qHash(const HashString &str)
 {
-    if (!str.m_hashed) {
-        str.m_hashed = true;
+    if (str.m_hash & 0x80000000)
         str.m_hash = qHash(str.m_str);
-    }
     return str.m_hash;
 }
@@ -89,5 +88,5 @@
 class HashStringList {
 public:
-    explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hashed(false) {}
+    explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hash(0x80000000) {}
     const QList<HashString> &value() const { return m_list; }
     bool operator==(const HashStringList &other) const { return m_list == other.m_list; }
@@ -95,5 +94,4 @@
     QList<HashString> m_list;
     mutable uint m_hash;
-    mutable bool m_hashed;
     friend uint qHash(const HashStringList &list);
 };
@@ -101,10 +99,9 @@
 uint qHash(const HashStringList &list)
 {
-    if (!list.m_hashed) {
-        list.m_hashed = true;
+    if (list.m_hash & 0x80000000) {
         uint hash = 0;
         foreach (const HashString &qs, list.m_list) {
-            hash ^= qHash(qs) ^ 0xa09df22f;
-            hash = (hash << 13) | (hash >> 19);
+            hash ^= qHash(qs) ^ 0x0ad9f526;
+            hash = ((hash << 13) & 0x0fffffff) | (hash >> 15);
         }
         list.m_hash = hash;
@@ -216,5 +213,6 @@
     struct IfdefState {
         IfdefState() {}
-        IfdefState(int _braceDepth, int _parenDepth) :
+        IfdefState(int _bracketDepth, int _braceDepth, int _parenDepth) :
+            bracketDepth(_bracketDepth),
             braceDepth(_braceDepth),
             parenDepth(_parenDepth),
@@ -223,4 +221,5 @@
 
         SavedState state;
+        int bracketDepth, bracketDepth1st;
         int braceDepth, braceDepth1st;
         int parenDepth, parenDepth1st;
@@ -260,4 +259,6 @@
     bool qualifyOneCallbackOwn(const Namespace *ns, void *context) const;
     bool qualifyOneCallbackUsing(const Namespace *ns, void *context) const;
+    bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
+                    NamespaceList *resolved, QSet<HashStringList> *visitedUsings) const;
     bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
                     NamespaceList *resolved) const;
@@ -279,12 +280,12 @@
     enum {
         Tok_Eof, Tok_class, Tok_friend, Tok_namespace, Tok_using, Tok_return,
-        Tok_tr = 10, Tok_trUtf8, Tok_translate, Tok_translateUtf8, Tok_trid,
-        Tok_Q_OBJECT = 20, Tok_Q_DECLARE_TR_FUNCTIONS,
+        Tok_tr, Tok_trUtf8, Tok_translate, Tok_translateUtf8, Tok_trid,
+        Tok_Q_OBJECT, Tok_Q_DECLARE_TR_FUNCTIONS,
         Tok_Ident, Tok_Comment, Tok_String, Tok_Arrow, Tok_Colon, Tok_ColonColon,
-        Tok_Equals,
-        Tok_LeftBrace = 30, Tok_RightBrace, Tok_LeftParen, Tok_RightParen, Tok_Comma, Tok_Semicolon,
-        Tok_Null = 40, Tok_Integer,
-        Tok_QuotedInclude = 50, Tok_AngledInclude,
-        Tok_Other = 99
+        Tok_Equals, Tok_LeftBracket, Tok_RightBracket,
+        Tok_LeftBrace, Tok_RightBrace, Tok_LeftParen, Tok_RightParen, Tok_Comma, Tok_Semicolon,
+        Tok_Null, Tok_Integer,
+        Tok_QuotedInclude, Tok_AngledInclude,
+        Tok_Other
     };
 
@@ -298,8 +299,10 @@
     qlonglong yyInteger;
     QStack<IfdefState> yyIfdefStack;
+    int yyBracketDepth;
     int yyBraceDepth;
     int yyParenDepth;
     int yyLineNo;
     int yyCurLineNo;
+    int yyBracketLineNo;
     int yyBraceLineNo;
     int yyParenLineNo;
@@ -338,7 +341,9 @@
         directInclude = false;
     }
+    yyBracketDepth = 0;
     yyBraceDepth = 0;
     yyParenDepth = 0;
     yyCurLineNo = 1;
+    yyBracketLineNo = 1;
     yyBraceLineNo = 1;
     yyParenLineNo = 1;
@@ -567,5 +572,5 @@
                 if (yyCh == 'f') {
                     // if, ifdef, ifndef
-                    yyIfdefStack.push(IfdefState(yyBraceDepth, yyParenDepth));
+                    yyIfdefStack.push(IfdefState(yyBracketDepth, yyBraceDepth, yyParenDepth));
                     yyCh = getChar();
                 } else if (yyCh == 'n') {
@@ -606,9 +611,12 @@
                         IfdefState &is = yyIfdefStack.top();
                         if (is.elseLine != -1) {
-                            if (yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st)
-                                qWarning("%s:%d: Parenthesis/brace mismatch between "
+                            if (yyBracketDepth != is.bracketDepth1st
+                                || yyBraceDepth != is.braceDepth1st
+                                || yyParenDepth != is.parenDepth1st)
+                                qWarning("%s:%d: Parenthesis/bracket/brace mismatch between "
                                          "#if and #else branches; using #if branch\n",
                                          qPrintable(yyFileName), is.elseLine);
                         } else {
+                            is.bracketDepth1st = yyBracketDepth;
                             is.braceDepth1st = yyBraceDepth;
                             is.parenDepth1st = yyParenDepth;
@@ -616,4 +624,5 @@
                         }
                         is.elseLine = yyLineNo;
+                        yyBracketDepth = is.bracketDepth;
                         yyBraceDepth = is.braceDepth;
                         yyParenDepth = is.parenDepth;
@@ -625,8 +634,11 @@
                         IfdefState is = yyIfdefStack.pop();
                         if (is.elseLine != -1) {
-                            if (yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st)
+                            if (yyBracketDepth != is.bracketDepth1st
+                                || yyBraceDepth != is.braceDepth1st
+                                || yyParenDepth != is.parenDepth1st)
                                 qWarning("%s:%d: Parenthesis/brace mismatch between "
                                          "#if and #else branches; using #if branch\n",
                                          qPrintable(yyFileName), is.elseLine);
+                            yyBracketDepth = is.bracketDepth1st;
                             yyBraceDepth = is.braceDepth1st;
                             yyParenDepth = is.parenDepth1st;
@@ -901,4 +913,19 @@
                 yyCh = getChar();
                 return Tok_RightParen;
+            case '[':
+                if (yyBracketDepth == 0)
+                    yyBracketLineNo = yyCurLineNo;
+                yyBracketDepth++;
+                yyCh = getChar();
+                return Tok_LeftBracket;
+            case ']':
+                if (yyBracketDepth == 0)
+                    qWarning("%s:%d: Excess closing bracket in C++ code"
+                             " (or abuse of the C++ preprocessor)\n",
+                             qPrintable(yyFileName), yyCurLineNo);
+                else
+                    yyBracketDepth--;
+                yyCh = getChar();
+                return Tok_RightBracket;
             case ',':
                 yyCh = getChar();
@@ -1037,6 +1064,7 @@
 
 struct QualifyOneData {
-    QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd)
-        : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd)
+    QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd,
+                   QSet<HashStringList> *visited)
+        : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd), visitedUsings(visited)
     {}
 
@@ -1045,5 +1073,5 @@
     const HashString &segment;
     NamespaceList *resolved;
-    QSet<HashStringList> visitedUsings;
+    QSet<HashStringList> *visitedUsings;
 };
 
@@ -1079,7 +1107,8 @@
     QualifyOneData *data = (QualifyOneData *)context;
     foreach (const HashStringList &use, ns->usings)
-        if (!data->visitedUsings.contains(use)) {
-            data->visitedUsings.insert(use);
-            if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved))
+        if (!data->visitedUsings->contains(use)) {
+            data->visitedUsings->insert(use);
+            if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved,
+                           data->visitedUsings))
                 return true;
         }
@@ -1088,7 +1117,7 @@
 
 bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
-                           NamespaceList *resolved) const
-{
-    QualifyOneData data(namespaces, nsCnt, segment, resolved);
+                           NamespaceList *resolved, QSet<HashStringList> *visitedUsings) const
+{
+    QualifyOneData data(namespaces, nsCnt, segment, resolved, visitedUsings);
 
     if (visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackOwn, &data))
@@ -1096,4 +1125,12 @@
 
     return visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackUsing, &data);
+}
+
+bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
+                           NamespaceList *resolved) const
+{
+    QSet<HashStringList> visitedUsings;
+
+    return qualifyOne(namespaces, nsCnt, segment, resolved, &visitedUsings);
 }
 
@@ -1526,4 +1563,10 @@
     yyTok = getToken();
     while (yyTok != Tok_Eof) {
+        // these are array indexing operations. we ignore them entirely
+        // so they don't confuse our scoping of static initializers.
+        // we enter the loop by either reading a left bracket or by an
+        // #else popping the state.
+        while (yyBracketDepth)
+            yyTok = getToken();
         //qDebug() << "TOKEN: " << yyTok;
         switch (yyTok) {
@@ -1993,7 +2036,12 @@
                         context = comment.left(k);
                         comment.remove(0, k + 1);
-                        recordMessage(yyLineNo, context, QString(), comment, extracomment,
-                                      QString(), TranslatorMessage::ExtraData(), false, false);
+                        TranslatorMessage msg(
+                                transcode(context, false), QString(),
+                                transcode(comment, false), QString(),
+                                yyFileName, yyLineNo, QStringList(),
+                                TranslatorMessage::Finished, false);
+                        msg.setExtraComment(transcode(extracomment.simplified(), false));
                         extracomment.clear();
+                        tor->append(msg);
                         tor->setExtras(extra);
                         extra.clear();
@@ -2066,4 +2114,7 @@
             if (!yyParenDepth)
                 prospectiveContext.clear();
+            // fallthrough
+        case Tok_Equals: // for static initializers; other cases make no difference
+        case Tok_RightBracket: // ignoring indexing; same reason
         case_default:
             yyTok = getToken();
@@ -2080,4 +2131,8 @@
                  " (or abuse of the C++ preprocessor)\n",
                  qPrintable(yyFileName), yyParenLineNo);
+    else if (yyBracketDepth != 0)
+        qWarning("%s:%d: Unbalanced opening bracket in C++ code"
+                 " (or abuse of the C++ preprocessor)\n",
+                 qPrintable(yyFileName), yyBracketLineNo);
 }
 
Index: /trunk/tools/linguist/lupdate/main.cpp
===================================================================
--- /trunk/tools/linguist/lupdate/main.cpp	(revision 768)
+++ /trunk/tools/linguist/lupdate/main.cpp	(revision 769)
@@ -137,5 +137,5 @@
 
 static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFileNames,
-    const QByteArray &codecForTr, const QString &sourceLanguage, const QString &targetLanguage,
+    bool setCodec, const QString &sourceLanguage, const QString &targetLanguage,
     UpdateOptions options, bool *fail)
 {
@@ -155,8 +155,8 @@
             tor.resolveDuplicates();
             cd.clearErrors();
-            if (!codecForTr.isEmpty() && codecForTr != tor.codecName())
+            if (setCodec && fetchedTor.codec() != tor.codec())
                 qWarning("lupdate warning: Codec for tr() '%s' disagrees with "
                          "existing file's codec '%s'. Expect trouble.",
-                         codecForTr.constData(), tor.codecName().constData());
+                         fetchedTor.codecName().constData(), tor.codecName().constData());
             if (!targetLanguage.isEmpty() && targetLanguage != tor.languageCode())
                 qWarning("lupdate warning: Specified target language '%s' disagrees with "
@@ -168,6 +168,6 @@
                          qPrintable(sourceLanguage), qPrintable(tor.sourceLanguageCode()));
         } else {
-            if (!codecForTr.isEmpty())
-                tor.setCodecName(codecForTr);
+            if (setCodec)
+                tor.setCodec(fetchedTor.codec());
             if (!targetLanguage.isEmpty())
                 tor.setLanguageCode(targetLanguage);
@@ -191,6 +191,6 @@
             theseOptions |= NoLocations;
         Translator out = merge(tor, fetchedTor, theseOptions, err);
-        if (!codecForTr.isEmpty())
-            out.setCodecName(codecForTr);
+        if (setCodec)
+            out.setCodec(fetchedTor.codec());
 
         if ((options & Verbose) && !err.isEmpty()) {
@@ -375,15 +375,15 @@
             }
             Translator tor;
-            QByteArray codecForTr;
+            bool setCodec = false;
             QStringList tmp = visitor.values(QLatin1String("CODEC"))
                               + visitor.values(QLatin1String("DEFAULTCODEC"))
                               + visitor.values(QLatin1String("CODECFORTR"));
             if (!tmp.isEmpty()) {
-                codecForTr = tmp.last().toLatin1();
-                tor.setCodecName(codecForTr);
+                tor.setCodecName(tmp.last().toLatin1());
+                setCodec = true;
             }
             processProject(false, pfi, visitor, options, codecForSource,
                            targetLanguage, sourceLanguage, &tor, fail);
-            updateTsFiles(tor, tsFiles, codecForTr, sourceLanguage, targetLanguage, options, fail);
+            updateTsFiles(tor, tsFiles, setCodec, sourceLanguage, targetLanguage, options, fail);
             continue;
         }
@@ -658,5 +658,5 @@
         fetchedTor.setCodecName(codecForTr);
         processSources(fetchedTor, sourceFiles, cd);
-        updateTsFiles(fetchedTor, tsFileNames, codecForTr,
+        updateTsFiles(fetchedTor, tsFileNames, !codecForTr.isEmpty(),
                       sourceLanguage, targetLanguage, options, &fail);
     } else {
@@ -670,5 +670,5 @@
             processProjects(true, true, proFiles, options, QByteArray(),
                             targetLanguage, sourceLanguage, &fetchedTor, &fail);
-            updateTsFiles(fetchedTor, tsFileNames, codecForTr,
+            updateTsFiles(fetchedTor, tsFileNames, !codecForTr.isEmpty(),
                           sourceLanguage, targetLanguage, options, &fail);
         } else {
Index: /trunk/tools/linguist/phrasebooks/russian.qph
===================================================================
--- /trunk/tools/linguist/phrasebooks/russian.qph	(revision 768)
+++ /trunk/tools/linguist/phrasebooks/russian.qph	(revision 769)
@@ -1176,3 +1176,43 @@
     <target>ÐÐ³Ð»Ð°Ð²Ð»ÐµÐœÐžÐµ</target>
 </phrase>
+<phrase>
+    <source>parse</source>
+    <target>ÑÐ°Ð·ÐŸÐ±ÑÐ°ÑÑ</target>
+</phrase>
+<phrase>
+    <source>parsing</source>
+    <target>ÑÐ°Ð·Ð±ÐŸÑ</target>
+</phrase>
+<phrase>
+    <source>phrasebook</source>
+    <target>Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</target>
+</phrase>
+<phrase>
+    <source>phrase book</source>
+    <target>Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</target>
+</phrase>
+<phrase>
+    <source>In use</source>
+    <target>ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ</target>
+</phrase>
+<phrase>
+    <source>Access denied</source>
+    <target>ÐÐŸÑÑÑÐ¿ Ð·Ð°Ð¿ÑÐµÑÑÐœ</target>
+</phrase>
+<phrase>
+    <source>No error</source>
+    <target>ÐÐµÑ ÐŸÑÐžÐ±ÐºÐž</target>
+</phrase>
+<phrase>
+    <source>Not supported</source>
+    <target>ÐÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ</target>
+</phrase>
+<phrase>
+    <source>Already exists</source>
+    <target>Ð£Ð¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ</target>
+</phrase>
+<phrase>
+    <source>Permission denied</source>
+    <target>ÐÐŸÑÑÑÐ¿ Ð·Ð°Ð¿ÑÐµÑÑÐœ</target>
+</phrase>
 </QPH>
Index: /trunk/tools/linguist/shared/qm.cpp
===================================================================
--- /trunk/tools/linguist/shared/qm.cpp	(revision 768)
+++ /trunk/tools/linguist/shared/qm.cpp	(revision 769)
@@ -595,5 +595,5 @@
                 }
                 m += 4;
-                QString str = QString::fromUtf16((const ushort *)m, len/2);
+                QString str = QString((const QChar *)m, len/2);
                 if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
                     for (int i = 0; i < str.length(); ++i)
Index: /trunk/tools/linguist/shared/translator.h
===================================================================
--- /trunk/tools/linguist/shared/translator.h	(revision 768)
+++ /trunk/tools/linguist/shared/translator.h	(revision 769)
@@ -154,4 +154,5 @@
 
     void setCodecName(const QByteArray &name);
+    void setCodec(QTextCodec *codec) { m_codec = codec; }
     QByteArray codecName() const;
     QTextCodec *codec() const { return m_codec; }
Index: /trunk/tools/qdoc3/test/assistant.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/assistant.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/assistant.qdocconf	(revision 769)
@@ -18,5 +18,5 @@
 qhp.Assistant.indexTitle          = Qt Assistant Manual
 qhp.Assistant.extraFiles          = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Assistant.filterAttributes    = qt 4.6.2 tools assistant
+qhp.Assistant.filterAttributes    = qt 4.6.3 tools assistant
 qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual
 qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant
Index: /trunk/tools/qdoc3/test/designer.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/designer.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/designer.qdocconf	(revision 769)
@@ -18,5 +18,5 @@
 qhp.Designer.indexTitle          = Qt Designer Manual
 qhp.Designer.extraFiles          = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Designer.filterAttributes    = qt 4.6.2 tools designer
+qhp.Designer.filterAttributes    = qt 4.6.3 tools designer
 qhp.Designer.customFilters.Designer.name = Qt Designer Manual
 qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer
Index: /trunk/tools/qdoc3/test/linguist.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/linguist.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/linguist.qdocconf	(revision 769)
@@ -18,5 +18,5 @@
 qhp.Linguist.indexTitle          = Qt Linguist Manual
 qhp.Linguist.extraFiles          = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Linguist.filterAttributes    = qt 4.6.2 tools linguist
+qhp.Linguist.filterAttributes    = qt 4.6.3 tools linguist
 qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual
 qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist
Index: /trunk/tools/qdoc3/test/qmake.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/qmake.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/qmake.qdocconf	(revision 769)
@@ -18,5 +18,5 @@
 qhp.qmake.indexTitle          = QMake Manual
 qhp.qmake.extraFiles          = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.qmake.filterAttributes    = qt 4.6.2 tools qmake
+qhp.qmake.filterAttributes    = qt 4.6.3 tools qmake
 qhp.qmake.customFilters.qmake.name = qmake Manual
 qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake
Index: /trunk/tools/qdoc3/test/qt-build-docs.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/qt-build-docs.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/qt-build-docs.qdocconf	(revision 769)
@@ -33,7 +33,7 @@
                              images/stylesheet-coffee-plastique.png
 
-qhp.Qt.filterAttributes    = qt 4.6.2 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.2
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.2
+qhp.Qt.filterAttributes    = qt 4.6.3 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.3
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.3
 qhp.Qt.subprojects         = classes overviews examples
 qhp.Qt.subprojects.classes.title = Classes
Index: /trunk/tools/qdoc3/test/qt.qdocconf
===================================================================
--- /trunk/tools/qdoc3/test/qt.qdocconf	(revision 768)
+++ /trunk/tools/qdoc3/test/qt.qdocconf	(revision 769)
@@ -7,5 +7,5 @@
 project                 = Qt
 versionsym              =
-version                 = 4.6.2
+version                 = 4.6.3
 description             = Qt Reference Documentation
 url                     = http://qt.nokia.com/doc/4.6
@@ -35,7 +35,7 @@
                              images/stylesheet-coffee-plastique.png
 
-qhp.Qt.filterAttributes    = qt 4.6.2 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.2
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.2
+qhp.Qt.filterAttributes    = qt 4.6.3 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.3
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.3
 qhp.Qt.subprojects         = classes overviews examples
 qhp.Qt.subprojects.classes.title = Classes
Index: /trunk/tools/qtestlib/wince/cetest/activesyncconnection.cpp
===================================================================
--- /trunk/tools/qtestlib/wince/cetest/activesyncconnection.cpp	(revision 768)
+++ /trunk/tools/qtestlib/wince/cetest/activesyncconnection.cpp	(revision 769)
@@ -444,4 +444,143 @@
 }
 
+bool ActiveSyncConnection::setDeviceAwake(bool activate, int *returnValue)
+{
+    if (!isConnected()) {
+        qWarning("Cannot execute, connect to device first!");
+        return false;
+    }
+    bool result = false;
+
+    // If we want to wait, we have to use CeRapiInvoke, as CeCreateProcess has no way to wait
+    // until the process ends. The lib must have been build and also deployed already.
+    if (!isConnected() && !connect())
+        return false;
+
+    HRESULT res = S_OK;
+
+    //SYSTEM_POWER_STATUS_EX systemPowerState;
+
+    //res = CeGetSystemPowerStatusEx(&systemPowerState, true);
+
+    QString dllLocation = "\\Windows\\QtRemote.dll";
+    QString functionName = "qRemoteToggleUnattendedPowerMode";
+
+    DWORD outputSize;
+    BYTE* output;
+    IRAPIStream *stream;
+    int returned = 0;
+    int toggle = int(activate);
+
+    res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
+    if (S_OK != res) {
+        DWORD ce_error = CeGetLastError();
+        if (S_OK != ce_error) {
+            qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
+                qPrintable(dllLocation), strwinerror(ce_error).constData());
+        } else {
+            qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
+                qPrintable(dllLocation), res);
+        }
+    } else {
+        DWORD written;
+
+        if (S_OK != stream->Write(&toggle, sizeof(toggle), &written)) {
+            qWarning("   Could not write toggle option to process");
+            return false;
+        }
+
+        if (S_OK != stream->Read(&returned, sizeof(returned), &written)) {
+            qWarning("   Could not access return value of process");
+        }
+        else
+            result = true;
+    }
+
+    if (returnValue)
+        *returnValue = returned;
+
+    return result;
+}
+
+bool ActiveSyncConnection::resetDevice()
+{
+    if (!isConnected()) {
+        qWarning("Cannot execute, connect to device first!");
+        return false;
+    }
+
+    bool result = false;
+    if (!isConnected() && !connect())
+        return false;
+
+    QString dllLocation = "\\Windows\\QtRemote.dll";
+    QString functionName = "qRemoteSoftReset";
+
+    DWORD outputSize;
+    BYTE* output;
+    IRAPIStream *stream;
+
+    int returned = 0;
+
+    HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
+    if (S_OK != res) {
+        DWORD ce_error = CeGetLastError();
+        if (S_OK != ce_error) {
+            qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
+                qPrintable(dllLocation), strwinerror(ce_error).constData());
+        } else {
+            qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
+                qPrintable(dllLocation), res);
+        }
+    } else {
+        result = true;
+    }
+    return result;
+}
+
+bool ActiveSyncConnection::toggleDevicePower(int *returnValue)
+{
+    if (!isConnected()) {
+        qWarning("Cannot execute, connect to device first!");
+        return false;
+    }
+
+    bool result = false;
+    if (!isConnected() && !connect())
+        return false;
+
+    QString dllLocation = "\\Windows\\QtRemote.dll";
+    QString functionName = "qRemotePowerButton";
+
+    DWORD outputSize;
+    BYTE* output;
+    IRAPIStream *stream;
+    int returned = 0;
+
+    HRESULT res = CeRapiInvoke(dllLocation.utf16(), functionName.utf16(), 0, 0, &outputSize, &output, &stream, 0);
+    if (S_OK != res) {
+        DWORD ce_error = CeGetLastError();
+        if (S_OK != ce_error) {
+            qWarning("Error invoking %s on %s: %s", qPrintable(functionName),
+                qPrintable(dllLocation), strwinerror(ce_error).constData());
+        } else {
+            qWarning("Error: %s on %s unexpectedly returned %d", qPrintable(functionName),
+                qPrintable(dllLocation), res);
+        }
+    } else {
+        DWORD written;
+        if (S_OK != stream->Read(&returned, sizeof(returned), &written)) {
+            qWarning("   Could not access return value of process");
+        }
+        else {
+            result = true;
+        }
+    }
+
+    if (returnValue)
+        *returnValue = returned;
+    return result;
+}
+
 bool ActiveSyncConnection::createDirectory(const QString &path, bool deleteBefore)
 {
Index: /trunk/tools/qtestlib/wince/cetest/activesyncconnection.h
===================================================================
--- /trunk/tools/qtestlib/wince/cetest/activesyncconnection.h	(revision 768)
+++ /trunk/tools/qtestlib/wince/cetest/activesyncconnection.h	(revision 769)
@@ -80,4 +80,7 @@
 
     bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL);
+    bool resetDevice();
+    bool toggleDevicePower(int *returnValue = NULL);
+    bool setDeviceAwake(bool activate, int *returnValue = NULL);
 private:
     bool connected;
Index: /trunk/tools/qtestlib/wince/cetest/cetest.pro
===================================================================
--- /trunk/tools/qtestlib/wince/cetest/cetest.pro	(revision 768)
+++ /trunk/tools/qtestlib/wince/cetest/cetest.pro	(revision 769)
@@ -20,7 +20,10 @@
               $$QT_SOURCE_TREE/qmake \
               $$QT_SOURCE_TREE/qmake/generators/symbian \
+			  $$QT_SOURCE_TREE/tools/shared \
               $$QT_BUILD_TREE/include \
               $$QT_BUILD_TREE/include/QtCore \
               $$QT_BUILD_TREE/src/corelib/global
+			  
+VPATH += $$QT_SOURCE_TREE/tools/shared
 
 DEPENDPATH += $$QT_BUILD_TREE/src/corelib/tools $$QT_BUILD_TREE/src/corelib/io
@@ -34,4 +37,6 @@
         remoteconnection.cpp \
         deployment.cpp \
+        symbian/epocroot.cpp \
+		windows/registry.cpp \
         main.cpp
 
Index: /trunk/tools/qtestlib/wince/cetest/main.cpp
===================================================================
--- /trunk/tools/qtestlib/wince/cetest/main.cpp	(revision 768)
+++ /trunk/tools/qtestlib/wince/cetest/main.cpp	(revision 769)
@@ -45,4 +45,7 @@
 #   include "activesyncconnection.h"
 #endif
+
+const int SLEEP_AFTER_RESET = 60000; // sleep for 1 minute
+const int SLEEP_RECONNECT   = 2000;  // sleep for 2 seconds before trying another reconnect
 
 #include "deployment.h"
@@ -124,4 +127,6 @@
         " -release          : Test release version\n"
         " -libpath <path>   : Remote path to deploy Qt libraries to\n"
+        " -reset            : Reset device before starting a test\n"
+        " -awake            : Device does not go sleep mode\n"
         " -qt-delete        : Delete the Qt libraries after execution\n"
         " -project-delete   : Delete the project file(s) after execution\n"
@@ -153,4 +158,6 @@
     bool cleanupQt = false;
     bool cleanupProject = false;
+    bool deviceReset = false;
+    bool keepAwake = false;
 
     for (int i=1; i<arguments.size(); ++i) {
@@ -197,4 +204,8 @@
             cleanupQt = true;
             cleanupProject = true;
+        } else if (arguments.at(i).toLower() == QLatin1String("-reset")) {
+            deviceReset = true;
+        } else if (arguments.at(i).toLower() == QLatin1String("-awake")) {
+            keepAwake = true;
         } else if (arguments.at(i).toLower() == QLatin1String("-conf")) {
             if (++i == arguments.size()) {
@@ -353,4 +364,41 @@
         cout << "Error: Could not copy file(s) to device" << endl;
         return -1;
+    }
+    // device power mode
+    if (keepAwake)
+    {
+        int retVal = 0;
+        if (!connection.setDeviceAwake(true, &retVal)) {
+            cout << "Error: Could not set unattended mode on device" << endl;
+            return -1;
+        }
+    }
+
+    // reset device
+    if (deviceReset)
+    {
+        if (!connection.resetDevice()) {
+        //if (!connection.toggleDevicePower( &retVal)) {
+            cout << "Error: Could not reset the device" << endl;
+            return -1;
+        }
+        cout << " Entering sleep after reset for " << SLEEP_AFTER_RESET / 1000 << " seconds ... " << endl;
+        Sleep(SLEEP_AFTER_RESET);
+        cout << " ... woke up. " << endl;
+        connection.disconnect();
+        // reconnect after reset
+        int retryCount = 21;
+        while (--retryCount)
+        {
+            if (!connection.connect()) 
+                Sleep(SLEEP_RECONNECT);
+            else
+                break;
+        }
+        if (!connection.isConnected())
+        {
+            cout << "Error: Could not connect to device!" << endl;
+            return -1;
+        }
     }
 
Index: /trunk/tools/qtestlib/wince/cetest/qmake_include.pri
===================================================================
--- /trunk/tools/qtestlib/wince/cetest/qmake_include.pri	(revision 768)
+++ /trunk/tools/qtestlib/wince/cetest/qmake_include.pri	(revision 769)
@@ -6,4 +6,6 @@
            $$QT_SOURCE_TREE/qmake/project.cpp \
            $$QT_SOURCE_TREE/qmake/property.cpp \
-           $$QT_SOURCE_TREE/qmake/generators/symbian/initprojectdeploy_symbian.cpp
+           $$QT_SOURCE_TREE/qmake/generators/symbian/initprojectdeploy_symbian.cpp \
+           $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.cpp \
+           $$QT_SOURCE_TREE/tools/shared/windows/registry.cpp
 
Index: /trunk/tools/qtestlib/wince/remotelib/commands.cpp
===================================================================
--- /trunk/tools/qtestlib/wince/remotelib/commands.cpp	(revision 768)
+++ /trunk/tools/qtestlib/wince/remotelib/commands.cpp	(revision 769)
@@ -40,4 +40,7 @@
 ****************************************************************************/
 #include "commands.h"
+#include <Pm.h>
+#include <Pmpolicy.h>
+
 
 #define CLEAN_FAIL(a) {delete appName; \
@@ -125,2 +128,85 @@
     return true;
 }
+/**
+\brief Reset the device.
+*/
+int qRemoteSoftReset(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream)
+{   
+    //POWER_STATE_ON        On state 
+    //POWER_STATE_OFF       Off state 
+    //POWER_STATE_CRITICAL  Critical state 
+    //POWER_STATE_BOOT      Boot state 
+    //POWER_STATE_IDLE      Idle state 
+    //POWER_STATE_SUSPEND   Suspend state 
+    //POWER_STATE_RESET     Reset state
+
+    DWORD returnValue  = SetSystemPowerState(0, POWER_STATE_RESET, POWER_FORCE);
+    return returnValue;
+}
+
+/**
+\brief Toggle the unattended powermode of the device
+*/
+int qRemoteToggleUnattendedPowerMode(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream)
+{
+    if (!stream)
+        return -1;
+
+    DWORD bytesRead;
+    int toggleVal   = 0;
+    int returnValue = S_OK;
+
+    if (S_OK != stream->Read(&toggleVal, sizeof(toggleVal), &bytesRead))
+        return -2;
+
+    //PPN_REEVALUATESTATE 0x0001 Reserved. Set dwData to zero (0). 
+    //PPN_POWERCHANGE 0x0002 Reserved. Set dwData to zero (0). 
+    //PPN_UNATTENDEDMODE 0x0003 Set dwData to TRUE or FALSE. 
+    //PPN_SUSPENDKEYPRESSED or
+    //PPN_POWERBUTTONPRESSED 0x0004 Reserved. Set dwData to zero (0). 
+    //PPN_SUSPENDKEYRELEASED 0x0005 Reserved. Set dwData to zero (0). 
+    //PPN_APPBUTTONPRESSED 0x0006 Reserved. Set dwData to zero (0). 
+    //PPN_OEMBASE Greater than or equal to 0x10000 
+    //You can define higher values, such as 0x10001, 0x10002, and so on.
+    // Reserved. Set dwData to zero (0). 
+    returnValue = PowerPolicyNotify(PPN_UNATTENDEDMODE, toggleVal);
+
+    if (S_OK != stream->Write(&returnValue, sizeof(returnValue), &bytesRead))
+        return -3;
+    else
+        return S_OK;
+}
+
+/**
+\brief Virtually press the power button of the device
+*/
+int qRemotePowerButton(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream)
+{
+    if (!stream)
+        return -1;
+
+    DWORD bytesRead;
+    int toggleVal   = 0;
+    int returnValue = S_OK;
+
+    if (S_OK != stream->Read(&toggleVal, sizeof(toggleVal), &bytesRead))
+        return -2;
+
+    //PPN_REEVALUATESTATE 0x0001 Reserved. Set dwData to zero (0). 
+    //PPN_POWERCHANGE 0x0002 Reserved. Set dwData to zero (0). 
+    //PPN_UNATTENDEDMODE 0x0003 Set dwData to TRUE or FALSE. 
+    //PPN_SUSPENDKEYPRESSED or
+    //PPN_POWERBUTTONPRESSED 0x0004 Reserved. Set dwData to zero (0). 
+    //PPN_SUSPENDKEYRELEASED 0x0005 Reserved. Set dwData to zero (0). 
+    //PPN_APPBUTTONPRESSED 0x0006 Reserved. Set dwData to zero (0). 
+    //PPN_OEMBASE Greater than or equal to 0x10000 
+    //You can define higher values, such as 0x10001, 0x10002, and so on.
+    // Reserved. Set dwData to zero (0). 
+    returnValue = PowerPolicyNotify(PPN_POWERBUTTONPRESSED, 0);
+
+    if (S_OK != stream->Write(&returnValue, sizeof(returnValue), &bytesRead))
+        return -3;
+    else
+        return S_OK;
+}
+
Index: /trunk/tools/qtestlib/wince/remotelib/commands.h
===================================================================
--- /trunk/tools/qtestlib/wince/remotelib/commands.h	(revision 768)
+++ /trunk/tools/qtestlib/wince/remotelib/commands.h	(revision 769)
@@ -46,4 +46,7 @@
 extern "C" {
     int __declspec(dllexport) qRemoteLaunch(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream*);
+    int __declspec(dllexport) qRemoteSoftReset(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream);
+    int __declspec(dllexport) qRemoteToggleUnattendedPowerMode(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream);
+    int __declspec(dllexport) qRemotePowerButton(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream);
     bool __declspec(dllexport) qRemoteExecute(const wchar_t* program, const wchar_t* arguments = NULL, int *returnValue = NULL , DWORD* error = NULL, int timeout = -1);
 }
Index: /trunk/tools/runonphone/main.cpp
===================================================================
--- /trunk/tools/runonphone/main.cpp	(revision 768)
+++ /trunk/tools/runonphone/main.cpp	(revision 769)
@@ -45,7 +45,7 @@
 #include <QScopedPointer>
 #include <QTimer>
-#include "trkutils.h"
-#include "trkdevice.h"
-#include "launcher.h"
+#include "symbianutils/trkutils.h"
+#include "symbianutils/trkdevice.h"
+#include "symbianutils/launcher.h"
 
 #include "trksignalhandler.h"
@@ -134,26 +134,26 @@
     }
 
-    if(serialPortName.isEmpty()) {
-        if(loglevel > 0)
+    if (serialPortName.isEmpty()) {
+        if (loglevel > 0)
             outstream << "Detecting serial ports" << endl;
         QList <SerialPortId> ports = enumerateSerialPorts();
         foreach(SerialPortId id, ports) {
-            if(loglevel > 0)
+            if (loglevel > 0)
                 outstream << "Port Name: " << id.portName << ", "
                      << "Friendly Name:" << id.friendlyName << endl;
-            if(serialPortName.isEmpty()) {
-                if(!id.friendlyName.isEmpty() &&
-                   serialPortFriendlyName.isEmpty() &&
-                    (id.friendlyName.contains("symbian", Qt::CaseInsensitive) ||
-                       id.friendlyName.contains("s60", Qt::CaseInsensitive) ||
-                       id.friendlyName.contains("nokia", Qt::CaseInsensitive)))
+            if (serialPortName.isEmpty()) {
+                if (!id.friendlyName.isEmpty()
+                        && serialPortFriendlyName.isEmpty()
+                        && (id.friendlyName.contains("symbian", Qt::CaseInsensitive)
+                            || id.friendlyName.contains("s60", Qt::CaseInsensitive)
+                            || id.friendlyName.contains("nokia", Qt::CaseInsensitive)))
                         serialPortName = id.portName;
-                else if (!id.friendlyName.isEmpty() &&
-                         !serialPortFriendlyName.isEmpty() &&
-                         id.friendlyName.contains(serialPortFriendlyName))
-                        serialPortName = id.portName;
+                else if (!id.friendlyName.isEmpty()
+                        && !serialPortFriendlyName.isEmpty()
+                        && id.friendlyName.contains(serialPortFriendlyName))
+                    serialPortName = id.portName;
             }
         }
-        if(serialPortName.isEmpty()) {
+        if (serialPortName.isEmpty()) {
             errstream << "No phone found, ensure USB cable is connected or specify manually with -p" << endl;
             return 1;
@@ -163,5 +163,5 @@
     QScopedPointer<trk::Launcher> launcher;
 
-    if(sisFile.isEmpty()) {
+    if (sisFile.isEmpty()) {
         launcher.reset(new trk::Launcher(trk::Launcher::ActionCopyRun));
         launcher->setCopyFileName(exeFile, QString("c:\\sys\\bin\\") + exeFile);
@@ -173,16 +173,12 @@
         launcher->setInstallFileName("c:\\data\\testtemp.sis");
     }
-    if(loglevel > 0)
+    if (loglevel > 0)
         outstream << "Connecting to target via " << serialPortName << endl;
-#ifdef Q_OS_WIN
-    launcher->setTrkServerName(QString("\\\\.\\") + serialPortName);
-#else
     launcher->setTrkServerName(serialPortName);
-#endif
 
     launcher->setFileName(QString("c:\\sys\\bin\\") + exeFile);
     launcher->setCommandLineArgs(cmdLine);
 
-    if(loglevel > 1)
+    if (loglevel > 1)
         launcher->setVerbose(1);
 
@@ -217,5 +213,5 @@
 
     QString errorMessage;
-    if(!launcher->startServer(&errorMessage)) {
+    if (!launcher->startServer(&errorMessage)) {
         errstream << errorMessage << endl;
         return 1;
Index: /trunk/tools/runonphone/runonphone.pro
===================================================================
--- /trunk/tools/runonphone/runonphone.pro	(revision 768)
+++ /trunk/tools/runonphone/runonphone.pro	(revision 769)
@@ -5,5 +5,5 @@
 CONFIG -= app_bundle
 
-include(trk/trk.pri)
+include(symbianutils/symbianutils.pri)
 
 SOURCES += main.cpp \
@@ -12,4 +12,6 @@
 HEADERS += trksignalhandler.h \
     serenum.h
+
+DEFINES += SYMBIANUTILS_INCLUDE_PRI
 
 windows { 
Index: /trunk/tools/runonphone/serenum_stub.cpp
===================================================================
--- /trunk/tools/runonphone/serenum_stub.cpp	(revision 768)
+++ /trunk/tools/runonphone/serenum_stub.cpp	(revision 769)
@@ -48,5 +48,5 @@
 {
     QList<SerialPortId> list;
-    qWarning() << "enumerateSerialPorts not implemented" << endl;
+    qWarning() << "enumerateSerialPorts not implemented";
     return list;
 }
Index: /trunk/tools/runonphone/serenum_unix.cpp
===================================================================
--- /trunk/tools/runonphone/serenum_unix.cpp	(revision 768)
+++ /trunk/tools/runonphone/serenum_unix.cpp	(revision 769)
@@ -52,5 +52,5 @@
     QDir dir("/dev/serial/by-id/");
     QFileInfoList ports(dir.entryInfoList());
-    foreach(QFileInfo info, ports) {
+    foreach (const QFileInfo &info, ports) {
         if (!info.isDir()) {
             SerialPortId id;
Index: /trunk/tools/runonphone/symbianutils/bluetoothlistener.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/bluetoothlistener.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/bluetoothlistener.cpp	(revision 769)
@@ -0,0 +1,224 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "bluetoothlistener.h"
+#include "trkdevice.h"
+
+#include <QtCore/QDebug>
+
+#ifdef Q_OS_UNIX
+#   include <unistd.h>
+#   include <signal.h>
+#else
+#   include <windows.h>
+#endif
+
+// Process id helpers.
+#ifdef Q_OS_WIN
+inline DWORD processId(const QProcess &p)
+{
+    if (const Q_PID processInfoStruct = p.pid())
+        return processInfoStruct->dwProcessId;
+    return 0;
+}
+#else
+inline Q_PID processId(const QProcess &p)
+{
+    return p.pid();
+}
+#endif
+
+
+enum { debug = 0 };
+
+namespace trk {
+
+struct BluetoothListenerPrivate {
+    BluetoothListenerPrivate();
+    QString device;
+    QProcess process;
+#ifdef Q_OS_WIN
+    DWORD pid;
+#else
+    Q_PID pid;
+#endif
+    bool printConsoleMessages;
+    BluetoothListener::Mode mode;
+};
+
+BluetoothListenerPrivate::BluetoothListenerPrivate() :
+    pid(0),
+    printConsoleMessages(false),
+    mode(BluetoothListener::Listen)
+{
+}
+
+BluetoothListener::BluetoothListener(QObject *parent) :
+    QObject(parent),
+    d(new BluetoothListenerPrivate)
+{
+    d->process.setProcessChannelMode(QProcess::MergedChannels);
+
+    connect(&d->process, SIGNAL(readyReadStandardError()),
+            this, SLOT(slotStdError()));
+    connect(&d->process, SIGNAL(readyReadStandardOutput()),
+            this, SLOT(slotStdOutput()));
+    connect(&d->process, SIGNAL(finished(int, QProcess::ExitStatus)),
+            this, SLOT(slotProcessFinished(int,QProcess::ExitStatus)));
+    connect(&d->process, SIGNAL(error(QProcess::ProcessError)),
+            this, SLOT(slotProcessError(QProcess::ProcessError)));
+}
+
+BluetoothListener::~BluetoothListener()
+{
+    const int trc = terminateProcess();
+    if (debug)
+        qDebug() << "~BluetoothListener: terminated" << trc;
+    delete d;
+}
+
+BluetoothListener::Mode BluetoothListener::mode() const
+{
+    return d->mode;
+}
+
+void BluetoothListener::setMode(Mode m)
+{
+    d->mode = m;
+}
+
+bool BluetoothListener::printConsoleMessages() const
+{
+    return d->printConsoleMessages;
+}
+
+void BluetoothListener::setPrintConsoleMessages(bool p)
+{
+    d->printConsoleMessages = p;
+}
+
+int BluetoothListener::terminateProcess()
+{
+    enum { TimeOutMS = 200 };
+    if (debug)
+        qDebug() << "terminateProcess" << d->process.pid() << d->process.state();
+    if (d->process.state() == QProcess::NotRunning)
+        return -1;
+    emitMessage(tr("%1: Stopping listener %2...").arg(d->device).arg(processId(d->process)));
+    // When listening, the process should terminate by itself after closing the connection
+    if (mode() == Listen && d->process.waitForFinished(TimeOutMS))
+        return 0;
+#ifdef Q_OS_UNIX
+    kill(d->process.pid(), SIGHUP); // Listens for SIGHUP
+    if (d->process.waitForFinished(TimeOutMS))
+        return 1;
+#endif
+    d->process.terminate();
+    if (d->process.waitForFinished(TimeOutMS))
+        return 2;
+    d->process.kill();
+    return 3;
+}
+
+bool BluetoothListener::start(const QString &device, QString *errorMessage)
+{
+    if (d->process.state() != QProcess::NotRunning) {
+        *errorMessage = QLatin1String("Internal error: Still running.");
+        return false;
+    }
+    d->device = device;
+    const QString binary = QLatin1String("rfcomm");
+    QStringList arguments;
+    arguments << QLatin1String("-r")
+              << (d->mode == Listen ? QLatin1String("listen") : QLatin1String("watch"))
+              << device << QString(QLatin1Char('1'));
+    if (debug)
+        qDebug() << binary << arguments;
+    emitMessage(tr("%1: Starting Bluetooth listener %2...").arg(device, binary));
+    d->pid = 0;
+    d->process.start(binary, arguments);
+    if (!d->process.waitForStarted()) {
+        *errorMessage = tr("Unable to run '%1': %2").arg(binary, d->process.errorString());
+        return false;
+    }
+    d->pid = processId(d->process); // Forgets it after crash/termination
+    emitMessage(tr("%1: Bluetooth listener running (%2).").arg(device).arg(processId(d->process)));
+    return true;
+}
+
+void BluetoothListener::slotStdOutput()
+{
+    emitMessage(QString::fromLocal8Bit(d->process.readAllStandardOutput()));
+}
+
+void BluetoothListener::emitMessage(const QString &m)
+{
+    if (d->printConsoleMessages || debug)
+        qDebug("%s\n", qPrintable(m));
+    emit message(m);
+}
+
+void BluetoothListener::slotStdError()
+{
+    emitMessage(QString::fromLocal8Bit(d->process.readAllStandardError()));
+}
+
+void BluetoothListener::slotProcessFinished(int ex, QProcess::ExitStatus state)
+{
+    switch (state) {
+    case QProcess::NormalExit:
+        emitMessage(tr("%1: Process %2 terminated with exit code %3.")
+                    .arg(d->device).arg(d->pid).arg(ex));
+        break;
+    case QProcess::CrashExit:
+        emitMessage(tr("%1: Process %2 crashed.").arg(d->device).arg(d->pid));
+        break;
+    }
+    emit terminated();
+}
+
+void BluetoothListener::slotProcessError(QProcess::ProcessError error)
+{
+    emitMessage(tr("%1: Process error %2: %3")
+        .arg(d->device).arg(error).arg(d->process.errorString()));
+}
+
+} // namespace trk
Index: /trunk/tools/runonphone/symbianutils/bluetoothlistener.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/bluetoothlistener.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/bluetoothlistener.h	(revision 769)
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BLUETOOTHLISTENER_H
+#define BLUETOOTHLISTENER_H
+
+#include "symbianutils_global.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QProcess>
+
+namespace trk {
+struct BluetoothListenerPrivate;
+
+/* BluetoothListener: Starts a helper process watching connections on a
+ * Bluetooth device, Linux only:
+ * The rfcomm command is used. It process can be started in the background
+ * while connection attempts (TrkDevice::open()) are made in the foreground. */
+
+class SYMBIANUTILS_EXPORT BluetoothListener : public QObject
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(BluetoothListener)
+public:
+    // The Mode property must be set before calling start().
+    enum Mode {
+        Listen, /* Terminate after client closed (read: Trk app
+                 * on the phone terminated or disconnected).*/
+        Watch   // Keep running, watch for next connection from client
+    };
+
+    explicit BluetoothListener(QObject *parent = 0);
+    virtual ~BluetoothListener();
+
+    Mode mode() const;
+    void setMode(Mode m);
+
+    bool start(const QString &device, QString *errorMessage);
+
+    // Print messages on the console.
+    bool printConsoleMessages() const;
+    void setPrintConsoleMessages(bool p);
+
+signals:
+    void terminated();
+    void message(const QString &);
+
+public slots:
+    void emitMessage(const QString &m); // accessed by starter
+
+private slots:
+    void slotStdOutput();
+    void slotStdError();
+    void slotProcessFinished(int, QProcess::ExitStatus);
+    void slotProcessError(QProcess::ProcessError error);
+
+private:
+    int terminateProcess();
+
+    BluetoothListenerPrivate *d;
+};
+
+} // namespace trk
+
+#endif // BLUETOOTHLISTENER_H
Index: /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.cpp	(revision 769)
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "bluetoothlistener_gui.h"
+#include "bluetoothlistener.h"
+#include "communicationstarter.h"
+
+#include <QtGui/QMessageBox>
+#include <QtGui/QPushButton>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDebug>
+
+namespace trk {
+
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+    promptStartCommunication(BaseCommunicationStarter &starter,
+                             const QString &msgBoxTitle,
+                             const QString &msgBoxText,
+                             QWidget *msgBoxParent,
+                             QString *errorMessage)
+{
+    errorMessage->clear();
+    // Initial connection attempt.
+    switch (starter.start()) {
+    case BaseCommunicationStarter::Started:
+        break;
+    case BaseCommunicationStarter::ConnectionSucceeded:
+        return PromptStartCommunicationConnected;
+    case BaseCommunicationStarter::StartError:
+        *errorMessage = starter.errorString();
+        return PromptStartCommunicationError;
+    }
+    // Run the starter with the event loop of a message box, have the box
+    // closed by the signals of the starter.
+    QMessageBox messageBox(QMessageBox::Information, msgBoxTitle, msgBoxText, QMessageBox::Cancel, msgBoxParent);
+    QObject::connect(&starter, SIGNAL(connected()), &messageBox, SLOT(close()));
+    QObject::connect(&starter, SIGNAL(timeout()), &messageBox, SLOT(close()));
+    messageBox.exec();    
+    // Only starter.state() is reliable here to obtain the state.
+    switch (starter.state()) {
+    case AbstractBluetoothStarter::Running:
+        *errorMessage = QCoreApplication::translate("trk::promptStartCommunication", "Connection on %1 canceled.").arg(starter.device());
+        return PromptStartCommunicationCanceled;
+    case AbstractBluetoothStarter::TimedOut:
+        *errorMessage = starter.errorString();
+        return PromptStartCommunicationError;
+    case AbstractBluetoothStarter::Connected:
+        break;
+    }
+    return PromptStartCommunicationConnected;
+}
+
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+    promptStartSerial(BaseCommunicationStarter &starter,
+                         QWidget *msgBoxParent,
+                         QString *errorMessage)
+{
+    const QString title = QCoreApplication::translate("trk::promptStartCommunication", "Waiting for App TRK");
+    const QString message = QCoreApplication::translate("trk::promptStartCommunication", "Waiting for App TRK to start on %1...").arg(starter.device());
+    return promptStartCommunication(starter, title, message, msgBoxParent, errorMessage);
+}
+
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+    promptStartBluetooth(BaseCommunicationStarter &starter,
+                         QWidget *msgBoxParent,
+                         QString *errorMessage)
+{
+    const QString title = QCoreApplication::translate("trk::promptStartCommunication", "Waiting for Bluetooth Connection");
+    const QString message = QCoreApplication::translate("trk::promptStartCommunication", "Connecting to %1...").arg(starter.device());
+    return promptStartCommunication(starter, title, message, msgBoxParent, errorMessage);
+}
+
+} // namespace trk
Index: /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/bluetoothlistener_gui.h	(revision 769)
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BLUETOOTHLISTENER_GUI_H
+#define BLUETOOTHLISTENER_GUI_H
+
+#include "symbianutils_global.h"
+
+#include <QtCore/QtGlobal>
+
+QT_BEGIN_NAMESPACE
+class QWidget;
+QT_END_NAMESPACE
+
+namespace trk {
+class BaseCommunicationStarter;
+
+/* promptStartCommunication(): Convenience functions that
+ * prompt the user to start a communication (launching or
+ * connecting TRK) using a modal message box in which they can cancel.
+ * Pass in the starter with device and parameters set up.  */
+
+enum PromptStartCommunicationResult {
+    PromptStartCommunicationConnected,
+    PromptStartCommunicationCanceled,
+    PromptStartCommunicationError
+};
+
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+        promptStartCommunication(BaseCommunicationStarter &starter,
+                                 const QString &msgBoxTitle,
+                                 const QString &msgBoxText,
+                                 QWidget *msgBoxParent,
+                                 QString *errorMessage);
+
+// Convenience to start a serial connection (messages prompting
+// to launch Trk).
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+        promptStartSerial(BaseCommunicationStarter &starter,
+                          QWidget *msgBoxParent,
+                          QString *errorMessage);
+
+// Convenience to start blue tooth connection (messages
+// prompting to connect).
+SYMBIANUTILS_EXPORT PromptStartCommunicationResult
+        promptStartBluetooth(BaseCommunicationStarter &starter,
+                             QWidget *msgBoxParent,
+                             QString *errorMessage);
+} // namespace trk
+
+#endif // BLUETOOTHLISTENER_GUI_H
Index: /trunk/tools/runonphone/symbianutils/callback.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/callback.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/callback.h	(revision 769)
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEBUGGER_CALLBACK_H
+#define DEBUGGER_CALLBACK_H
+
+#include "symbianutils_global.h"
+
+namespace trk {
+namespace Internal {
+
+/* Helper class for the 1-argument functor:
+ * Cloneable base class for the implementation which is
+ * invokeable with the argument. */
+template <class Argument>
+class CallbackImplBase
+{
+    Q_DISABLE_COPY(CallbackImplBase)
+public:
+    CallbackImplBase() {}
+    virtual CallbackImplBase *clone() const = 0;
+    virtual void invoke(Argument a) = 0;
+    virtual ~CallbackImplBase() {}
+};
+
+/* Helper class for the 1-argument functor: Implementation for
+ * a class instance with a member function pointer. */
+template <class Class, class Argument>
+class CallbackMemberPtrImpl : public CallbackImplBase<Argument>
+{
+public:
+    typedef void (Class::*MemberFuncPtr)(Argument);
+
+    CallbackMemberPtrImpl(Class *instance,
+                          MemberFuncPtr memberFunc) :
+                          m_instance(instance),
+                          m_memberFunc(memberFunc) {}
+
+    virtual CallbackImplBase<Argument> *clone() const
+    {
+        return new CallbackMemberPtrImpl<Class, Argument>(m_instance, m_memberFunc);
+    }
+
+    virtual void invoke(Argument a)
+        { (m_instance->*m_memberFunc)(a); }
+private:
+    Class *m_instance;
+    MemberFuncPtr m_memberFunc;
+};
+
+} // namespace Internal
+
+/* Default-constructible, copyable 1-argument functor providing an
+ * operator()(Argument) that invokes a member function of a class:
+ * \code
+class Foo {
+public:
+    void print(const std::string &);
+};
+...
+Foo foo;
+Callback<const std::string &> f1(&foo, &Foo::print);
+f1("test");
+\endcode */
+
+template <class Argument>
+class Callback
+{
+public:
+    Callback() : m_impl(0) {}
+
+    template <class Class>
+    Callback(Class *instance, void (Class::*memberFunc)(Argument)) :
+        m_impl(new Internal::CallbackMemberPtrImpl<Class,Argument>(instance, memberFunc))
+    {}
+
+    ~Callback()
+    {
+        clean();
+    }
+
+    Callback(const Callback &rhs) :
+        m_impl(0)
+    {
+        if (rhs.m_impl)
+            m_impl = rhs.m_impl->clone();
+    }
+
+    Callback &operator=(const Callback &rhs)
+    {
+        if (this != &rhs) {
+            clean();
+            if (rhs.m_impl)
+                m_impl = rhs.m_impl->clone();
+        }
+        return *this;
+    }
+
+    bool isNull() const { return m_impl == 0; }
+    operator bool() const { return !isNull(); }
+
+    void operator()(Argument a)
+    {
+        if (m_impl)
+            m_impl->invoke(a);
+    }
+
+private:
+    void clean()
+    {
+        if (m_impl) {
+            delete m_impl;
+            m_impl = 0;
+        }
+    }
+
+    Internal::CallbackImplBase<Argument> *m_impl;
+};
+
+} // namespace trk
+
+#endif // DEBUGGER_CALLBACK_H
Index: /trunk/tools/runonphone/symbianutils/communicationstarter.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/communicationstarter.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/communicationstarter.cpp	(revision 769)
@@ -0,0 +1,251 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "communicationstarter.h"
+#include "bluetoothlistener.h"
+#include "trkdevice.h"
+
+#include <QtCore/QTimer>
+#include <QtCore/QEventLoop>
+
+namespace trk {
+
+// --------------- AbstractBluetoothStarter
+struct BaseCommunicationStarterPrivate {
+    explicit BaseCommunicationStarterPrivate(const BaseCommunicationStarter::TrkDevicePtr &d);
+
+    const BaseCommunicationStarter::TrkDevicePtr trkDevice;
+    BluetoothListener *listener;
+    QTimer *timer;
+    int intervalMS;
+    int attempts;
+    int n;
+    QString errorString;
+    BaseCommunicationStarter::State state;
+};
+
+BaseCommunicationStarterPrivate::BaseCommunicationStarterPrivate(const BaseCommunicationStarter::TrkDevicePtr &d) :
+        trkDevice(d),
+        listener(0),
+        timer(0),
+        intervalMS(1000),
+        attempts(-1),
+        n(0),
+        state(BaseCommunicationStarter::TimedOut)
+{
+}
+
+BaseCommunicationStarter::BaseCommunicationStarter(const TrkDevicePtr &trkDevice, QObject *parent) :
+        QObject(parent),
+        d(new BaseCommunicationStarterPrivate(trkDevice))
+{
+}
+
+BaseCommunicationStarter::~BaseCommunicationStarter()
+{
+    stopTimer();
+    delete d;
+}
+
+void BaseCommunicationStarter::stopTimer()
+{
+    if (d->timer && d->timer->isActive())
+        d->timer->stop();
+}
+
+bool BaseCommunicationStarter::initializeStartupResources(QString *errorMessage)
+{
+    errorMessage->clear();
+    return true;
+}
+
+BaseCommunicationStarter::StartResult BaseCommunicationStarter::start()
+{
+    if (state() == Running) {
+        d->errorString = QLatin1String("Internal error, attempt to re-start BaseCommunicationStarter.\n");
+        return StartError;
+    }
+    // Before we instantiate timers, and such, try to open the device,
+    // which should succeed if another listener is already running in
+    // 'Watch' mode
+    if (d->trkDevice->open(&(d->errorString)))
+        return ConnectionSucceeded;
+    // Pull up resources for next attempt
+    d->n = 0;
+    if (!initializeStartupResources(&(d->errorString)))
+        return StartError;
+    // Start timer
+    if (!d->timer) {
+        d->timer = new QTimer;
+        connect(d->timer, SIGNAL(timeout()), this, SLOT(slotTimer()));
+    }
+    d->timer->setInterval(d->intervalMS);
+    d->timer->setSingleShot(false);
+    d->timer->start();
+    d->state = Running;
+    return Started;
+}
+
+BaseCommunicationStarter::State BaseCommunicationStarter::state() const
+{
+    return d->state;
+}
+
+int BaseCommunicationStarter::intervalMS() const
+{
+    return d->intervalMS;
+}
+
+void BaseCommunicationStarter::setIntervalMS(int i)
+{
+    d->intervalMS = i;
+    if (d->timer)
+        d->timer->setInterval(i);
+}
+
+int BaseCommunicationStarter::attempts() const
+{
+    return d->attempts;
+}
+
+void BaseCommunicationStarter::setAttempts(int a)
+{
+    d->attempts = a;
+}
+
+QString BaseCommunicationStarter::device() const
+{
+    return d->trkDevice->port();
+}
+
+QString BaseCommunicationStarter::errorString() const
+{
+    return d->errorString;
+}
+
+void BaseCommunicationStarter::slotTimer()
+{
+    ++d->n;
+    // Check for timeout
+    if (d->attempts >= 0 && d->n >= d->attempts) {
+        stopTimer();
+        d->errorString = tr("%1: timed out after %n attempts using an interval of %2ms.", 0, d->n)
+                         .arg(d->trkDevice->port()).arg(d->intervalMS);
+        d->state = TimedOut;
+        emit timeout();
+    } else {
+        // Attempt n to connect?
+        if (d->trkDevice->open(&(d->errorString))) {
+            stopTimer();
+            const QString msg = tr("%1: Connection attempt %2 succeeded.").arg(d->trkDevice->port()).arg(d->n);
+            emit message(msg);
+            d->state = Connected;
+            emit connected();
+        } else {
+            const QString msg = tr("%1: Connection attempt %2 failed: %3 (retrying)...")
+                                .arg(d->trkDevice->port()).arg(d->n).arg(d->errorString);
+            emit message(msg);
+        }
+    }
+}
+
+// --------------- AbstractBluetoothStarter
+
+AbstractBluetoothStarter::AbstractBluetoothStarter(const TrkDevicePtr &trkDevice, QObject *parent) :
+    BaseCommunicationStarter(trkDevice, parent)
+{
+}
+
+bool AbstractBluetoothStarter::initializeStartupResources(QString *errorMessage)
+{
+    // Create the listener and forward messages to it.
+    BluetoothListener *listener = createListener();
+    connect(this, SIGNAL(message(QString)), listener, SLOT(emitMessage(QString)));
+    return listener->start(device(), errorMessage);
+}
+
+// -------- ConsoleBluetoothStarter
+ConsoleBluetoothStarter::ConsoleBluetoothStarter(const TrkDevicePtr &trkDevice,
+                                                 QObject *listenerParent,
+                                                 QObject *parent) :
+AbstractBluetoothStarter(trkDevice, parent),
+m_listenerParent(listenerParent)
+{
+}
+
+BluetoothListener *ConsoleBluetoothStarter::createListener()
+{
+    BluetoothListener *rc = new BluetoothListener(m_listenerParent);
+    rc->setMode(BluetoothListener::Listen);
+    rc->setPrintConsoleMessages(true);
+    return rc;
+}
+
+bool ConsoleBluetoothStarter::startBluetooth(const TrkDevicePtr &trkDevice,
+                                             QObject *listenerParent,
+                                             int attempts,
+                                             QString *errorMessage)
+{
+    // Set up a console starter to print to stdout.
+    ConsoleBluetoothStarter starter(trkDevice, listenerParent);
+    starter.setAttempts(attempts);
+    switch (starter.start()) {
+    case Started:
+        break;
+    case ConnectionSucceeded:
+        return true;
+    case StartError:
+        *errorMessage = starter.errorString();
+        return false;
+    }
+    // Run the starter with an event loop. @ToDo: Implement
+    // some asynchronous keypress read to cancel.
+    QEventLoop eventLoop;
+    connect(&starter, SIGNAL(connected()), &eventLoop, SLOT(quit()));
+    connect(&starter, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
+    eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
+    if (starter.state() != AbstractBluetoothStarter::Connected) {
+        *errorMessage = starter.errorString();
+        return false;
+    }
+    return true;
+}
+} // namespace trk
Index: /trunk/tools/runonphone/symbianutils/communicationstarter.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/communicationstarter.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/communicationstarter.h	(revision 769)
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef COMMUNICATIONSTARTER_H
+#define COMMUNICATIONSTARTER_H
+
+#include "symbianutils_global.h"
+
+#include <QtCore/QSharedPointer>
+#include <QtCore/QObject>
+
+namespace trk {
+class TrkDevice;
+class BluetoothListener;
+struct BaseCommunicationStarterPrivate;
+
+/* BaseCommunicationStarter: A QObject that repeatedly tries to open a
+ * trk device until a connection succeeds or a timeout occurs (emitting
+ * signals), allowing to do something else in the foreground (local event loop
+ * [say QMessageBox] or some asynchronous operation). If the initial
+ * connection attempt in start() fails, the
+ * virtual initializeStartupResources() is called to initialize resources
+ * required to pull up the communication (namely Bluetooth listeners).
+ * The base class can be used as is to prompt the user to launch App TRK for a
+ * serial communication as this requires no further resource setup. */
+
+class SYMBIANUTILS_EXPORT BaseCommunicationStarter : public QObject {
+    Q_OBJECT
+    Q_DISABLE_COPY(BaseCommunicationStarter)
+public:
+    typedef QSharedPointer<TrkDevice> TrkDevicePtr;
+
+    enum State { Running, Connected, TimedOut };
+
+    explicit BaseCommunicationStarter(const TrkDevicePtr& trkDevice, QObject *parent = 0);
+    virtual ~BaseCommunicationStarter();
+
+    int intervalMS() const;
+    void setIntervalMS(int i);
+
+    int attempts() const;
+    void setAttempts(int a);
+
+    QString device() const;
+
+    State state() const;
+    QString errorString() const;
+
+    enum StartResult {
+        Started,               // Starter is now running.
+        ConnectionSucceeded,   /* Initial connection attempt succeeded,
+                                * no need to keep running. */
+        StartError             // Error occurred during start.
+    };
+
+    StartResult start();
+
+signals:
+    void connected();
+    void timeout();
+    void message(const QString &);
+
+private slots:
+    void slotTimer();
+
+protected:
+    virtual bool initializeStartupResources(QString *errorMessage);
+
+private:
+    inline void stopTimer();
+
+    BaseCommunicationStarterPrivate *d;
+};
+
+/* AbstractBluetoothStarter: Repeatedly tries to open a trk Bluetooth
+ * device. Note that in case a Listener is already running mode, the
+ * connection will succeed immediately.
+ * initializeStartupResources() is implemented to fire up the listener.
+ * Introduces a new virtual createListener() that derived classes must
+ * implement as a factory function that creates and sets up the
+ * listener (mode, message connection, etc). */
+
+class SYMBIANUTILS_EXPORT AbstractBluetoothStarter : public BaseCommunicationStarter {
+    Q_OBJECT
+    Q_DISABLE_COPY(AbstractBluetoothStarter)
+public:
+
+protected:
+    explicit AbstractBluetoothStarter(const TrkDevicePtr& trkDevice, QObject *parent = 0);
+
+    // Implemented to fire up the listener.
+    virtual bool initializeStartupResources(QString *errorMessage);
+    // New virtual: Overwrite to create and parametrize the listener.
+    virtual BluetoothListener *createListener() = 0;
+};
+
+/* ConsoleBluetoothStarter: Convenience class for console processes. Creates a
+ * listener in "Listen" mode with the messages redirected to standard output. */
+
+class SYMBIANUTILS_EXPORT ConsoleBluetoothStarter : public AbstractBluetoothStarter {
+    Q_OBJECT
+    Q_DISABLE_COPY(ConsoleBluetoothStarter)
+public:
+    static bool startBluetooth(const TrkDevicePtr& trkDevice,
+                               QObject *listenerParent,
+                               int attempts,
+                               QString *errorMessage);
+
+protected:
+    virtual BluetoothListener *createListener();
+
+private:
+    explicit ConsoleBluetoothStarter(const TrkDevicePtr& trkDevice,
+                                     QObject *listenerParent,
+                                     QObject *parent = 0);
+
+    QObject *m_listenerParent;
+};
+
+} // namespace trk
+
+#endif // COMMUNICATIONSTARTER_H
Index: /trunk/tools/runonphone/symbianutils/launcher.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/launcher.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/launcher.cpp	(revision 769)
@@ -0,0 +1,740 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "launcher.h"
+#include "trkutils.h"
+#include "trkutils_p.h"
+#include "trkdevice.h"
+#include "bluetoothlistener.h"
+
+#include <QtCore/QTimer>
+#include <QtCore/QDateTime>
+#include <QtCore/QVariant>
+#include <QtCore/QDebug>
+#include <QtCore/QQueue>
+#include <QtCore/QFile>
+#include <QtCore/QScopedPointer>
+
+namespace trk {
+
+struct LauncherPrivate {
+    struct CopyState {
+        QString sourceFileName;
+        QString destinationFileName;
+        uint copyFileHandle;
+        QScopedPointer<QByteArray> data;
+        int position;
+    };
+
+    explicit LauncherPrivate(const TrkDevicePtr &d);
+
+    TrkDevicePtr m_device;
+    QByteArray m_trkReadBuffer;
+    Launcher::State m_state;
+
+    void logMessage(const QString &msg);
+    // Debuggee state
+    Session m_session; // global-ish data (process id, target information)
+
+    CopyState m_copyState;
+    QString m_fileName;
+    QStringList m_commandLineArgs;
+    QString m_installFileName;
+    int m_verbose;
+    Launcher::Actions m_startupActions;
+    bool m_closeDevice;
+};
+
+LauncherPrivate::LauncherPrivate(const TrkDevicePtr &d) :
+    m_device(d),
+    m_state(Launcher::Disconnected),
+    m_verbose(0),
+    m_closeDevice(true)
+{
+    if (m_device.isNull())
+        m_device = TrkDevicePtr(new TrkDevice);
+}
+
+Launcher::Launcher(Actions startupActions,
+                   const TrkDevicePtr &dev,
+                   QObject *parent) :
+    QObject(parent),
+    d(new LauncherPrivate(dev))
+{
+    d->m_startupActions = startupActions;
+    connect(d->m_device.data(), SIGNAL(messageReceived(trk::TrkResult)), this, SLOT(handleResult(trk::TrkResult)));    
+    connect(this, SIGNAL(finished()), d->m_device.data(), SLOT(close()));
+}
+
+Launcher::~Launcher()
+{
+    logMessage("Shutting down.\n");
+    delete d;
+}
+
+Launcher::State Launcher::state() const
+{
+    return d->m_state;
+}
+
+void Launcher::setState(State s)
+{
+    if (s != d->m_state) {
+        d->m_state = s;
+        emit stateChanged(s);
+    }
+}
+
+void Launcher::addStartupActions(trk::Launcher::Actions startupActions)
+{
+    d->m_startupActions = Actions(d->m_startupActions | startupActions);
+}
+
+void Launcher::setTrkServerName(const QString &name)
+{
+    d->m_device->setPort(name);
+}
+
+QString Launcher::trkServerName() const
+{
+    return d->m_device->port();
+}
+
+TrkDevicePtr Launcher::trkDevice() const
+{
+    return d->m_device;
+}
+
+void Launcher::setFileName(const QString &name)
+{
+    d->m_fileName = name;
+}
+
+void Launcher::setCopyFileName(const QString &srcName, const QString &dstName)
+{
+    d->m_copyState.sourceFileName = srcName;
+    d->m_copyState.destinationFileName = dstName;
+}
+
+void Launcher::setInstallFileName(const QString &name)
+{
+    d->m_installFileName = name;
+}
+
+void Launcher::setCommandLineArgs(const QStringList &args)
+{
+    d->m_commandLineArgs = args;
+}
+
+void Launcher::setSerialFrame(bool b)
+{
+    d->m_device->setSerialFrame(b);
+}
+
+bool Launcher::serialFrame() const
+{
+    return d->m_device->serialFrame();
+}
+
+
+bool Launcher::closeDevice() const
+{
+    return d->m_closeDevice;
+}
+
+void Launcher::setCloseDevice(bool c)
+{
+    d->m_closeDevice = c;
+}
+
+bool Launcher::startServer(QString *errorMessage)
+{
+    errorMessage->clear();
+    if (d->m_verbose) {
+        const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Arguments=%3 Package=%4 Remote Package=%5 Install file=%6")
+                            .arg(trkServerName(), d->m_fileName,
+                                 d->m_commandLineArgs.join(QString(QLatin1Char(' '))),
+                                 d->m_copyState.sourceFileName, d->m_copyState.destinationFileName, d->m_installFileName);
+        logMessage(msg);
+    }
+    if (d->m_startupActions & ActionCopy) {
+        if (d->m_copyState.sourceFileName.isEmpty()) {
+            qWarning("No local filename given for copying package.");
+            return false;
+        } else if (d->m_copyState.destinationFileName.isEmpty()) {
+            qWarning("No remote filename given for copying package.");
+            return false;
+        }
+    }
+    if (d->m_startupActions & ActionInstall && d->m_installFileName.isEmpty()) {
+        qWarning("No package name given for installing.");
+        return false;
+    }
+    if (d->m_startupActions & ActionRun && d->m_fileName.isEmpty()) {
+        qWarning("No remote executable given for running.");
+        return false;
+    }
+    if (!d->m_device->isOpen() && !d->m_device->open(errorMessage))
+        return false;
+    if (d->m_closeDevice) {
+        connect(this, SIGNAL(finished()), d->m_device.data(), SLOT(close()));
+    } else {
+        disconnect(this, SIGNAL(finished()), d->m_device.data(), 0);
+    }
+    setState(Connecting);
+    // Set up the temporary 'waiting' state if we do not get immediate connection
+    QTimer::singleShot(1000, this, SLOT(slotWaitingForTrk()));
+    d->m_device->sendTrkInitialPing();
+    d->m_device->sendTrkMessage(TrkDisconnect); // Disconnect, as trk might be still connected
+    d->m_device->sendTrkMessage(TrkSupported, TrkCallback(this, &Launcher::handleSupportMask));
+    d->m_device->sendTrkMessage(TrkCpuType, TrkCallback(this, &Launcher::handleCpuType));
+    d->m_device->sendTrkMessage(TrkVersions, TrkCallback(this, &Launcher::handleTrkVersion));
+    if (d->m_startupActions != ActionPingOnly)
+        d->m_device->sendTrkMessage(TrkConnect, TrkCallback(this, &Launcher::handleConnect));
+    return true;
+}
+
+void Launcher::slotWaitingForTrk()
+{
+    // Set temporary state if we are still in connected state
+    if (state() == Connecting)
+        setState(WaitingForTrk);
+}
+
+void Launcher::handleConnect(const TrkResult &result)
+{
+    if (result.errorCode()) {
+        emit canNotConnect(result.errorString());
+        return;
+    }
+    setState(Connected);
+    if (d->m_startupActions & ActionCopy)
+        copyFileToRemote();
+    else if (d->m_startupActions & ActionInstall)
+        installRemotePackageSilently();
+    else if (d->m_startupActions & ActionRun)
+        startInferiorIfNeeded();
+}
+
+void Launcher::setVerbose(int v)
+{
+    d->m_verbose = v;
+    d->m_device->setVerbose(v);
+}
+
+void Launcher::logMessage(const QString &msg)
+{
+    if (d->m_verbose)
+        qDebug() << "LAUNCHER: " << qPrintable(msg);
+}
+
+void Launcher::terminate()
+{
+    switch (state()) {
+    case DeviceDescriptionReceived:
+    case Connected:
+        if (d->m_session.pid) {
+            QByteArray ba;
+            appendShort(&ba, 0x0000, TargetByteOrder);
+            appendInt(&ba, d->m_session.pid, TargetByteOrder);
+            d->m_device->sendTrkMessage(TrkDeleteItem, TrkCallback(this, &Launcher::handleRemoteProcessKilled), ba);
+            return;
+        }
+        if (d->m_copyState.copyFileHandle)
+            closeRemoteFile(true);
+        disconnectTrk();
+        break;
+    case Disconnected:
+        break;
+    case Connecting:
+    case WaitingForTrk:
+        setState(Disconnected);
+        emit finished();
+        break;
+    }
+}
+
+void Launcher::handleRemoteProcessKilled(const TrkResult &result)
+{
+    Q_UNUSED(result)
+    disconnectTrk();
+}
+
+QString Launcher::msgStopped(uint pid, uint tid, uint address, const QString &why)
+{
+    return QString::fromLatin1("Process %1, thread %2 stopped at 0x%3: %4").
+            arg(pid).arg(tid).arg(address, 0, 16).
+            arg(why.isEmpty() ? QString::fromLatin1("<Unknown reason>") : why);
+}
+
+bool Launcher::parseNotifyStopped(const QByteArray &dataBA,
+                                  uint *pid, uint *tid, uint *address,
+                                  QString *why /* = 0 */)
+{
+    if (why)
+        why->clear();
+    *address = *pid = *tid = 0;
+    if (dataBA.size() < 12)
+        return false;
+    const char *data = dataBA.data();
+    *address = extractInt(data);
+    *pid = extractInt(data + 4);
+    *tid = extractInt(data + 8);
+    if (why && dataBA.size() >= 14) {
+        const unsigned short len = extractShort(data + 12);
+        if (len > 0)
+            *why = QString::fromLatin1(data + 14, len);
+    }
+    return true;
+}
+
+void Launcher::handleResult(const TrkResult &result)
+{
+    QByteArray prefix = "READ BUF:                                       ";
+    QByteArray str = result.toString().toUtf8();
+    if (result.isDebugOutput) { // handle application output
+        logMessage("APPLICATION OUTPUT: " + result.data);
+        emit applicationOutputReceived(result.data);
+        return;
+    }
+    switch (result.code) {
+        case TrkNotifyAck:
+            break;
+        case TrkNotifyNak: { // NAK
+            logMessage(prefix + "NAK: " + str);
+            //logMessage(prefix << "TOKEN: " << result.token);
+            logMessage(prefix + "ERROR: " + errorMessage(result.data.at(0)));
+            break;
+        }
+        case TrkNotifyStopped: { // Notified Stopped
+            QString reason;
+            uint pc;
+            uint pid;
+            uint tid;
+            parseNotifyStopped(result.data, &pid, &tid, &pc, &reason);
+            logMessage(prefix + msgStopped(pid, tid, pc, reason));
+            emit(processStopped(pc, pid, tid, reason));
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+        case TrkNotifyException: { // Notify Exception (obsolete)
+            logMessage(prefix + "NOTE: EXCEPTION  " + str);
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+        case TrkNotifyInternalError: { //
+            logMessage(prefix + "NOTE: INTERNAL ERROR: " + str);
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+
+        // target->host OS notification
+        case TrkNotifyCreated: { // Notify Created
+            /*
+            const char *data = result.data.data();
+            byte error = result.data.at(0);
+            byte type = result.data.at(1); // type: 1 byte; for dll item, this value is 2.
+            uint pid = extractInt(data + 2); //  ProcessID: 4 bytes;
+            uint tid = extractInt(data + 6); //threadID: 4 bytes
+            uint codeseg = extractInt(data + 10); //code address: 4 bytes; code base address for the library
+            uint dataseg = extractInt(data + 14); //data address: 4 bytes; data base address for the library
+            uint len = extractShort(data + 18); //length: 2 bytes; length of the library name string to follow
+            QByteArray name = result.data.mid(20, len); // name: library name
+
+            logMessage(prefix + "NOTE: LIBRARY LOAD: " + str);
+            logMessage(prefix + "TOKEN: " + result.token);
+            logMessage(prefix + "ERROR: " + int(error));
+            logMessage(prefix + "TYPE:  " + int(type));
+            logMessage(prefix + "PID:   " + pid);
+            logMessage(prefix + "TID:   " + tid);
+            logMessage(prefix + "CODE:  " + codeseg);
+            logMessage(prefix + "DATA:  " + dataseg);
+            logMessage(prefix + "LEN:   " + len);
+            logMessage(prefix + "NAME:  " + name);
+            */
+
+            if (result.data.size() < 10)
+                break;
+            QByteArray ba;
+            ba.append(result.data.mid(2, 8));
+            d->m_device->sendTrkMessage(TrkContinue, TrkCallback(), ba, "CONTINUE");
+            //d->m_device->sendTrkAck(result.token)
+            break;
+        }
+        case TrkNotifyDeleted: { // NotifyDeleted
+            const ushort itemType = (unsigned char)result.data.at(1);
+            const ushort len = result.data.size() > 12 ? extractShort(result.data.data() + 10) : ushort(0);
+            const QString name = len ? QString::fromAscii(result.data.mid(12, len)) : QString();
+            logMessage(QString::fromLatin1("%1 %2 UNLOAD: %3").
+                       arg(QString::fromAscii(prefix)).arg(itemType ? QLatin1String("LIB") : QLatin1String("PROCESS")).
+                       arg(name));
+            d->m_device->sendTrkAck(result.token);
+            if (itemType == 0 // process
+                && result.data.size() >= 10
+                && d->m_session.pid == extractInt(result.data.data() + 6)) {
+                disconnectTrk();
+            }
+            break;
+        }
+        case TrkNotifyProcessorStarted: { // NotifyProcessorStarted
+            logMessage(prefix + "NOTE: PROCESSOR STARTED: " + str);
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+        case TrkNotifyProcessorStandBy: { // NotifyProcessorStandby
+            logMessage(prefix + "NOTE: PROCESSOR STANDBY: " + str);
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+        case TrkNotifyProcessorReset: { // NotifyProcessorReset
+            logMessage(prefix + "NOTE: PROCESSOR RESET: " + str);
+            d->m_device->sendTrkAck(result.token);
+            break;
+        }
+        default: {
+            logMessage(prefix + "INVALID: " + str);
+            break;
+        }
+    }
+}
+
+QString Launcher::deviceDescription(unsigned verbose) const
+{
+    return d->m_session.deviceDescription(verbose);
+}
+
+void Launcher::handleTrkVersion(const TrkResult &result)
+{
+    if (result.errorCode() || result.data.size() < 5) {
+        if (d->m_startupActions == ActionPingOnly) {
+            setState(Disconnected);
+            emit finished();
+        }
+        return;
+    }
+    d->m_session.trkAppVersion.trkMajor = result.data.at(1);
+    d->m_session.trkAppVersion.trkMinor = result.data.at(2);
+    d->m_session.trkAppVersion.protocolMajor = result.data.at(3);
+    d->m_session.trkAppVersion.protocolMinor = result.data.at(4);
+    setState(DeviceDescriptionReceived);
+    // Ping mode: Log & Terminate
+    if (d->m_startupActions == ActionPingOnly) {
+        qWarning("%s", qPrintable(deviceDescription()));
+        setState(Disconnected);
+        emit finished();
+    }
+}
+
+void Launcher::handleFileCreation(const TrkResult &result)
+{
+    if (result.errorCode() || result.data.size() < 6) {
+        emit canNotCreateFile(d->m_copyState.destinationFileName, result.errorString());
+        disconnectTrk();
+        return;
+    }
+    const char *data = result.data.data();
+    d->m_copyState.copyFileHandle = extractInt(data + 2);
+    QFile file(d->m_copyState.sourceFileName);
+    file.open(QIODevice::ReadOnly);
+    d->m_copyState.data.reset(new QByteArray(file.readAll()));
+    d->m_copyState.position = 0;
+    file.close();
+    continueCopying();
+}
+
+void Launcher::handleCopy(const TrkResult &result)
+{
+    if (result.errorCode() || result.data.size() < 4) {
+        closeRemoteFile(true);
+        emit canNotWriteFile(d->m_copyState.destinationFileName, result.errorString());
+        disconnectTrk();
+    } else {
+        continueCopying(extractShort(result.data.data() + 2));
+    }
+}
+
+void Launcher::continueCopying(uint lastCopiedBlockSize)
+{
+    int size = d->m_copyState.data->length();
+    d->m_copyState.position += lastCopiedBlockSize;
+    if (size == 0)
+        emit copyProgress(100);
+    else {
+        int percent = qMin((d->m_copyState.position*100)/size, 100);
+        emit copyProgress(percent);
+    }
+    if (d->m_copyState.position < size) {
+        QByteArray ba;
+        appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder);
+        appendString(&ba, d->m_copyState.data->mid(d->m_copyState.position, 2048), TargetByteOrder, false);
+        d->m_device->sendTrkMessage(TrkWriteFile, TrkCallback(this, &Launcher::handleCopy), ba);
+    } else {
+        closeRemoteFile();
+    }
+}
+
+void Launcher::closeRemoteFile(bool failed)
+{
+    QByteArray ba;
+    appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder);
+    appendDateTime(&ba, QDateTime::currentDateTime(), TargetByteOrder);
+    d->m_device->sendTrkMessage(TrkCloseFile,
+                               failed ? TrkCallback() : TrkCallback(this, &Launcher::handleFileCopied),
+                               ba);
+    d->m_copyState.data.reset();
+    d->m_copyState.copyFileHandle = 0;
+    d->m_copyState.position = 0;
+}
+
+void Launcher::handleFileCopied(const TrkResult &result)
+{
+    if (result.errorCode())
+        emit canNotCloseFile(d->m_copyState.destinationFileName, result.errorString());
+    if (d->m_startupActions & ActionInstall)
+        installRemotePackageSilently();
+    else if (d->m_startupActions & ActionRun)
+        startInferiorIfNeeded();
+    else
+        disconnectTrk();
+}
+
+void Launcher::handleCpuType(const TrkResult &result)
+{
+    logMessage("HANDLE CPU TYPE: " + result.toString());
+    if(result.errorCode() || result.data.size() < 7)
+        return;
+    //---TRK------------------------------------------------------
+    //  Command: 0x80 Acknowledge
+    //    Error: 0x00
+    // [80 03 00  04 00 00 04 00 00 00]
+    d->m_session.cpuMajor = result.data.at(1);
+    d->m_session.cpuMinor = result.data.at(2);
+    d->m_session.bigEndian = result.data.at(3);
+    d->m_session.defaultTypeSize = result.data.at(4);
+    d->m_session.fpTypeSize = result.data.at(5);
+    d->m_session.extended1TypeSize = result.data.at(6);
+    //d->m_session.extended2TypeSize = result.data[6];
+}
+
+void Launcher::handleCreateProcess(const TrkResult &result)
+{
+    if (result.errorCode()) {
+        emit canNotRun(result.errorString());
+        disconnectTrk();
+        return;
+    }
+    //  40 00 00]
+    //logMessage("       RESULT: " + result.toString());
+    // [80 08 00   00 00 01 B5   00 00 01 B6   78 67 40 00   00 40 00 00]
+    const char *data = result.data.data();
+    d->m_session.pid = extractInt(data + 1);
+    d->m_session.tid = extractInt(data + 5);
+    d->m_session.codeseg = extractInt(data + 9);
+    d->m_session.dataseg = extractInt(data + 13);
+    if (d->m_verbose) {
+        const QString msg = QString::fromLatin1("Process id: %1 Thread id: %2 code: 0x%3 data: 0x%4").
+                            arg(d->m_session.pid).arg(d->m_session.tid).arg(d->m_session.codeseg, 0, 16).
+                            arg(d->m_session.dataseg,  0 ,16);
+        logMessage(msg);
+    }
+    emit applicationRunning(d->m_session.pid);
+    QByteArray ba;
+    appendInt(&ba, d->m_session.pid);
+    appendInt(&ba, d->m_session.tid);
+    d->m_device->sendTrkMessage(TrkContinue, TrkCallback(), ba, "CONTINUE");
+}
+
+void Launcher::handleWaitForFinished(const TrkResult &result)
+{
+    logMessage("   FINISHED: " + stringFromArray(result.data));
+    setState(Disconnected);
+    emit finished();
+}
+
+void Launcher::handleSupportMask(const TrkResult &result)
+{
+    if (result.errorCode() || result.data.size() < 32)
+        return;
+    const char *data = result.data.data() + 1;
+
+    QString str = QLatin1String("SUPPORTED: ");
+    for (int i = 0; i < 32; ++i) {
+        //str.append("  [" + formatByte(data[i]) + "]: ");
+        for (int j = 0; j < 8; ++j) {
+            if (data[i] & (1 << j)) {
+                str.append(QString::number(i * 8 + j, 16));
+                str.append(QLatin1Char(' '));
+            }
+        }
+    }
+    logMessage(str);
+}
+
+void Launcher::cleanUp()
+{
+    //
+    //---IDE------------------------------------------------------
+    //  Command: 0x41 Delete Item
+    //  Sub Cmd: Delete Process
+    //ProcessID: 0x0000071F (1823)
+    // [41 24 00 00 00 00 07 1F]
+    QByteArray ba(2, char(0));
+    appendInt(&ba, d->m_session.pid);
+    d->m_device->sendTrkMessage(TrkDeleteItem, TrkCallback(), ba, "Delete process");
+
+    //---TRK------------------------------------------------------
+    //  Command: 0x80 Acknowledge
+    //    Error: 0x00
+    // [80 24 00]
+
+    //---IDE------------------------------------------------------
+    //  Command: 0x1C Clear Break
+    // [1C 25 00 00 00 0A 78 6A 43 40]
+
+        //---TRK------------------------------------------------------
+        //  Command: 0xA1 Notify Deleted
+        // [A1 09 00 00 00 00 00 00 00 00 07 1F]
+        //---IDE------------------------------------------------------
+        //  Command: 0x80 Acknowledge
+        //    Error: 0x00
+        // [80 09 00]
+
+    //---TRK------------------------------------------------------
+    //  Command: 0x80 Acknowledge
+    //    Error: 0x00
+    // [80 25 00]
+
+    //---IDE------------------------------------------------------
+    //  Command: 0x1C Clear Break
+    // [1C 26 00 00 00 0B 78 6A 43 70]
+    //---TRK------------------------------------------------------
+    //  Command: 0x80 Acknowledge
+    //    Error: 0x00
+    // [80 26 00]
+
+
+    //---IDE------------------------------------------------------
+    //  Command: 0x02 Disconnect
+    // [02 27]
+//    sendTrkMessage(0x02, TrkCallback(this, &Launcher::handleDisconnect));
+    //---TRK------------------------------------------------------
+    //  Command: 0x80 Acknowledge
+    // Error: 0x00
+}
+
+void Launcher::disconnectTrk()
+{
+    d->m_device->sendTrkMessage(TrkDisconnect, TrkCallback(this, &Launcher::handleWaitForFinished));
+}
+
+void Launcher::copyFileToRemote()
+{
+    emit copyingStarted();
+    QByteArray ba;
+    ba.append(char(10));
+    appendString(&ba, d->m_copyState.destinationFileName.toLocal8Bit(), TargetByteOrder, false);
+    d->m_device->sendTrkMessage(TrkOpenFile, TrkCallback(this, &Launcher::handleFileCreation), ba);
+}
+
+void Launcher::installRemotePackageSilently()
+{
+    emit installingStarted();
+    QByteArray ba;
+    ba.append('C');
+    appendString(&ba, d->m_installFileName.toLocal8Bit(), TargetByteOrder, false);
+    d->m_device->sendTrkMessage(TrkInstallFile, TrkCallback(this, &Launcher::handleInstallPackageFinished), ba);
+}
+
+void Launcher::handleInstallPackageFinished(const TrkResult &result)
+{
+    if (result.errorCode()) {
+        emit canNotInstall(d->m_installFileName, result.errorString());
+        disconnectTrk();
+        return;
+    } else {
+        emit installingFinished();
+    }
+    if (d->m_startupActions & ActionRun) {
+        startInferiorIfNeeded();
+    } else {
+        disconnectTrk();
+    }
+}
+
+QByteArray Launcher::startProcessMessage(const QString &executable,
+                                         const QStringList &arguments)
+{
+    // It's not started yet
+    QByteArray ba;
+    appendShort(&ba, 0, TargetByteOrder); // create new process
+    ba.append(char(0)); // options - currently unused
+    if(arguments.isEmpty()) {
+        appendString(&ba, executable.toLocal8Bit(), TargetByteOrder);
+        return ba;
+    }
+    // Append full command line as one string (leading length information).
+    QByteArray commandLineBa;
+    commandLineBa.append(executable.toLocal8Bit());
+    commandLineBa.append('\0');
+    commandLineBa.append(arguments.join(QString(QLatin1Char(' '))).toLocal8Bit());
+    appendString(&ba, commandLineBa, TargetByteOrder);
+    return ba;
+}
+
+void Launcher::startInferiorIfNeeded()
+{
+    emit startingApplication();
+    if (d->m_session.pid != 0) {
+        logMessage("Process already 'started'");
+        return;
+    }
+    d->m_device->sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess),
+                                startProcessMessage(d->m_fileName, d->m_commandLineArgs)); // Create Item
+}
+
+void Launcher::resumeProcess(uint pid, uint tid)
+{
+    QByteArray ba;
+    appendInt(&ba, pid, BigEndian);
+    appendInt(&ba, tid, BigEndian);
+    d->m_device->sendTrkMessage(TrkContinue, TrkCallback(), ba, "CONTINUE");
+}
+} // namespace trk
Index: /trunk/tools/runonphone/symbianutils/launcher.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/launcher.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/launcher.h	(revision 769)
@@ -0,0 +1,179 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LAUNCHER_H
+#define LAUNCHER_H
+
+#include "trkdevice.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QVariant>
+#include <QtCore/QSharedPointer>
+
+namespace trk {
+
+struct TrkResult;
+struct TrkMessage;
+struct LauncherPrivate;
+
+typedef QSharedPointer<TrkDevice> TrkDevicePtr;
+
+class SYMBIANUTILS_EXPORT Launcher : public QObject
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(Launcher)
+public:
+    typedef void (Launcher::*TrkCallBack)(const TrkResult &);
+
+    enum Actions {
+        ActionPingOnly = 0x0,
+        ActionCopy = 0x1,
+        ActionInstall = 0x2,
+        ActionCopyInstall = ActionCopy | ActionInstall,
+        ActionRun = 0x4,
+        ActionCopyRun = ActionCopy | ActionRun,
+        ActionInstallRun = ActionInstall | ActionRun,
+        ActionCopyInstallRun = ActionCopy | ActionInstall | ActionRun
+    };
+
+    enum State { Disconnected, Connecting, Connected,
+                 WaitingForTrk, // This occurs only if the initial ping times out after
+                                // a reasonable timeout, indicating that Trk is not
+                                // running. Note that this will never happen with
+                                // Bluetooth as communication immediately starts
+                                // after connecting.
+                 DeviceDescriptionReceived };
+
+    explicit Launcher(trk::Launcher::Actions startupActions = trk::Launcher::ActionPingOnly,
+                      const TrkDevicePtr &trkDevice = TrkDevicePtr(),
+                      QObject *parent = 0);
+    ~Launcher();
+
+    State state() const;
+
+    void addStartupActions(trk::Launcher::Actions startupActions);
+    void setTrkServerName(const QString &name);
+    QString trkServerName() const;
+    void setFileName(const QString &name);
+    void setCopyFileName(const QString &srcName, const QString &dstName);
+    void setInstallFileName(const QString &name);
+    void setCommandLineArgs(const QStringList &args);
+    bool startServer(QString *errorMessage);
+    void setVerbose(int v);    
+    void setSerialFrame(bool b);
+    bool serialFrame() const;
+    // Close device or leave it open
+    bool closeDevice() const;
+    void setCloseDevice(bool c);
+
+    TrkDevicePtr trkDevice() const;
+
+    // becomes valid after successful execution of ActionPingOnly
+    QString deviceDescription(unsigned verbose = 0u) const;
+
+    static QByteArray startProcessMessage(const QString &executable,
+                                          const QStringList &arguments);
+    // Parse a TrkNotifyStopped message
+    static bool parseNotifyStopped(const QByteArray &a,
+                                   uint *pid, uint *tid, uint *address,
+                                   QString *why = 0);
+    // Helper message
+    static QString msgStopped(uint pid, uint tid, uint address, const QString &why);
+
+signals:
+    void copyingStarted();
+    void canNotConnect(const QString &errorMessage);
+    void canNotCreateFile(const QString &filename, const QString &errorMessage);
+    void canNotWriteFile(const QString &filename, const QString &errorMessage);
+    void canNotCloseFile(const QString &filename, const QString &errorMessage);
+    void installingStarted();
+    void canNotInstall(const QString &packageFilename, const QString &errorMessage);
+    void installingFinished();
+    void startingApplication();
+    void applicationRunning(uint pid);
+    void canNotRun(const QString &errorMessage);
+    void finished();
+    void applicationOutputReceived(const QString &output);
+    void copyProgress(int percent);
+    void stateChanged(int);
+    void processStopped(uint pc, uint pid, uint tid, const QString& reason);
+
+public slots:
+    void terminate();
+    void resumeProcess(uint pid, uint tid);
+
+private slots:
+    void handleResult(const trk::TrkResult &data);
+    void slotWaitingForTrk();
+
+private:
+    // kill process and breakpoints
+    void cleanUp();
+    void disconnectTrk();
+
+    void handleRemoteProcessKilled(const TrkResult &result);
+    void handleConnect(const TrkResult &result);
+    void handleFileCreation(const TrkResult &result);
+    void handleCopy(const TrkResult &result);
+    void continueCopying(uint lastCopiedBlockSize = 0);
+    void closeRemoteFile(bool failed = false);
+    void handleFileCopied(const TrkResult &result);
+    void handleInstallPackageFinished(const TrkResult &result);
+    void handleCpuType(const TrkResult &result);
+    void handleCreateProcess(const TrkResult &result);
+    void handleWaitForFinished(const TrkResult &result);
+    void handleStop(const TrkResult &result);
+    void handleSupportMask(const TrkResult &result);
+    void handleTrkVersion(const TrkResult &result);
+
+    void copyFileToRemote();
+    void installRemotePackageSilently();
+    void startInferiorIfNeeded();
+
+    void logMessage(const QString &msg);
+    void setState(State s);
+
+    LauncherPrivate *d;
+};
+
+} // namespace Trk
+
+#endif // LAUNCHER_H
Index: /trunk/tools/runonphone/symbianutils/symbiandevicemanager.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/symbiandevicemanager.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/symbiandevicemanager.cpp	(revision 769)
@@ -0,0 +1,331 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "symbiandevicemanager.h"
+
+#include <QtCore/QSettings>
+#include <QtCore/QStringList>
+#include <QtCore/QFileInfo>
+#include <QtCore/QtDebug>
+#include <QtCore/QTextStream>
+#include <QtCore/QSharedData>
+#include <QtCore/QScopedPointer>
+
+namespace SymbianUtils {
+
+enum { debug = 0 };
+
+static const char REGKEY_CURRENT_CONTROL_SET[] = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet";
+static const char USBSER[] = "Services/usbser/Enum";
+
+const char *SymbianDeviceManager::linuxBlueToothDeviceRootC = "/dev/rfcomm";
+
+// ------------- SymbianDevice
+class SymbianDeviceData : public QSharedData {
+public:
+    SymbianDeviceData() : type(SerialPortCommunication) {}
+
+    QString portName;
+    QString friendlyName;
+    QString deviceDesc;
+    QString manufacturer;
+    DeviceCommunicationType type;
+};
+
+SymbianDevice::SymbianDevice(SymbianDeviceData *data) :
+    m_data(data)
+{
+
+}
+
+SymbianDevice::SymbianDevice() :
+    m_data(new SymbianDeviceData)
+{
+}
+SymbianDevice::SymbianDevice(const SymbianDevice &rhs) :
+        m_data(rhs.m_data)
+{
+}
+
+SymbianDevice &SymbianDevice::operator=(const SymbianDevice &rhs)
+{
+    if (this != &rhs)
+        m_data = rhs.m_data;
+    return *this;
+}
+
+SymbianDevice::~SymbianDevice()
+{
+}
+
+QString SymbianDevice::portName() const
+{
+    return m_data->portName;
+}
+
+QString SymbianDevice::friendlyName() const
+{
+    return m_data->friendlyName;
+}
+
+QString SymbianDevice::deviceDesc() const
+{
+    return m_data->deviceDesc;
+}
+
+QString SymbianDevice::manufacturer() const
+{
+    return m_data->manufacturer;
+}
+
+DeviceCommunicationType SymbianDevice::type() const
+{
+    return m_data->type;
+}
+
+bool SymbianDevice::isNull() const
+{
+    return !m_data->portName.isEmpty();
+}
+
+QString SymbianDevice::toString() const
+{
+    QString rc;
+    QTextStream str(&rc);
+    format(str);
+    return rc;
+}
+
+void SymbianDevice::format(QTextStream &str) const
+{
+    str << (m_data->type == BlueToothCommunication ? "Bluetooth: " : "Serial: ")
+        << m_data->portName;
+    if (!m_data->friendlyName.isEmpty()) {
+        str << " (" << m_data->friendlyName;
+        if (!m_data->deviceDesc.isEmpty())
+          str << " / " << m_data->deviceDesc;
+        str << ')';
+    }
+    if (!m_data->manufacturer.isEmpty())
+        str << " [" << m_data->manufacturer << ']';
+}
+
+// Compare by port and friendly name
+int SymbianDevice::compare(const SymbianDevice &rhs) const
+{
+    if (const int prc = m_data->portName.compare(rhs.m_data->portName))
+        return prc;
+    if (const int frc = m_data->friendlyName.compare(rhs.m_data->friendlyName))
+        return frc;
+    return 0;
+}
+
+QDebug operator<<(QDebug d, const SymbianDevice &cd)
+{
+    d.nospace() << cd.toString();
+    return d;
+}
+
+// ------------- SymbianDeviceManagerPrivate
+struct SymbianDeviceManagerPrivate {
+    SymbianDeviceManagerPrivate() : m_initialized(false) {}
+
+    bool m_initialized;
+    SymbianDeviceManager::SymbianDeviceList m_devices;
+};
+
+SymbianDeviceManager::SymbianDeviceManager(QObject *parent) :
+    QObject(parent),
+    d(new SymbianDeviceManagerPrivate)
+{
+}
+
+SymbianDeviceManager::~SymbianDeviceManager()
+{
+    delete d;
+}
+
+SymbianDeviceManager::SymbianDeviceList SymbianDeviceManager::devices() const
+{
+    if (!d->m_initialized)
+        const_cast<SymbianDeviceManager*>(this)->update(false);
+    return d->m_devices;
+}
+
+QString SymbianDeviceManager::toString() const
+{
+    QString rc;
+    QTextStream str(&rc);
+    const int count = d->m_devices.size();
+    for (int i = 0; i < count; i++) {
+        str << '#' << i << ' ';
+        d->m_devices.at(i).format(str);
+        str << '\n';
+    }
+    return rc;
+}
+
+QString SymbianDeviceManager::friendlyNameForPort(const QString &port) const
+{
+    foreach (const SymbianDevice &device, d->m_devices) {
+        if (device.portName() == port)
+            return device.friendlyName();
+    }
+    return QString();
+}
+
+void SymbianDeviceManager::update()
+{
+    update(true);
+}
+
+void SymbianDeviceManager::update(bool emitSignals)
+{
+    typedef SymbianDeviceList::iterator SymbianDeviceListIterator;
+
+    if (debug)
+        qDebug(">SerialDeviceLister::update(%d)\n%s", int(emitSignals),
+               qPrintable(toString()));
+
+    d->m_initialized = true;
+    // Get ordered new list
+    SymbianDeviceList newDevices = serialPorts() + blueToothDevices();
+    if (newDevices.size() > 1)
+        qStableSort(newDevices.begin(), newDevices.end());
+    if (d->m_devices == newDevices) // Happy, nothing changed.
+        return;
+    // Merge the lists and emit the respective added/removed signals, assuming
+    // no one can plug a different device on the same port at the speed of lightning
+    if (!d->m_devices.isEmpty()) {
+        // Find deleted devices
+        for (SymbianDeviceListIterator oldIt = d->m_devices.begin(); oldIt != d->m_devices.end(); ) {
+            if (newDevices.contains(*oldIt)) {
+                ++oldIt;
+            } else {
+                const SymbianDevice toBeDeleted = *oldIt;
+                oldIt = d->m_devices.erase(oldIt);
+                if (emitSignals)
+                    emit deviceRemoved(toBeDeleted);
+            }
+        }
+    }
+    if (!newDevices.isEmpty()) {
+        // Find new devices and insert in order
+        foreach(const SymbianDevice &newDevice, newDevices) {
+            if (!d->m_devices.contains(newDevice)) {
+                d->m_devices.append(newDevice);
+                if (emitSignals)
+                    emit deviceAdded(newDevice);
+            }
+        }
+        if (d->m_devices.size() > 1)
+            qStableSort(d->m_devices.begin(), d->m_devices.end());
+    }
+    if (emitSignals)
+        emit updated();
+
+    if (debug)
+        qDebug("<SerialDeviceLister::update\n%s\n", qPrintable(toString()));
+}
+
+SymbianDeviceManager::SymbianDeviceList SymbianDeviceManager::serialPorts() const
+{
+    SymbianDeviceList rc;
+#ifdef Q_OS_WIN
+    const QSettings registry(REGKEY_CURRENT_CONTROL_SET, QSettings::NativeFormat);
+    const QString usbSerialRootKey = QLatin1String(USBSER) + QLatin1Char('/');
+    const int count = registry.value(usbSerialRootKey + QLatin1String("Count")).toInt();
+    for (int i = 0; i < count; ++i) {
+        QString driver = registry.value(usbSerialRootKey + QString::number(i)).toString();
+        if (driver.contains(QLatin1String("JAVACOMM"))) {
+            driver.replace(QLatin1Char('\\'), QLatin1Char('/'));
+            const QString driverRootKey = QLatin1String("Enum/") + driver + QLatin1Char('/');
+            if (debug > 1)
+                qDebug() << "SerialDeviceLister::serialPorts(): Checking " << i << count
+                         << REGKEY_CURRENT_CONTROL_SET << usbSerialRootKey << driverRootKey;
+            QScopedPointer<SymbianDeviceData> device(new SymbianDeviceData);
+            device->type = SerialPortCommunication;
+            device->friendlyName = registry.value(driverRootKey + QLatin1String("FriendlyName")).toString();
+            device->portName = registry.value(driverRootKey + QLatin1String("Device Parameters/PortName")).toString();
+            device->deviceDesc = registry.value(driverRootKey + QLatin1String("DeviceDesc")).toString();
+            device->manufacturer = registry.value(driverRootKey + QLatin1String("Mfg")).toString();
+            rc.append(SymbianDevice(device.take()));
+        }
+    }
+#endif
+    return rc;
+}
+
+SymbianDeviceManager::SymbianDeviceList SymbianDeviceManager::blueToothDevices() const
+{
+    SymbianDeviceList rc;
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+    // Bluetooth devices are created on connection. List the existing ones
+    // or at least the first one.
+    const QString prefix = QLatin1String(linuxBlueToothDeviceRootC);
+    const QString friendlyFormat = QLatin1String("Bluetooth device (%1)");
+    for (int d = 0; d < 4; d++) {
+        QScopedPointer<SymbianDeviceData> device(new SymbianDeviceData);
+        device->type = BlueToothCommunication;
+        device->portName = prefix + QString::number(d);
+        if (d == 0 || QFileInfo(device->portName).exists()) {
+            device->friendlyName = friendlyFormat.arg(device->portName);
+            rc.push_back(SymbianDevice(device.take()));
+        }
+    }
+#endif
+    return rc;
+}
+
+Q_GLOBAL_STATIC(SymbianDeviceManager, symbianDeviceManager)
+
+SymbianDeviceManager *SymbianDeviceManager::instance()
+{
+    return symbianDeviceManager();
+}
+
+QDebug operator<<(QDebug d, const SymbianDeviceManager &sdm)
+{
+    d.nospace() << sdm.toString();
+    return d;
+}
+
+} // namespace SymbianUtilsInternal
Index: /trunk/tools/runonphone/symbianutils/symbiandevicemanager.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/symbiandevicemanager.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/symbiandevicemanager.h	(revision 769)
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SYMBIANDEVICEMANAGER_H
+#define SYMBIANDEVICEMANAGER_H
+
+#include "symbianutils_global.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QExplicitlySharedDataPointer>
+
+QT_BEGIN_NAMESPACE
+class QDebug;
+class QTextStream;
+QT_END_NAMESPACE
+
+namespace SymbianUtils {
+
+struct SymbianDeviceManagerPrivate;
+class SymbianDeviceData;
+
+enum DeviceCommunicationType {
+    SerialPortCommunication = 0,
+    BlueToothCommunication = 1
+};
+
+// SymbianDevice, explicitly shared.
+class SYMBIANUTILS_EXPORT SymbianDevice {
+    explicit SymbianDevice(SymbianDeviceData *data);
+    friend class SymbianDeviceManager;
+public:
+    SymbianDevice();
+    SymbianDevice(const SymbianDevice &rhs);
+    SymbianDevice &operator=(const SymbianDevice &rhs);
+    ~SymbianDevice();
+    int compare(const SymbianDevice &rhs) const;
+
+    DeviceCommunicationType type() const;
+    bool isNull() const;
+    QString portName() const;
+    QString friendlyName() const;
+
+    // Windows only.
+    QString deviceDesc() const;
+    QString manufacturer() const;
+
+    void format(QTextStream &str) const;
+    QString toString() const;
+
+private:
+    QExplicitlySharedDataPointer<SymbianDeviceData> m_data;
+};
+
+QDebug operator<<(QDebug d, const SymbianDevice &);
+
+inline bool operator==(const SymbianDevice &d1, const SymbianDevice &d2)
+    { return d1.compare(d2) == 0; }
+inline bool operator!=(const SymbianDevice &d1, const SymbianDevice &d2)
+    { return d1.compare(d2) != 0; }
+inline bool operator<(const SymbianDevice &d1, const SymbianDevice &d2)
+    { return d1.compare(d2) < 0; }
+
+/* SymbianDeviceManager: Singleton that maintains a list of Symbian devices.
+ * and emits change signals.
+ * On Windows, the update slot must be connected to a signal
+ * emitted from an event handler listening for WM_DEVICECHANGE. */
+class SYMBIANUTILS_EXPORT SymbianDeviceManager : public QObject
+{
+    Q_OBJECT
+public:
+    typedef QList<SymbianDevice> SymbianDeviceList;
+
+    static const char *linuxBlueToothDeviceRootC;
+
+    // Do not use this constructor, it is just public for Q_GLOBAL_STATIC
+    explicit SymbianDeviceManager(QObject *parent = 0);
+    virtual ~SymbianDeviceManager();
+
+    // Singleton access.
+    static SymbianDeviceManager *instance();
+
+    SymbianDeviceList devices() const;
+    QString toString() const;
+
+    QString friendlyNameForPort(const QString &port) const;
+
+public slots:
+    void update();
+
+signals:
+    void deviceRemoved(const SymbianDevice &d);
+    void deviceAdded(const SymbianDevice &d);
+    void updated();
+
+private:
+    void update(bool emitSignals);
+    SymbianDeviceList serialPorts() const;
+    SymbianDeviceList blueToothDevices() const;
+
+    SymbianDeviceManagerPrivate *d;
+};
+
+QDebug operator<<(QDebug d, const SymbianDeviceManager &);
+
+} // namespace SymbianUtils
+
+#endif // SYMBIANDEVICEMANAGER_H
Index: /trunk/tools/runonphone/symbianutils/symbianutils.pri
===================================================================
--- /trunk/tools/runonphone/symbianutils/symbianutils.pri	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/symbianutils.pri	(revision 769)
@@ -0,0 +1,27 @@
+INCLUDEPATH *= $$PWD
+
+# Input
+HEADERS += $$PWD/symbianutils_global.h \
+    $$PWD/callback.h \
+    $$PWD/trkutils.h \
+    $$PWD/trkutils_p.h \
+    $$PWD/trkdevice.h \
+    $$PWD/launcher.h \
+    $$PWD/bluetoothlistener.h \
+    $$PWD/communicationstarter.h \
+    $$PWD/symbiandevicemanager.h
+
+SOURCES += $$PWD/trkutils.cpp \
+    $$PWD/trkdevice.cpp \
+    $$PWD/launcher.cpp \
+    $$PWD/bluetoothlistener.cpp \
+    $$PWD/communicationstarter.cpp \
+    $$PWD/symbiandevicemanager.cpp
+
+# Tests/trklauncher is a console application
+contains(QT, gui) {
+   HEADERS += $$PWD/bluetoothlistener_gui.h
+    SOURCES += $$PWD/bluetoothlistener_gui.cpp
+} else {
+    message(Trk: Console ...)
+}
Index: /trunk/tools/runonphone/symbianutils/symbianutils_global.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/symbianutils_global.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/symbianutils_global.h	(revision 769)
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SYMBIANUTILS_GLOBAL_H
+#define SYMBIANUTILS_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(SYMBIANUTILS_BUILD_LIB)
+#    define SYMBIANUTILS_EXPORT Q_DECL_EXPORT
+#elif defined(SYMBIANUTILS_BUILD_STATIC_LIB) || defined(SYMBIANUTILS_INCLUDE_PRI)
+#    define SYMBIANUTILS_EXPORT
+#else 
+#    define SYMBIANUTILS_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // SYMBIANUTILS_GLOBAL_H
Index: /trunk/tools/runonphone/symbianutils/trkdevice.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/trkdevice.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/trkdevice.cpp	(revision 769)
@@ -0,0 +1,1122 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "trkdevice.h"
+#include "trkutils.h"
+#include "trkutils_p.h"
+
+#include <QtCore/QString>
+#include <QtCore/QDebug>
+#include <QtCore/QQueue>
+#include <QtCore/QHash>
+#include <QtCore/QMap>
+#include <QtCore/QThread>
+#include <QtCore/QMutex>
+#include <QtCore/QWaitCondition>
+#include <QtCore/QSharedPointer>
+#include <QtCore/QMetaType>
+
+#ifdef Q_OS_WIN
+#  include <windows.h>
+#else
+#  include <QtCore/QFile>
+
+#  include <stdio.h>
+#  include <sys/ioctl.h>
+#  include <sys/types.h>
+#  include <termios.h>
+#  include <errno.h>
+#  include <string.h>
+#  include <unistd.h>
+/* Required headers for select() according to POSIX.1-2001 */
+#  include <sys/select.h>
+/* Required headers for select() according to earlier standards:
+       #include <sys/time.h>
+       #include <sys/types.h>
+       #include <unistd.h>
+*/
+#endif
+
+#ifdef Q_OS_WIN
+
+// Format windows error from GetLastError() value:
+// TODO: Use the one provided by the utils lib.
+QString winErrorMessage(unsigned long error)
+{
+    QString rc = QString::fromLatin1("#%1: ").arg(error);
+    ushort *lpMsgBuf;
+
+    const int len = FormatMessage(
+            FORMAT_MESSAGE_ALLOCATE_BUFFER
+                | FORMAT_MESSAGE_FROM_SYSTEM
+                | FORMAT_MESSAGE_IGNORE_INSERTS,
+            NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
+    if (len) {
+        rc = QString::fromUtf16(lpMsgBuf, len);
+        LocalFree(lpMsgBuf);
+    } else {
+        rc += QString::fromLatin1("<unknown error>");
+    }
+    return rc;
+}
+
+#endif
+
+enum { verboseTrk = 0 };
+
+namespace trk {
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkMessage
+//
+///////////////////////////////////////////////////////////////////////
+
+/* A message to be send to TRK, triggering a callback on receipt
+ * of the answer. */
+struct TrkMessage
+{
+    explicit TrkMessage(byte code = 0u, byte token = 0u,
+                        TrkCallback callback = TrkCallback());
+
+    byte code;
+    byte token;
+    QByteArray data;
+    QVariant cookie;
+    TrkCallback callback;
+};
+
+TrkMessage::TrkMessage(byte c, byte t, TrkCallback cb) :
+    code(c),
+    token(t),
+    callback(cb)
+{
+}
+
+QDebug operator<<(QDebug d, const TrkMessage &msg)
+{
+    return d << "Message: Code: " << msg.code
+        << " Token: " << msg.token << " " << msg.data.toHex();
+}
+
+} // namespace trk
+
+Q_DECLARE_METATYPE(trk::TrkMessage)
+Q_DECLARE_METATYPE(trk::TrkResult)
+
+namespace trk {
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkWriteQueue: Mixin class that manages a write queue of Trk messages.
+// pendingMessage()/notifyWriteResult() should be called from a worked/timer
+// that writes the messages. The class does not take precautions for multithreading.
+// A no-op message is simply taken off the queue. The calling class
+// can use the helper invokeNoopMessage() to trigger its callback.
+//
+///////////////////////////////////////////////////////////////////////
+
+class TrkWriteQueue
+{    
+    Q_DISABLE_COPY(TrkWriteQueue)
+public:
+    explicit TrkWriteQueue();
+
+    // Enqueue messages.
+    void queueTrkMessage(byte code, TrkCallback callback,
+                        const QByteArray &data, const QVariant &cookie);
+    void queueTrkInitialPing();
+
+    // Call this from the device read notification with the results.
+    void slotHandleResult(const TrkResult &result, QMutex *mutex = 0);
+
+    // pendingMessage() can be called periodically in a timer to retrieve
+    // the pending messages to be sent.
+    enum PendingMessageResult {
+        NoMessage,               // No message in queue.
+        PendingMessage,          /* There is a queued message. The calling class
+                                  * can write it out and use notifyWriteResult()
+                                  * to notify about the result. */
+        NoopMessageDequeued      // A no-op message has been dequeued. see invokeNoopMessage().
+    };
+
+    PendingMessageResult pendingMessage(TrkMessage *message);
+    // Notify the queue about the success of the write operation
+    // after taking the pendingMessage off.
+    enum WriteResult {
+        WriteOk,
+        WriteFailedDiscard, // Discard failed message
+        WriteFailedKeep,    // Keep failed message
+    };
+    void notifyWriteResult(WriteResult ok);
+
+    // Helper function that invokes the callback of a no-op message
+    static void invokeNoopMessage(trk::TrkMessage);
+
+private:
+    typedef QMap<byte, TrkMessage> TokenMessageMap;
+
+    byte nextTrkWriteToken();
+
+    byte m_trkWriteToken;
+    QQueue<TrkMessage> m_trkWriteQueue;
+    TokenMessageMap m_writtenTrkMessages;
+    bool m_trkWriteBusy;
+};
+
+TrkWriteQueue::TrkWriteQueue() :
+    m_trkWriteToken(0),
+    m_trkWriteBusy(false)
+{
+}
+
+byte TrkWriteQueue::nextTrkWriteToken()
+{
+    ++m_trkWriteToken;
+    if (m_trkWriteToken == 0)
+        ++m_trkWriteToken;
+    if (verboseTrk)
+        qDebug() << "Write token: " << m_trkWriteToken;
+    return m_trkWriteToken;
+}
+
+void TrkWriteQueue::queueTrkMessage(byte code, TrkCallback callback,
+    const QByteArray &data, const QVariant &cookie)
+{
+    const byte token = code == TRK_WRITE_QUEUE_NOOP_CODE ?
+                                byte(0) : nextTrkWriteToken();
+    TrkMessage msg(code, token, callback);
+    msg.data = data;
+    msg.cookie = cookie;
+    m_trkWriteQueue.append(msg);
+}
+
+TrkWriteQueue::PendingMessageResult TrkWriteQueue::pendingMessage(TrkMessage *message)
+{
+    // Invoked from timer, try to flush out message queue
+    if (m_trkWriteBusy || m_trkWriteQueue.isEmpty())
+        return NoMessage;
+    // Handle the noop message, just invoke CB in slot (ower thread)
+    if (m_trkWriteQueue.front().code == TRK_WRITE_QUEUE_NOOP_CODE) {
+        *message = m_trkWriteQueue.dequeue();
+        return NoopMessageDequeued;
+    }
+    // Insert into map fir answers (as reading threads might get an
+    // answer before notifyWriteResult(true)) is called.
+    *message = m_trkWriteQueue.front();
+    m_writtenTrkMessages.insert(message->token, *message);
+    m_trkWriteBusy = true;
+    return PendingMessage;
+}
+
+void TrkWriteQueue::invokeNoopMessage(trk::TrkMessage noopMessage)
+{
+    TrkResult result;
+    result.code = noopMessage.code;
+    result.token = noopMessage.token;
+    result.data = noopMessage.data;
+    result.cookie = noopMessage.cookie;
+    noopMessage.callback(result);
+}
+
+void TrkWriteQueue::notifyWriteResult(WriteResult wr)
+{
+    // On success, dequeue message and await result
+    const byte token = m_trkWriteQueue.front().token;
+    switch (wr) {
+    case WriteOk:
+        m_trkWriteQueue.dequeue();
+        break;
+    case WriteFailedKeep:
+    case WriteFailedDiscard:
+        m_writtenTrkMessages.remove(token);
+        m_trkWriteBusy = false;
+        if (wr == WriteFailedDiscard)
+            m_trkWriteQueue.dequeue();
+        break;
+    }
+}
+
+void TrkWriteQueue::slotHandleResult(const TrkResult &result, QMutex *mutex)
+{
+    // Find which request the message belongs to and invoke callback
+    // if ACK or on NAK if desired.
+    if (mutex)
+        mutex->lock();
+    m_trkWriteBusy = false;
+    const TokenMessageMap::iterator it = m_writtenTrkMessages.find(result.token);
+    if (it == m_writtenTrkMessages.end()) {
+        if (mutex)
+            mutex->unlock();
+        return;
+    }
+    TrkCallback callback = it.value().callback;
+    const QVariant cookie = it.value().cookie;
+    m_writtenTrkMessages.erase(it);
+    if (mutex)
+        mutex->unlock();
+    // Invoke callback
+    if (callback) {
+        TrkResult result1 = result;
+        result1.cookie = cookie;
+        callback(result1);
+    }
+}
+
+void TrkWriteQueue::queueTrkInitialPing()
+{
+    // Ping, reset sequence count
+    m_trkWriteToken = 0;
+    m_trkWriteQueue.append(TrkMessage(TrkPing, 0));
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// DeviceContext to be shared between threads
+//
+///////////////////////////////////////////////////////////////////////
+
+struct DeviceContext {
+    DeviceContext();
+#ifdef Q_OS_WIN
+    HANDLE device;
+    OVERLAPPED readOverlapped;
+    OVERLAPPED writeOverlapped;
+#else
+    QFile file;
+#endif
+    bool serialFrame;
+    QMutex mutex;
+};
+
+DeviceContext::DeviceContext() :
+#ifdef Q_OS_WIN
+    device(INVALID_HANDLE_VALUE),
+#endif
+    serialFrame(true)
+{
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkWriterThread: A thread operating a TrkWriteQueue.
+// with exception of the handling of the  TRK_WRITE_QUEUE_NOOP_CODE
+// synchronization message. The invocation of the callback is then
+// done by the thread owning the TrkWriteQueue, while pendingMessage() is called
+// from another thread. This happens via a Qt::BlockingQueuedConnection.
+
+///////////////////////////////////////////////////////////////////////
+
+class WriterThread : public QThread
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(WriterThread)
+public:            
+    explicit WriterThread(const QSharedPointer<DeviceContext> &context);
+
+    // Enqueue messages.
+    void queueTrkMessage(byte code, TrkCallback callback,
+                        const QByteArray &data, const QVariant &cookie);
+    void queueTrkInitialPing();
+
+    // Call this from the device read notification with the results.
+    void slotHandleResult(const TrkResult &result);
+
+    virtual void run();
+
+signals:
+    void error(const QString &);
+    void internalNoopMessageDequeued(const trk::TrkMessage&);
+
+public slots:
+    bool trkWriteRawMessage(const TrkMessage &msg);
+    void terminate();
+    void tryWrite();
+
+private slots:
+    void invokeNoopMessage(const trk::TrkMessage &);
+
+private:    
+    bool write(const QByteArray &data, QString *errorMessage);
+    inline int writePendingMessage();
+
+    const QSharedPointer<DeviceContext> m_context;
+    QMutex m_dataMutex;
+    QMutex m_waitMutex;
+    QWaitCondition m_waitCondition;
+    TrkWriteQueue m_queue;
+    bool m_terminate;
+};
+
+WriterThread::WriterThread(const QSharedPointer<DeviceContext> &context) :
+    m_context(context),
+    m_terminate(false)
+{
+    static const int trkMessageMetaId = qRegisterMetaType<trk::TrkMessage>();
+    Q_UNUSED(trkMessageMetaId)
+    connect(this, SIGNAL(internalNoopMessageDequeued(trk::TrkMessage)),
+            this, SLOT(invokeNoopMessage(trk::TrkMessage)), Qt::BlockingQueuedConnection);
+}
+
+void WriterThread::run()
+{
+    while (writePendingMessage() == 0) ;
+}
+
+int WriterThread::writePendingMessage()
+{
+    enum { MaxAttempts = 100, RetryIntervalMS = 200 };
+
+    // Wait. Use a timeout in case something is already queued before we
+    // start up or some weird hanging exit condition
+    m_waitMutex.lock();
+    m_waitCondition.wait(&m_waitMutex, 100);
+    m_waitMutex.unlock();
+    if (m_terminate)
+        return 1;
+
+    // Send off message
+    m_dataMutex.lock();
+    TrkMessage message;
+    const TrkWriteQueue::PendingMessageResult pr = m_queue.pendingMessage(&message);
+    m_dataMutex.unlock();
+
+    switch (pr) {
+    case TrkWriteQueue::NoMessage:
+        break;
+    case TrkWriteQueue::PendingMessage: {
+            //qDebug() << "Write pending message " << message;
+            // Untested: try to re-send a few times
+            bool success = false;
+            for (int r = 0; !success && (r < MaxAttempts); r++) {
+                success = trkWriteRawMessage(message);
+                if (!success) {
+                    emit error(QString::fromLatin1("Write failure, attempt %1 of %2.").arg(r).arg(int(MaxAttempts)));
+                    if (m_terminate)
+                        return 1;
+                    QThread::msleep(RetryIntervalMS);
+                }
+            }
+            // Notify queue. If still failed, give up.
+            m_dataMutex.lock();
+            m_queue.notifyWriteResult(success ? TrkWriteQueue::WriteOk : TrkWriteQueue::WriteFailedDiscard);
+            m_dataMutex.unlock();
+        }
+        break;
+    case TrkWriteQueue::NoopMessageDequeued:
+        // Sync with thread that owns us via a blocking signal
+        if (verboseTrk)
+            qDebug() << "Noop message dequeued" << message;
+        emit internalNoopMessageDequeued(message);
+        break;
+    } // switch
+    return 0;
+}
+
+void WriterThread::invokeNoopMessage(const trk::TrkMessage &msg)
+{
+    TrkWriteQueue::invokeNoopMessage(msg);
+}
+
+void WriterThread::terminate()
+{
+    m_terminate = true;
+    m_waitCondition.wakeAll();
+    wait();
+    m_terminate = false;
+}
+
+#ifdef Q_OS_WIN
+
+static inline QString msgTerminated(int size)
+{
+    return QString::fromLatin1("Terminated with %1 bytes pending.").arg(size);
+}
+
+// Interruptible synchronous write function.
+static inline bool overlappedSyncWrite(HANDLE file,
+                                       const bool &terminateFlag,
+                                       const char *data,
+                                       DWORD size, DWORD *charsWritten,
+                                       OVERLAPPED *overlapped,
+                                       QString *errorMessage)
+{
+    if (WriteFile(file, data, size, charsWritten, overlapped))
+        return true;
+    const DWORD writeError = GetLastError();
+    if (writeError != ERROR_IO_PENDING) {
+        *errorMessage = QString::fromLatin1("WriteFile failed: %1").arg(winErrorMessage(writeError));
+        return false;
+    }
+    // Wait for written or thread terminated
+    const DWORD timeoutMS = 200;
+    const unsigned maxAttempts = 20;
+    DWORD wr = WaitForSingleObject(overlapped->hEvent, timeoutMS);
+    for (unsigned n = 0; wr == WAIT_TIMEOUT && n < maxAttempts && !terminateFlag;
+         wr = WaitForSingleObject(overlapped->hEvent, timeoutMS), n++);
+    if (terminateFlag) {
+        *errorMessage = msgTerminated(size);
+        return false;
+    }
+    switch (wr) {
+    case WAIT_OBJECT_0:
+        break;
+    case WAIT_TIMEOUT:
+        *errorMessage = QString::fromLatin1("Write timed out.");
+        return false;
+    default:
+        *errorMessage = QString::fromLatin1("Error while waiting for WriteFile results: %1").arg(winErrorMessage(GetLastError()));
+        return false;
+    }
+    if (!GetOverlappedResult(file, overlapped, charsWritten, TRUE)) {
+        *errorMessage = QString::fromLatin1("Error writing %1 bytes: %2").arg(size).arg(winErrorMessage(GetLastError()));
+        return false;
+    }
+    return true;
+}
+#endif
+
+bool WriterThread::write(const QByteArray &data, QString *errorMessage)
+{
+    if (verboseTrk)
+        qDebug() << "Write raw data: " << stringFromArray(data).toLatin1();
+    QMutexLocker locker(&m_context->mutex);
+#ifdef Q_OS_WIN
+    DWORD charsWritten;
+    if (!overlappedSyncWrite(m_context->device, m_terminate, data.data(), data.size(), &charsWritten, &m_context->writeOverlapped, errorMessage)) {
+        return false;
+    }
+    FlushFileBuffers(m_context->device);
+    return true;
+#else
+    if (m_context->file.write(data) == -1 || !m_context->file.flush()) {
+        *errorMessage = QString::fromLatin1("Cannot write: %1").arg(m_context->file.errorString());
+        return false;
+    }
+    return  true;
+#endif
+}
+
+bool WriterThread::trkWriteRawMessage(const TrkMessage &msg)
+{
+    const QByteArray ba = frameMessage(msg.code, msg.token, msg.data, m_context->serialFrame);
+    QString errorMessage;
+    const bool rc = write(ba, &errorMessage);
+    if (!rc) {
+        qWarning("%s\n", qPrintable(errorMessage));
+        emit error(errorMessage);
+    }
+    return rc;
+}
+
+void WriterThread::tryWrite()
+{
+    m_waitCondition.wakeAll();
+}
+
+void WriterThread::queueTrkMessage(byte code, TrkCallback callback,
+                                   const QByteArray &data, const QVariant &cookie)
+{
+    m_dataMutex.lock();
+    m_queue.queueTrkMessage(code, callback, data, cookie);
+    m_dataMutex.unlock();
+    tryWrite();
+}
+
+void WriterThread::queueTrkInitialPing()
+{
+    m_dataMutex.lock();
+    m_queue.queueTrkInitialPing();
+    m_dataMutex.unlock();
+    tryWrite();
+}
+
+// Call this from the device read notification with the results.
+void WriterThread::slotHandleResult(const TrkResult &result)
+{
+    m_queue.slotHandleResult(result, &m_dataMutex);
+    tryWrite(); // Have messages been enqueued in-between?
+}
+
+
+///////////////////////////////////////////////////////////////////////
+//
+// ReaderThreadBase: Base class for a thread that reads data from
+// the device, decodes the messages and emit signals for the messages.
+// A Qt::BlockingQueuedConnection should be used for the message signal
+// to ensure messages are processed in the correct sequence.
+//
+///////////////////////////////////////////////////////////////////////
+
+class ReaderThreadBase : public QThread
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(ReaderThreadBase)
+public:
+
+signals:
+    void messageReceived(const trk::TrkResult &result, const QByteArray &rawData);
+
+protected:
+    explicit ReaderThreadBase(const QSharedPointer<DeviceContext> &context);
+    void processData(const QByteArray &a);
+    void processData(char c);
+
+    const QSharedPointer<DeviceContext> m_context;
+
+private:
+    void readMessages();
+
+    QByteArray m_trkReadBuffer;
+};
+
+ReaderThreadBase::ReaderThreadBase(const QSharedPointer<DeviceContext> &context) :
+    m_context(context)
+{
+    static const int trkResultMetaId = qRegisterMetaType<trk::TrkResult>();
+    Q_UNUSED(trkResultMetaId)
+}
+
+void ReaderThreadBase::processData(const QByteArray &a)
+{
+    m_trkReadBuffer += a;
+    readMessages();
+}
+
+void ReaderThreadBase::processData(char c)
+{
+    m_trkReadBuffer += c;
+    if (m_trkReadBuffer.size() > 1)
+        readMessages();
+}
+
+void ReaderThreadBase::readMessages()
+{
+    TrkResult r;
+    QByteArray rawData;
+    while (extractResult(&m_trkReadBuffer, m_context->serialFrame, &r, &rawData)) {
+        emit messageReceived(r, rawData);
+    }
+}
+
+#ifdef Q_OS_WIN
+///////////////////////////////////////////////////////////////////////
+//
+// WinReaderThread: A thread reading from the device using Windows API.
+// Waits on an overlapped I/O handle and an event that tells the thread to
+// terminate.
+//
+///////////////////////////////////////////////////////////////////////
+
+class WinReaderThread : public ReaderThreadBase
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(WinReaderThread)
+public:
+    explicit WinReaderThread(const QSharedPointer<DeviceContext> &context);
+    ~WinReaderThread();
+
+    virtual void run();
+
+signals:
+    void error(const QString &);
+
+public slots:
+    void terminate();
+
+private:
+    enum Handles { FileHandle, TerminateEventHandle, HandleCount };
+
+    inline int tryRead();
+
+    HANDLE m_handles[HandleCount];
+};
+
+WinReaderThread::WinReaderThread(const QSharedPointer<DeviceContext> &context) :
+    ReaderThreadBase(context)
+{
+    m_handles[FileHandle] = NULL;
+    m_handles[TerminateEventHandle] = CreateEvent(NULL, FALSE, FALSE, NULL);
+}
+
+WinReaderThread::~WinReaderThread()
+{
+    CloseHandle(m_handles[TerminateEventHandle]);
+}
+
+// Return 0 to continue or error code
+int WinReaderThread::tryRead()
+{
+    enum { BufSize = 1024 };
+    char buffer[BufSize];
+    // Check if there are already bytes waiting. If not, wait for first byte
+    COMSTAT comStat;
+    if (!ClearCommError(m_context->device, NULL, &comStat)){
+        emit error(QString::fromLatin1("ClearCommError failed: %1").arg(winErrorMessage(GetLastError())));
+        return -7;
+    }    
+    const DWORD bytesToRead = qMax(DWORD(1), qMin(comStat.cbInQue, DWORD(BufSize)));
+    // Trigger read
+    DWORD bytesRead = 0;
+    if (ReadFile(m_context->device, &buffer, bytesToRead, &bytesRead, &m_context->readOverlapped)) {
+        if (bytesRead == 1) {
+            processData(buffer[0]);
+        } else {
+            processData(QByteArray(buffer, bytesRead));
+        }
+        return 0;
+    }
+    const DWORD readError = GetLastError();
+    if (readError != ERROR_IO_PENDING) {
+        emit error(QString::fromLatin1("Read error: %1").arg(winErrorMessage(readError)));
+        return -1;
+    }    
+    // Wait for either termination or data
+    const DWORD wr = WaitForMultipleObjects(HandleCount, m_handles, false, INFINITE);
+    if (wr == WAIT_FAILED) {
+        emit error(QString::fromLatin1("Wait failed: %1").arg(winErrorMessage(GetLastError())));
+        return -2;
+    }
+    if (wr - WAIT_OBJECT_0 == TerminateEventHandle) {
+        return 1; // Terminate
+    }
+    // Check data
+    if (!GetOverlappedResult(m_context->device, &m_context->readOverlapped, &bytesRead, true)) {
+        emit error(QString::fromLatin1("GetOverlappedResult failed: %1").arg(winErrorMessage(GetLastError())));
+        return -3;
+    }
+    if (bytesRead == 1) {
+        processData(buffer[0]);
+    } else {
+        processData(QByteArray(buffer, bytesRead));
+    }
+    return 0;
+}
+
+void WinReaderThread::run()
+{
+    m_handles[FileHandle] = m_context->readOverlapped.hEvent;
+    while ( tryRead() == 0) ;
+}
+
+void WinReaderThread::terminate()
+{
+    SetEvent(m_handles[TerminateEventHandle]);
+    wait();
+}
+
+typedef WinReaderThread ReaderThread;
+
+#else
+
+///////////////////////////////////////////////////////////////////////
+//
+// UnixReaderThread: A thread reading from the device.
+// Uses select() to wait and a special ioctl() to find out the number
+// of bytes queued. For clean termination, the self-pipe trick is used.
+// The class maintains a pipe, on whose read end the select waits besides
+// the device file handle. To terminate, a byte is written to the pipe.
+//
+///////////////////////////////////////////////////////////////////////
+
+static inline QString msgUnixCallFailedErrno(const char *func, int errorNumber)
+{
+    return QString::fromLatin1("Call to %1() failed: %2").arg(QLatin1String(func), QString::fromLocal8Bit(strerror(errorNumber)));
+}
+
+class UnixReaderThread : public ReaderThreadBase {
+    Q_OBJECT
+    Q_DISABLE_COPY(UnixReaderThread)
+public:
+    explicit UnixReaderThread(const QSharedPointer<DeviceContext> &context);
+    ~UnixReaderThread();
+
+    virtual void run();
+
+signals:
+    void error(const QString &);
+
+public slots:
+    void terminate();
+
+private:
+    inline int tryRead();
+
+    int m_terminatePipeFileDescriptors[2];
+};
+
+UnixReaderThread::UnixReaderThread(const QSharedPointer<DeviceContext> &context) : 
+    ReaderThreadBase(context)
+{
+    m_terminatePipeFileDescriptors[0] = m_terminatePipeFileDescriptors[1] = -1;
+    // Set up pipes for termination. Should not fail
+    if (pipe(m_terminatePipeFileDescriptors) < 0)
+        qWarning("%s\n", qPrintable(msgUnixCallFailedErrno("pipe", errno)));
+}
+
+UnixReaderThread::~UnixReaderThread()
+{
+    close(m_terminatePipeFileDescriptors[0]);
+    close(m_terminatePipeFileDescriptors[1]);
+}
+
+int UnixReaderThread::tryRead()
+{
+    fd_set readSet, tempReadSet, tempExceptionSet;
+    struct timeval timeOut;
+    const int fileDescriptor = m_context->file.handle();
+    FD_ZERO(&readSet);
+    FD_SET(fileDescriptor, &readSet);
+    FD_SET(m_terminatePipeFileDescriptors[0], &readSet);
+    const int maxFileDescriptor = qMax(m_terminatePipeFileDescriptors[0], fileDescriptor);
+    int result = 0;
+    do {
+        memcpy(&tempReadSet, &readSet, sizeof(fd_set));
+        memcpy(&tempExceptionSet, &readSet, sizeof(fd_set));
+        timeOut.tv_sec = 1;
+        timeOut.tv_usec = 0;
+        result = select(maxFileDescriptor + 1, &tempReadSet, NULL, &tempExceptionSet, &timeOut);
+    } while ( result < 0 && errno == EINTR );
+    // Timeout?
+    if (result == 0)
+        return 0;
+   // Something wrong?
+    if (result < 0) {
+        emit error(msgUnixCallFailedErrno("select", errno));
+        return -1;
+    }
+    // Did the exception set trigger on the device?
+    if (FD_ISSET(fileDescriptor,&tempExceptionSet)) {
+        emit error(QLatin1String("An Exception occurred on the device."));
+        return -2;
+    }
+    // Check termination pipe.
+    if (FD_ISSET(m_terminatePipeFileDescriptors[0], &tempReadSet)
+        || FD_ISSET(m_terminatePipeFileDescriptors[0], &tempExceptionSet))
+        return 1;
+
+    // determine number of pending bytes and read
+    int numBytes;
+    if (ioctl(fileDescriptor, FIONREAD, &numBytes) < 0) {
+        emit error(msgUnixCallFailedErrno("ioctl", errno));
+        return -1;
+    }
+    m_context->mutex.lock();
+    const QByteArray data = m_context->file.read(numBytes);
+    m_context->mutex.unlock();
+    processData(data);
+    return 0;
+}
+
+void UnixReaderThread::run()
+{
+    // Read loop
+    while (tryRead() == 0)
+        ;
+}
+
+void UnixReaderThread::terminate()
+{
+    // Trigger select() by writing to the pipe
+    char c = 0;
+    const int written = write(m_terminatePipeFileDescriptors[1], &c, 1);
+    Q_UNUSED(written)
+    wait();
+}
+
+typedef UnixReaderThread ReaderThread;
+
+#endif
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkDevicePrivate
+//
+///////////////////////////////////////////////////////////////////////
+
+struct TrkDevicePrivate
+{
+    TrkDevicePrivate();
+
+    QSharedPointer<DeviceContext> deviceContext;
+    QSharedPointer<WriterThread> writerThread;
+    QSharedPointer<ReaderThread> readerThread;
+
+    QByteArray trkReadBuffer;
+    int verbose;
+    QString errorString;
+    QString port;
+};
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkDevice
+//
+///////////////////////////////////////////////////////////////////////
+
+TrkDevicePrivate::TrkDevicePrivate() :
+    deviceContext(new DeviceContext),
+    verbose(0)
+{
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// TrkDevice
+//
+///////////////////////////////////////////////////////////////////////
+
+TrkDevice::TrkDevice(QObject *parent) :
+    QObject(parent),
+    d(new TrkDevicePrivate)
+{}
+
+TrkDevice::~TrkDevice()
+{
+    close();
+    delete d;
+}
+
+bool TrkDevice::open(QString *errorMessage)
+{
+    if (d->verbose)
+        qDebug() << "Opening" << port() << "is open: " << isOpen() << " serialFrame=" << serialFrame();
+    if (d->port.isEmpty()) {
+        *errorMessage = QLatin1String("Internal error: No port set on TrkDevice");
+        return false;
+    }
+
+    close();
+#ifdef Q_OS_WIN
+    const QString fullPort = QLatin1String("\\\\.\\") + d->port;
+    d->deviceContext->device = CreateFile(reinterpret_cast<const WCHAR*>(fullPort.utf16()),
+                           GENERIC_READ | GENERIC_WRITE,
+                           0,
+                           NULL,
+                           OPEN_EXISTING,
+                           FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING|FILE_FLAG_OVERLAPPED,
+                           NULL);
+
+    if (INVALID_HANDLE_VALUE == d->deviceContext->device) {
+        *errorMessage = QString::fromLatin1("Could not open device '%1': %2").arg(port(), winErrorMessage(GetLastError()));
+        return false;
+    }
+    memset(&d->deviceContext->readOverlapped, 0, sizeof(OVERLAPPED));
+    d->deviceContext->readOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+    memset(&d->deviceContext->writeOverlapped, 0, sizeof(OVERLAPPED));
+    d->deviceContext->writeOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+    if (d->deviceContext->readOverlapped.hEvent == NULL || d->deviceContext->writeOverlapped.hEvent == NULL) {
+        *errorMessage = QString::fromLatin1("Failed to create events: %1").arg(winErrorMessage(GetLastError()));
+        return false;
+    }
+#else
+    d->deviceContext->file.setFileName(d->port);
+    if (!d->deviceContext->file.open(QIODevice::ReadWrite|QIODevice::Unbuffered)) {
+        *errorMessage = QString::fromLatin1("Cannot open %1: %2").arg(d->port, d->deviceContext->file.errorString());
+        return false;
+    }
+
+    struct termios termInfo;
+    if (tcgetattr(d->deviceContext->file.handle(), &termInfo) < 0) {
+        *errorMessage = QString::fromLatin1("Unable to retrieve terminal settings: %1 %2").arg(errno).arg(QString::fromAscii(strerror(errno)));
+        return false;
+    }
+    // Turn off terminal echo as not get messages back, among other things
+    termInfo.c_cflag |= CREAD|CLOCAL;
+    termInfo.c_lflag &= (~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ISIG));
+    termInfo.c_iflag &= (~(INPCK|IGNPAR|PARMRK|ISTRIP|ICRNL|IXANY));
+    termInfo.c_oflag &= (~OPOST);
+    termInfo.c_cc[VMIN]  = 0;
+    termInfo.c_cc[VINTR] = _POSIX_VDISABLE;
+    termInfo.c_cc[VQUIT] = _POSIX_VDISABLE;
+    termInfo.c_cc[VSTART] = _POSIX_VDISABLE;
+    termInfo.c_cc[VSTOP] = _POSIX_VDISABLE;
+    termInfo.c_cc[VSUSP] = _POSIX_VDISABLE;
+    if (tcsetattr(d->deviceContext->file.handle(), TCSAFLUSH, &termInfo) < 0) {
+        *errorMessage = QString::fromLatin1("Unable to apply terminal settings: %1 %2").arg(errno).arg(QString::fromAscii(strerror(errno)));
+        return false;
+    }
+#endif
+    d->readerThread = QSharedPointer<ReaderThread>(new ReaderThread(d->deviceContext));
+    connect(d->readerThread.data(), SIGNAL(error(QString)), this, SLOT(emitError(QString)),
+            Qt::QueuedConnection);
+    connect(d->readerThread.data(), SIGNAL(messageReceived(trk::TrkResult,QByteArray)),
+            this, SLOT(slotMessageReceived(trk::TrkResult,QByteArray)),
+            Qt::QueuedConnection);
+    d->readerThread->start();
+
+    d->writerThread = QSharedPointer<WriterThread>(new WriterThread(d->deviceContext));
+    connect(d->writerThread.data(), SIGNAL(error(QString)), this, SLOT(emitError(QString)),
+            Qt::QueuedConnection);    
+    d->writerThread->start();    
+
+    if (d->verbose)
+        qDebug() << "Opened" << d->port;
+    return true;
+}
+
+void TrkDevice::close()
+{
+    if (!isOpen())
+        return;
+    if (d->readerThread)
+        d->readerThread->terminate();
+    if (d->writerThread)
+        d->writerThread->terminate();
+#ifdef Q_OS_WIN
+    CloseHandle(d->deviceContext->device);
+    d->deviceContext->device = INVALID_HANDLE_VALUE;
+    CloseHandle(d->deviceContext->readOverlapped.hEvent);
+    CloseHandle(d->deviceContext->writeOverlapped.hEvent);
+    d->deviceContext->readOverlapped.hEvent = d->deviceContext->writeOverlapped.hEvent = NULL;
+#else
+    d->deviceContext->file.close();
+#endif
+    if (d->verbose)
+        emitLogMessage("Close");
+}
+
+bool TrkDevice::isOpen() const
+{
+#ifdef Q_OS_WIN
+    return d->deviceContext->device != INVALID_HANDLE_VALUE;
+#else
+    return d->deviceContext->file.isOpen();
+#endif
+}
+
+QString TrkDevice::port() const
+{
+    return d->port;
+}
+
+void TrkDevice::setPort(const QString &p)
+{
+    d->port = p;
+}
+
+QString TrkDevice::errorString() const
+{
+    return d->errorString;
+}
+
+bool TrkDevice::serialFrame() const
+{
+    return d->deviceContext->serialFrame;
+}
+
+void TrkDevice::setSerialFrame(bool f)
+{
+    d->deviceContext->serialFrame = f;
+}
+
+int TrkDevice::verbose() const
+{
+    return d->verbose;
+}
+
+void TrkDevice::setVerbose(int b)
+{
+    d->verbose = b;
+}
+
+void TrkDevice::slotMessageReceived(const trk::TrkResult &result, const QByteArray &rawData)
+{
+    d->writerThread->slotHandleResult(result);
+    if (d->verbose > 1)
+        qDebug() << "Received: " << result.toString();
+    emit messageReceived(result);    
+    if (!rawData.isEmpty())
+        emit rawDataReceived(rawData);
+}
+
+void TrkDevice::emitError(const QString &s)
+{
+    d->errorString = s;
+    qWarning("%s\n", qPrintable(s));
+    emit error(s);
+}
+
+void TrkDevice::sendTrkMessage(byte code, TrkCallback callback,
+     const QByteArray &data, const QVariant &cookie)
+{
+    if (!d->writerThread.isNull()) {
+        if (d->verbose > 1) {
+            QByteArray msg = "Sending:  ";
+            msg += QByteArray::number(code, 16);
+            msg += ": ";
+            msg += stringFromArray(data).toLatin1();
+            qDebug("%s", msg.data());
+        }
+        d->writerThread->queueTrkMessage(code, callback, data, cookie);
+    }
+}
+
+void TrkDevice::sendTrkInitialPing()
+{
+    if (!d->writerThread.isNull())
+        d->writerThread->queueTrkInitialPing();
+}
+
+bool TrkDevice::sendTrkAck(byte token)
+{
+    if (d->writerThread.isNull())
+        return false;
+    // The acknowledgement must not be queued!
+    TrkMessage msg(0x80, token);
+    msg.token = token;
+    msg.data.append('\0');
+    if (verboseTrk)
+        qDebug() << "Write synchroneous message: " << msg;
+    return d->writerThread->trkWriteRawMessage(msg);
+    // 01 90 00 07 7e 80 01 00 7d 5e 7e
+}
+
+void TrkDevice::emitLogMessage(const QString &msg)
+{
+    if (d->verbose)
+        qDebug("%s\n", qPrintable(msg));
+    emit logMessage(msg);
+}
+
+} // namespace trk
+
+#include "trkdevice.moc"
Index: /trunk/tools/runonphone/symbianutils/trkdevice.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/trkdevice.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/trkdevice.h	(revision 769)
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TRKDEVICE_H
+#define TRKDEVICE_H
+
+#include "symbianutils_global.h"
+#include "callback.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QVariant>
+#include <QtCore/QByteArray>
+#include <QtCore/QSharedPointer>
+
+QT_BEGIN_NAMESPACE
+class QIODevice;
+QT_END_NAMESPACE
+
+namespace trk {
+
+struct TrkResult;
+struct TrkMessage;
+struct TrkDevicePrivate;
+
+/* TrkDevice: Implements a Windows COM or Linux device for
+ * Trk communications. Provides synchronous write and asynchronous
+ * read operation.
+ * The serialFrames property specifies whether packets are encapsulated in
+ * "0x90 <length>" frames, which is currently the case for serial ports. 
+ * Contains a write message queue allowing
+ * for queueing messages with a notification callback. If the message receives
+ * an ACK, the callback is invoked.
+ * The special message TRK_WRITE_QUEUE_NOOP_CODE code can be used for synchronisation.
+ * The respective  message will not be sent, the callback is just invoked. */
+
+enum { TRK_WRITE_QUEUE_NOOP_CODE = 0x7f };
+
+typedef trk::Callback<const TrkResult &> TrkCallback;
+
+class SYMBIANUTILS_EXPORT TrkDevice : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(bool serialFrame READ serialFrame WRITE setSerialFrame)
+    Q_PROPERTY(bool verbose READ verbose WRITE setVerbose)
+    Q_PROPERTY(QString port READ port WRITE setPort)
+public:
+    explicit TrkDevice(QObject *parent = 0);
+    virtual ~TrkDevice();
+
+    bool open(QString *errorMessage);
+    bool isOpen() const;
+
+    QString port() const;
+    void setPort(const QString &p);
+
+    QString errorString() const;
+
+    bool serialFrame() const;
+    void setSerialFrame(bool f);
+
+    int verbose() const;
+    void setVerbose(int b);
+
+    // Enqueue a message with a notification callback.
+    void sendTrkMessage(unsigned char code,
+                        TrkCallback callBack = TrkCallback(),
+                        const QByteArray &data = QByteArray(),
+                        const QVariant &cookie = QVariant());
+
+    // Enqeue an initial ping
+    void sendTrkInitialPing();
+
+    // Send an Ack synchronously, bypassing the queue
+    bool sendTrkAck(unsigned char token);
+
+signals:
+    void messageReceived(const trk::TrkResult &result);
+    // Emitted with the contents of messages enclosed in 07e, not for log output
+    void rawDataReceived(const QByteArray &data);
+    void error(const QString &msg);
+    void logMessage(const QString &msg);
+
+private slots:
+    void slotMessageReceived(const trk::TrkResult &result, const QByteArray &a);
+
+protected slots:
+    void emitError(const QString &msg);
+    void emitLogMessage(const QString &msg);
+
+public slots:
+    void close();
+
+private:
+    void readMessages();
+    TrkDevicePrivate *d;
+};
+
+} // namespace trk
+
+#endif // TRKDEVICE_H
Index: /trunk/tools/runonphone/symbianutils/trkutils.cpp
===================================================================
--- /trunk/tools/runonphone/symbianutils/trkutils.cpp	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/trkutils.cpp	(revision 769)
@@ -0,0 +1,480 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "trkutils.h"
+#include <ctype.h>
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDebug>
+#include <QtCore/QDate>
+#include <QtCore/QDateTime>
+#include <QtCore/QTime>
+
+#define logMessage(s)  do { qDebug() << "TRKCLIENT: " << s; } while (0)
+
+namespace trk {
+
+TrkAppVersion::TrkAppVersion()
+{
+    reset();
+}
+
+void TrkAppVersion::reset()
+{
+    trkMajor = trkMinor= protocolMajor = protocolMinor = 0;
+}
+
+Session::Session()
+{
+    reset();
+}
+
+void Session::reset()
+{
+    cpuMajor = 0;
+    cpuMinor = 0;
+    bigEndian = 0;
+    defaultTypeSize = 0;
+    fpTypeSize = 0;
+    extended1TypeSize = 0;
+    extended2TypeSize = 0;
+    pid = 0;
+    tid = 0;
+    codeseg = 0;
+    dataseg = 0;
+
+    currentThread = 0;
+    libraries.clear();
+    trkAppVersion.reset();
+}
+
+static QString formatCpu(int major, int minor)
+{
+    //: CPU description of an S60 device
+    //: %1 major verison, %2 minor version
+    //: %3 real name of major verison, %4 real name of minor version
+    const QString str = QCoreApplication::translate("trk::Session", "CPU: v%1.%2%3%4");
+    QString majorStr;
+    QString minorStr;
+    switch (major) {
+    case 0x04:
+        majorStr = " ARM";
+        break;
+    }
+    switch (minor) {
+    case 0x00:
+        minorStr = " 920T";
+        break;
+    }
+    return str.arg(major).arg(minor).arg(majorStr).arg(minorStr);
+ }
+
+QString formatTrkVersion(const TrkAppVersion &version)
+{
+    QString str = QCoreApplication::translate("trk::Session",
+                                              "App TRK: v%1.%2 TRK protocol: v%3.%4");
+    str = str.arg(version.trkMajor).arg(version.trkMinor);
+    return str.arg(version.protocolMajor).arg(version.protocolMinor);
+}
+
+QString Session::deviceDescription(unsigned verbose) const
+{
+    if (!cpuMajor)
+        return QString();
+
+    //: s60description
+    //: description of an S60 device
+    //: %1 CPU description, %2 endianness
+    //: %3 default type size (if any), %4 float size (if any)
+    //: %5 TRK version
+    QString msg = QCoreApplication::translate("trk::Session", "%1, %2%3%4, %5");
+    QString endianness = bigEndian
+                         ? QCoreApplication::translate("trk::Session", "big endian")
+                         : QCoreApplication::translate("trk::Session", "little endian");
+    msg = msg.arg(formatCpu(cpuMajor, cpuMinor)).arg(endianness);
+    //: The separator in a list of strings
+    QString defaultTypeSizeStr;
+    QString fpTypeSizeStr;
+    if (verbose && defaultTypeSize)
+        //: will be inserted into s60description
+        defaultTypeSizeStr = QCoreApplication::translate("trk::Session", ", type size: %1").arg(defaultTypeSize);
+    if (verbose && fpTypeSize)
+        //: will be inserted into s60description
+        fpTypeSizeStr = QCoreApplication::translate("trk::Session", ", float size: %1").arg(fpTypeSize);
+    msg = msg.arg(defaultTypeSizeStr).arg(fpTypeSizeStr);
+    return msg.arg(formatTrkVersion(trkAppVersion));
+}
+
+// --------------
+
+QByteArray decode7d(const QByteArray &ba)
+{
+    QByteArray res;
+    res.reserve(ba.size());
+    for (int i = 0; i < ba.size(); ++i) {
+        byte c = byte(ba.at(i));
+        if (c == 0x7d) {
+            ++i;
+            c = 0x20 ^ byte(ba.at(i));
+        }
+        res.append(c);
+    }
+    return res;
+}
+
+QByteArray encode7d(const QByteArray &ba)
+{
+    QByteArray res;
+    res.reserve(ba.size() + 2);
+    for (int i = 0; i < ba.size(); ++i) {
+        byte c = byte(ba.at(i));
+        if (c == 0x7e || c == 0x7d) {
+            res.append(0x7d);
+            res.append(0x20 ^ c);
+        } else {
+            res.append(c);
+        }
+    }
+    return res;
+}
+
+// FIXME: Use the QByteArray based version below?
+static inline QString stringFromByte(byte c)
+{
+    return QString::fromLatin1("%1").arg(c, 2, 16, QChar('0'));
+}
+
+SYMBIANUTILS_EXPORT QString stringFromArray(const QByteArray &ba, int maxLen)
+{
+    QString str;
+    QString ascii;
+    const int size = maxLen == -1 ? ba.size() : qMin(ba.size(), maxLen);
+    for (int i = 0; i < size; ++i) {
+        //if (i == 5 || i == ba.size() - 2)
+        //    str += "  ";
+        int c = byte(ba.at(i));
+        str += QString("%1 ").arg(c, 2, 16, QChar('0'));
+        if (i >= 8 && i < ba.size() - 2)
+            ascii += QChar(c).isPrint() ? QChar(c) : QChar('.');
+    }
+    if (size != ba.size()) {
+        str += "...";
+        ascii += "...";
+    }
+    return str + "  " + ascii;
+}
+
+SYMBIANUTILS_EXPORT QByteArray hexNumber(uint n, int digits)
+{
+    QByteArray ba = QByteArray::number(n, 16);
+    if (digits == 0 || ba.size() == digits)
+        return ba;
+    return QByteArray(digits - ba.size(), '0') + ba;
+}
+
+SYMBIANUTILS_EXPORT QByteArray hexxNumber(uint n, int digits)
+{
+    return "0x" + hexNumber(n, digits);
+}
+
+TrkResult::TrkResult() :
+    code(0),
+    token(0),
+    isDebugOutput(false)
+{
+}
+
+void TrkResult::clear()
+{
+    code = token= 0;
+    isDebugOutput = false;
+    data.clear();
+    cookie = QVariant();
+}
+
+QString TrkResult::toString() const
+{
+    QString res = stringFromByte(code);
+    res += QLatin1String(" [");
+    res += stringFromByte(token);
+    res += QLatin1Char(']');
+    res += QLatin1Char(' ');
+    res += stringFromArray(data);
+    return res;
+}
+
+QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool serialFrame)
+{
+    byte s = command + token;
+    for (int i = 0; i != data.size(); ++i)
+        s += data.at(i);
+    byte checksum = 255 - (s & 0xff);
+    //int x = s + ~s;
+    //logMessage("check: " << s << checksum << x;
+
+    QByteArray response;
+    response.reserve(data.size() + 3);
+    response.append(char(command));
+    response.append(char(token));
+    response.append(data);
+    response.append(char(checksum));
+
+    QByteArray encodedData = encode7d(response);
+
+    QByteArray ba;
+    ba.reserve(encodedData.size() + 6);
+    if (serialFrame) {
+        ba.append(char(0x01));
+        ba.append(char(0x90));
+        const ushort encodedSize = encodedData.size() + 2; // 2 x 0x7e
+        appendShort(&ba, encodedSize, BigEndian);
+    }
+    ba.append(char(0x7e));
+    ba.append(encodedData);
+    ba.append(char(0x7e));
+
+    return ba;
+}
+
+/* returns 0 if array doesn't represent a result,
+otherwise returns the length of the result data */
+ushort isValidTrkResult(const QByteArray &buffer, bool serialFrame)
+{
+    if (serialFrame) {
+        // Serial protocol with length info
+        if (buffer.length() < 4)
+            return 0;
+        if (buffer.at(0) != 0x01 || byte(buffer.at(1)) != 0x90)
+            return 0;
+        const ushort len = extractShort(buffer.data() + 2);
+        return (buffer.size() >= len + 4) ? len : ushort(0);
+    }
+    // Frameless protocol without length info
+    const char delimiter = char(0x7e);
+    const int firstDelimiterPos = buffer.indexOf(delimiter);
+    // Regular message delimited by 0x7e..0x7e
+    if (firstDelimiterPos == 0) {
+        const int endPos = buffer.indexOf(delimiter, firstDelimiterPos + 1);
+        return endPos != -1 ? endPos + 1 - firstDelimiterPos : 0;
+    }
+    // Some ASCII log message up to first delimiter or all
+    return firstDelimiterPos != -1 ? firstDelimiterPos : buffer.size();
+}
+
+bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, QByteArray *rawData)
+{
+    result->clear();
+    if(rawData)
+        rawData->clear();
+    const ushort len = isValidTrkResult(*buffer, serialFrame);
+    if (!len)
+        return false;
+    // handle receiving application output, which is not a regular command
+    const int delimiterPos = serialFrame ? 4 : 0;
+    if (buffer->at(delimiterPos) != 0x7e) {
+        result->isDebugOutput = true;
+        result->data = buffer->mid(delimiterPos, len);
+        result->data.replace("\r\n", "\n");
+        *buffer->remove(0, delimiterPos + len);
+        return true;
+    }
+    // FIXME: what happens if the length contains 0xfe?
+    // Assume for now that it passes unencoded!
+    const QByteArray data = decode7d(buffer->mid(delimiterPos + 1, len - 2));
+    if(rawData)
+        *rawData = data;
+    *buffer->remove(0, delimiterPos + len);
+
+    byte sum = 0;
+    for (int i = 0; i < data.size(); ++i) // 3 = 2 * 0xfe + sum
+        sum += byte(data.at(i));
+    if (sum != 0xff)
+        logMessage("*** CHECKSUM ERROR: " << byte(sum));
+
+    result->code = data.at(0);
+    result->token = data.at(1);
+    result->data = data.mid(2, data.size() - 3);
+    //logMessage("   REST BUF: " << stringFromArray(*buffer));
+    //logMessage("   CURR DATA: " << stringFromArray(data));
+    //QByteArray prefix = "READ BUF:                                       ";
+    //logMessage((prefix + "HEADER: " + stringFromArray(header).toLatin1()).data());
+    return true;
+}
+
+SYMBIANUTILS_EXPORT ushort extractShort(const char *data)
+{
+    return byte(data[0]) * 256 + byte(data[1]);
+}
+
+SYMBIANUTILS_EXPORT uint extractInt(const char *data)
+{
+    uint res = byte(data[0]);
+    res *= 256; res += byte(data[1]);
+    res *= 256; res += byte(data[2]);
+    res *= 256; res += byte(data[3]);
+    return res;
+}
+
+SYMBIANUTILS_EXPORT QString quoteUnprintableLatin1(const QByteArray &ba)
+{
+    QString res;
+    char buf[10];
+    for (int i = 0, n = ba.size(); i != n; ++i) {
+        const byte c = ba.at(i);
+        if (isprint(c)) {
+            res += c;
+        } else {
+            qsnprintf(buf, sizeof(buf) - 1, "\\%x", int(c));
+            res += buf;
+        }
+    }
+    return res;
+}
+
+SYMBIANUTILS_EXPORT void appendShort(QByteArray *ba, ushort s, Endianness endian)
+{
+    if (endian == BigEndian) {
+        ba->append(s / 256);
+        ba->append(s % 256);
+    } else {
+        ba->append(s % 256);
+        ba->append(s / 256);
+    }
+}
+
+SYMBIANUTILS_EXPORT void appendInt(QByteArray *ba, uint i, Endianness endian)
+{
+    const uchar b3 = i % 256; i /= 256;
+    const uchar b2 = i % 256; i /= 256;
+    const uchar b1 = i % 256; i /= 256;
+    const uchar b0 = i;
+    ba->reserve(ba->size() + 4);
+    if (endian == BigEndian) {
+        ba->append(b0);
+        ba->append(b1);
+        ba->append(b2);
+        ba->append(b3);
+    } else {
+        ba->append(b3);
+        ba->append(b2);
+        ba->append(b1);
+        ba->append(b0);
+    }
+}
+
+void appendString(QByteArray *ba, const QByteArray &str, Endianness endian, bool appendNullTerminator)
+{
+    const int fullSize = str.size() + (appendNullTerminator ? 1 : 0);
+    appendShort(ba, fullSize, endian); // count the terminating \0
+    ba->append(str);
+    if (appendNullTerminator)
+        ba->append('\0');
+}
+
+void appendDateTime(QByteArray *ba, QDateTime dateTime, Endianness endian)
+{
+    // convert the QDateTime to UTC and append its representation to QByteArray
+    // format is the same as in FAT file system
+    dateTime = dateTime.toUTC();
+    const QTime utcTime = dateTime.time();
+    const QDate utcDate = dateTime.date();
+    uint fatDateTime = (utcTime.hour() << 11 | utcTime.minute() << 5 | utcTime.second()/2) << 16;
+    fatDateTime |= (utcDate.year()-1980) << 9 | utcDate.month() << 5 | utcDate.day();
+    appendInt(ba, fatDateTime, endian);
+}
+
+QByteArray errorMessage(byte code)
+{
+    switch (code) {
+        case 0x00: return "No error";
+        case 0x01: return "Generic error in CWDS message";
+        case 0x02: return "Unexpected packet size in send msg";
+        case 0x03: return "Internal error occurred in CWDS";
+        case 0x04: return "Escape followed by frame flag";
+        case 0x05: return "Bad FCS in packet";
+        case 0x06: return "Packet too long";
+        case 0x07: return "Sequence ID not expected (gap in sequence)";
+
+        case 0x10: return "Command not supported";
+        case 0x11: return "Command param out of range";
+        case 0x12: return "An option was not supported";
+        case 0x13: return "Read/write to invalid memory";
+        case 0x14: return "Read/write invalid registers";
+        case 0x15: return "Exception occurred in CWDS";
+        case 0x16: return "Targeted system or thread is running";
+        case 0x17: return "Breakpoint resources (HW or SW) exhausted";
+        case 0x18: return "Requested breakpoint conflicts with existing one";
+
+        case 0x20: return "General OS-related error";
+        case 0x21: return "Request specified invalid process";
+        case 0x22: return "Request specified invalid thread";
+    }
+    return "Unknown error";
+}
+
+uint swapEndian(uint in)
+{
+    return (in>>24) | ((in<<8) & 0x00FF0000) | ((in>>8) & 0x0000FF00) | (in<<24);
+}
+
+int TrkResult::errorCode() const
+{
+    // NAK means always error, else data sized 1 with a non-null element
+    const bool isNAK = code == 0xff;
+    if (data.size() != 1 && !isNAK)
+        return 0;
+    if (const int errorCode = data.at(0))
+        return errorCode;
+    return isNAK ? 0xff : 0;
+}
+
+QString TrkResult::errorString() const
+{
+    // NAK means always error, else data sized 1 with a non-null element
+    if (code == 0xff)
+        return "NAK";
+    if (data.size() < 1)
+        return "Unknown error packet";
+    return errorMessage(data.at(0));
+}
+
+} // namespace trk
+
Index: /trunk/tools/runonphone/symbianutils/trkutils.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/trkutils.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/trkutils.h	(revision 769)
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEBUGGER_TRK_UTILS
+#define DEBUGGER_TRK_UTILS
+
+#include "symbianutils_global.h"
+#include <QtCore/QByteArray>
+#include <QtCore/QHash>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+QT_BEGIN_NAMESPACE
+class QDateTime;
+QT_END_NAMESPACE
+
+namespace trk {
+
+typedef unsigned char byte;
+
+enum Command {
+    TrkPing = 0x00,
+    TrkConnect = 0x01,
+    TrkDisconnect = 0x02,
+    TrkVersions = 0x04,
+    TrkSupported = 0x05,
+    TrkCpuType = 0x06,
+    TrkHostVersions = 0x09,
+    TrkContinue = 0x18,
+    TrkCreateItem = 0x40,
+    TrkDeleteItem = 0x41,
+
+    TrkWriteFile = 0x48,
+    TrkOpenFile = 0x4a,
+    TrkCloseFile = 0x4b,
+    TrkInstallFile = 0x4d,
+    TrkInstallFile2 = 0x4e,
+
+    TrkNotifyAck = 0x80,
+    TrkNotifyNak = 0xff,
+    TrkNotifyStopped = 0x90,
+    TrkNotifyException = 0x91,
+    TrkNotifyInternalError = 0x92,
+    TrkNotifyCreated = 0xa0,
+    TrkNotifyDeleted = 0xa1,
+    TrkNotifyProcessorStarted = 0xa2,
+    TrkNotifyProcessorStandBy = 0xa6,
+    TrkNotifyProcessorReset = 0xa7
+};
+
+inline byte extractByte(const char *data) { return *data; }
+SYMBIANUTILS_EXPORT ushort extractShort(const char *data);
+SYMBIANUTILS_EXPORT uint extractInt(const char *data);
+
+SYMBIANUTILS_EXPORT QString quoteUnprintableLatin1(const QByteArray &ba);
+
+// produces "xx xx xx "
+SYMBIANUTILS_EXPORT QString stringFromArray(const QByteArray &ba, int maxLen = - 1);
+
+enum Endianness
+{
+    LittleEndian,
+    BigEndian,
+    TargetByteOrder = BigEndian,
+};
+
+SYMBIANUTILS_EXPORT void appendShort(QByteArray *ba, ushort s, Endianness = TargetByteOrder);
+SYMBIANUTILS_EXPORT void appendInt(QByteArray *ba, uint i, Endianness = TargetByteOrder);
+SYMBIANUTILS_EXPORT void appendString(QByteArray *ba, const QByteArray &str, Endianness = TargetByteOrder, bool appendNullTerminator = true);
+
+struct SYMBIANUTILS_EXPORT Library
+{
+    Library() {}
+
+    QByteArray name;
+    uint codeseg;
+    uint dataseg;
+};
+
+struct SYMBIANUTILS_EXPORT TrkAppVersion
+{
+    TrkAppVersion();
+    void reset();    
+
+    int trkMajor;
+    int trkMinor;
+    int protocolMajor;
+    int protocolMinor;
+};
+
+struct SYMBIANUTILS_EXPORT Session
+{
+    Session();
+    void reset();
+    QString deviceDescription(unsigned verbose) const;
+
+    // Trk feedback
+    byte cpuMajor;
+    byte cpuMinor;
+    byte bigEndian;
+    byte defaultTypeSize;
+    byte fpTypeSize;
+    byte extended1TypeSize;
+    byte extended2TypeSize;
+    TrkAppVersion trkAppVersion;
+    uint pid;
+    uint tid;
+    uint codeseg;
+    uint dataseg;
+    QHash<uint, uint> addressToBP;
+
+    typedef QList<Library> Libraries;
+    Libraries libraries;
+
+    typedef uint Thread;
+    typedef QList<Thread> Threads;
+    Threads threads;
+
+    // Gdb request
+    uint currentThread;
+    QStringList modules;
+};
+
+struct SYMBIANUTILS_EXPORT TrkResult
+{
+    TrkResult();
+    void clear();
+    QString toString() const;
+    // 0 for no error.
+    int errorCode() const;
+    QString errorString() const;
+
+    byte code;
+    byte token;
+    QByteArray data;
+    QVariant cookie;
+    bool isDebugOutput;
+};
+
+SYMBIANUTILS_EXPORT QByteArray errorMessage(byte code);
+SYMBIANUTILS_EXPORT QByteArray hexNumber(uint n, int digits = 0);
+SYMBIANUTILS_EXPORT QByteArray hexxNumber(uint n, int digits = 0); // prepends '0x', too
+SYMBIANUTILS_EXPORT uint swapEndian(uint in);
+
+} // namespace trk
+
+#endif // DEBUGGER_TRK_UTILS
Index: /trunk/tools/runonphone/symbianutils/trkutils_p.h
===================================================================
--- /trunk/tools/runonphone/symbianutils/trkutils_p.h	(revision 769)
+++ /trunk/tools/runonphone/symbianutils/trkutils_p.h	(revision 769)
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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 tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEBUGGER_TRK_PRIVATE_UTILS
+#define DEBUGGER_TRK_PRIVATE_UTILS
+
+#include "trkutils.h"
+#include "symbianutils_global.h"
+
+QT_BEGIN_NAMESPACE
+class QDateTime;
+QT_END_NAMESPACE
+
+namespace trk {
+
+void appendDateTime(QByteArray *ba, QDateTime dateTime, Endianness = TargetByteOrder);
+// returns a QByteArray containing optionally
+// the serial frame [0x01 0x90 <len>] and 0x7e encoded7d(ba) 0x7e
+QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool serialFrame);
+bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *r, QByteArray *rawData = 0);
+
+} // namespace trk
+
+#endif // DEBUGGER_TRK_PRIVATE_UTILS
Index: /trunk/tools/runonphone/trksignalhandler.cpp
===================================================================
--- /trunk/tools/runonphone/trksignalhandler.cpp	(revision 768)
+++ /trunk/tools/runonphone/trksignalhandler.cpp	(revision 769)
@@ -59,5 +59,5 @@
 void TrkSignalHandler::copyingStarted()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Copying..." << endl;
 }
@@ -65,5 +65,5 @@
 void TrkSignalHandler::canNotConnect(const QString &errorMessage)
 {
-    d->err << "Cannot Connect - " << errorMessage << endl;
+    d->err << "Cannot connect - " << errorMessage << endl;
 }
 
@@ -85,5 +85,5 @@
 void TrkSignalHandler::installingStarted()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Installing..." << endl;
 }
@@ -96,5 +96,5 @@
 void TrkSignalHandler::installingFinished()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Installing finished" << endl;
 }
@@ -102,5 +102,5 @@
 void TrkSignalHandler::startingApplication()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Starting app..." << endl;
 }
@@ -108,5 +108,5 @@
 void TrkSignalHandler::applicationRunning(uint pid)
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Running..." << endl;
 }
@@ -119,5 +119,5 @@
 void TrkSignalHandler::finished()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Done." << endl;
     QCoreApplication::quit();
@@ -126,13 +126,13 @@
 void TrkSignalHandler::applicationOutputReceived(const QString &output)
 {
-    d->out << output;
+    d->out << output << flush;
 }
 
 void TrkSignalHandler::copyProgress(int percent)
 {
-    if(d->loglevel > 0) {
+    if (d->loglevel > 0) {
         d->out << percent << "% ";
         d->out.flush();
-        if(percent==100)
+        if (percent==100)
             d->out << endl;
     }
@@ -141,5 +141,5 @@
 void TrkSignalHandler::stateChanged(int state)
 {
-    if(d->loglevel > 1)
+    if (d->loglevel > 1)
         d->out << "State" << state << endl;
 }
@@ -165,8 +165,8 @@
 }
 
-TrkSignalHandlerPrivate::TrkSignalHandlerPrivate() :
-        out(stdout),
-        err(stderr),
-        loglevel(0)
+TrkSignalHandlerPrivate::TrkSignalHandlerPrivate()
+    : out(stdout),
+    err(stderr),
+    loglevel(0)
 {
 
@@ -180,6 +180,6 @@
 
 TrkSignalHandler::TrkSignalHandler()
+    : d(new TrkSignalHandlerPrivate())
 {
-    d = new TrkSignalHandlerPrivate();
 }
 
Index: /trunk/tools/shared/findwidget/abstractfindwidget.h
===================================================================
--- /trunk/tools/shared/findwidget/abstractfindwidget.h	(revision 768)
+++ /trunk/tools/shared/findwidget/abstractfindwidget.h	(revision 769)
@@ -71,5 +71,5 @@
     Q_DECLARE_FLAGS(FindFlags, FindFlag)
 
-    AbstractFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
+    explicit AbstractFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
     virtual ~AbstractFindWidget();
 
Index: /trunk/tools/shared/findwidget/itemviewfindwidget.h
===================================================================
--- /trunk/tools/shared/findwidget/itemviewfindwidget.h	(revision 768)
+++ /trunk/tools/shared/findwidget/itemviewfindwidget.h	(revision 769)
@@ -56,5 +56,5 @@
 
 public:
-    ItemViewFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
+    explicit ItemViewFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
 
     QAbstractItemView *itemView() const
Index: /trunk/tools/shared/findwidget/texteditfindwidget.h
===================================================================
--- /trunk/tools/shared/findwidget/texteditfindwidget.h	(revision 768)
+++ /trunk/tools/shared/findwidget/texteditfindwidget.h	(revision 769)
@@ -54,5 +54,5 @@
 
 public:
-    TextEditFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
+    explicit TextEditFindWidget(FindFlags flags = FindFlags(), QWidget *parent = 0);
 
     QTextEdit *textEdit() const
Index: /trunk/tools/shared/fontpanel/fontpanel.cpp
===================================================================
--- /trunk/tools/shared/fontpanel/fontpanel.cpp	(revision 768)
+++ /trunk/tools/shared/fontpanel/fontpanel.cpp	(revision 769)
@@ -218,5 +218,5 @@
 
     if (hasStyles) {
-        foreach (QString style, styles) {
+        foreach (const QString &style, styles) {
             // try to maintain selection or select 'normal' preferably
             const int newIndex = m_styleComboBox->count();
Index: /trunk/tools/shared/qtgradienteditor/qtgradientutils.cpp
===================================================================
--- /trunk/tools/shared/qtgradienteditor/qtgradientutils.cpp	(revision 768)
+++ /trunk/tools/shared/qtgradienteditor/qtgradientutils.cpp	(revision 769)
@@ -396,5 +396,5 @@
 {
     QStringList result;
-    foreach (QGradientStop stop, gradient.stops()) {
+    foreach (const QGradientStop &stop, gradient.stops()) {
         const QColor color = stop.second;
 
Index: /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp
===================================================================
--- /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp	(revision 768)
+++ /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp	(revision 769)
@@ -94,13 +94,21 @@
 }
 
+void QtCursorDatabase::clear()
+{
+    m_cursorNames.clear();
+    m_cursorIcons.clear();
+    m_valueToCursorShape.clear();
+    m_cursorShapeToValue.clear();
+}
+
 void QtCursorDatabase::appendCursor(Qt::CursorShape shape, const QString &name, const QIcon &icon)
 {
     if (m_cursorShapeToValue.contains(shape))
         return;
-    int value = m_cursorNames.count();
+    const int value = m_cursorNames.count();
     m_cursorNames.append(name);
-    m_cursorIcons[value] = icon;
-    m_valueToCursorShape[value] = shape;
-    m_cursorShapeToValue[shape] = value;
+    m_cursorIcons.insert(value, icon);
+    m_valueToCursorShape.insert(value, shape);
+    m_cursorShapeToValue.insert(shape, value);
 }
 
Index: /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils_p.h
===================================================================
--- /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils_p.h	(revision 768)
+++ /trunk/tools/shared/qtpropertybrowser/qtpropertybrowserutils_p.h	(revision 769)
@@ -69,4 +69,5 @@
 public:
     QtCursorDatabase();
+    void clear();
 
     QStringList cursorShapeNames() const;
Index: /trunk/tools/shared/qtpropertybrowser/qtpropertymanager.cpp
===================================================================
--- /trunk/tools/shared/qtpropertybrowser/qtpropertymanager.cpp	(revision 768)
+++ /trunk/tools/shared/qtpropertybrowser/qtpropertymanager.cpp	(revision 769)
@@ -1392,85 +1392,5 @@
 
 // QtBoolPropertyManager
-
-class QtBoolPropertyManagerPrivate
-{
-    QtBoolPropertyManager *q_ptr;
-    Q_DECLARE_PUBLIC(QtBoolPropertyManager)
-public:
-
-    QMap<const QtProperty *, bool> m_values;
-};
-
-/*!
-    \class QtBoolPropertyManager
-    \internal
-    \inmodule QtDesigner
-    \since 4.4
-
-    \brief The QtBoolPropertyManager class provides and manages boolean properties.
-
-    The property's value can be retrieved using the value() function,
-    and set using the setValue() slot.
-
-    In addition, QtBoolPropertyManager provides the valueChanged() signal
-    which is emitted whenever a property created by this manager
-    changes.
-
-    \sa QtAbstractPropertyManager, QtCheckBoxFactory
-*/
-
-/*!
-    \fn void QtBoolPropertyManager::valueChanged(QtProperty *property, bool value)
-
-    This signal is emitted whenever a property created by this manager
-    changes its value, passing a pointer to the \a property and the
-    new \a value as parameters.
-*/
-
-/*!
-    Creates a manager with the given \a parent.
-*/
-QtBoolPropertyManager::QtBoolPropertyManager(QObject *parent)
-    : QtAbstractPropertyManager(parent), d_ptr(new QtBoolPropertyManagerPrivate)
-{
-    d_ptr->q_ptr = this;
-}
-
-/*!
-    Destroys this manager, and all the properties it has created.
-*/
-QtBoolPropertyManager::~QtBoolPropertyManager()
-{
-    clear();
-}
-
-/*!
-    Returns the given \a property's value.
-
-    If the given \a property is not managed by \e this manager, this
-    function returns false.
-
-    \sa setValue()
-*/
-bool QtBoolPropertyManager::value(const QtProperty *property) const
-{
-    return d_ptr->m_values.value(property, false);
-}
-
-/*!
-    \reimp
-*/
-QString QtBoolPropertyManager::valueText(const QtProperty *property) const
-{
-    const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
-    if (it == d_ptr->m_values.constEnd())
-        return QString();
-
-    static const QString trueText = tr("True");
-    static const QString falseText = tr("False");
-    return it.value() ? trueText : falseText;
-}
-
-// Return an icon containing a check box indicator
+//     Return an icon containing a check box indicator
 static QIcon drawCheckBox(bool value)
 {
@@ -1502,4 +1422,92 @@
 }
 
+class QtBoolPropertyManagerPrivate
+{
+    QtBoolPropertyManager *q_ptr;
+    Q_DECLARE_PUBLIC(QtBoolPropertyManager)
+public:
+    QtBoolPropertyManagerPrivate();
+
+    QMap<const QtProperty *, bool> m_values;
+    const QIcon m_checkedIcon;
+    const QIcon m_uncheckedIcon;
+};
+
+QtBoolPropertyManagerPrivate::QtBoolPropertyManagerPrivate() :
+    m_checkedIcon(drawCheckBox(true)),
+    m_uncheckedIcon(drawCheckBox(false))
+{
+}
+
+/*!
+    \class QtBoolPropertyManager
+    \internal
+    \inmodule QtDesigner
+    \since 4.4
+
+    \brief The QtBoolPropertyManager class provides and manages boolean properties.
+
+    The property's value can be retrieved using the value() function,
+    and set using the setValue() slot.
+
+    In addition, QtBoolPropertyManager provides the valueChanged() signal
+    which is emitted whenever a property created by this manager
+    changes.
+
+    \sa QtAbstractPropertyManager, QtCheckBoxFactory
+*/
+
+/*!
+    \fn void QtBoolPropertyManager::valueChanged(QtProperty *property, bool value)
+
+    This signal is emitted whenever a property created by this manager
+    changes its value, passing a pointer to the \a property and the
+    new \a value as parameters.
+*/
+
+/*!
+    Creates a manager with the given \a parent.
+*/
+QtBoolPropertyManager::QtBoolPropertyManager(QObject *parent)
+    : QtAbstractPropertyManager(parent), d_ptr(new QtBoolPropertyManagerPrivate)
+{
+    d_ptr->q_ptr = this;
+}
+
+/*!
+    Destroys this manager, and all the properties it has created.
+*/
+QtBoolPropertyManager::~QtBoolPropertyManager()
+{
+    clear();
+}
+
+/*!
+    Returns the given \a property's value.
+
+    If the given \a property is not managed by \e this manager, this
+    function returns false.
+
+    \sa setValue()
+*/
+bool QtBoolPropertyManager::value(const QtProperty *property) const
+{
+    return d_ptr->m_values.value(property, false);
+}
+
+/*!
+    \reimp
+*/
+QString QtBoolPropertyManager::valueText(const QtProperty *property) const
+{
+    const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
+    if (it == d_ptr->m_values.constEnd())
+        return QString();
+
+    static const QString trueText = tr("True");
+    static const QString falseText = tr("False");
+    return it.value() ? trueText : falseText;
+}
+
 /*!
     \reimp
@@ -1511,7 +1519,5 @@
         return QIcon();
 
-    static const QIcon checkedIcon = drawCheckBox(true);
-    static const QIcon uncheckedIcon = drawCheckBox(false);
-    return it.value() ? checkedIcon : uncheckedIcon;
+    return it.value() ? d_ptr->m_checkedIcon : d_ptr->m_uncheckedIcon;
 }
 
@@ -6288,5 +6294,13 @@
 // QtCursorPropertyManager
 
-Q_GLOBAL_STATIC(QtCursorDatabase, cursorDatabase)
+// Make sure icons are removed as soon as QApplication is destroyed, otherwise,
+// handles are leaked on X11.
+static void clearCursorDatabase();
+Q_GLOBAL_STATIC_WITH_INITIALIZER(QtCursorDatabase, cursorDatabase, qAddPostRoutine(clearCursorDatabase))
+
+static void clearCursorDatabase()
+{
+    cursorDatabase()->clear();
+}
 
 class QtCursorPropertyManagerPrivate
Index: /trunk/tools/shared/qttoolbardialog/qttoolbardialog.h
===================================================================
--- /trunk/tools/shared/qttoolbardialog/qttoolbardialog.h	(revision 768)
+++ /trunk/tools/shared/qttoolbardialog/qttoolbardialog.h	(revision 769)
@@ -69,5 +69,5 @@
 public:
 
-    QtToolBarManager(QObject *parent = 0);
+    explicit QtToolBarManager(QObject *parent = 0);
     ~QtToolBarManager();
 
@@ -101,5 +101,5 @@
 public:
 
-    QtToolBarDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    explicit QtToolBarDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
     ~QtToolBarDialog();
 
Index: /trunk/tools/shared/symbian/epocroot.cpp
===================================================================
--- /trunk/tools/shared/symbian/epocroot.cpp	(revision 769)
+++ /trunk/tools/shared/symbian/epocroot.cpp	(revision 769)
@@ -0,0 +1,230 @@
+/****************************************************************************
+**
+** 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 qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <iostream>
+
+#include <QtCore/qdir.h>
+#include <QtCore/qxmlstream.h>
+
+#include "epocroot.h"
+#include "../windows/registry.h"
+
+// Registry key under which the location of the Symbian devices.xml file is
+// stored.
+// Note that, on 64-bit machines, this key is located under the 32-bit
+// compatibility key:
+//     HKEY_LOCAL_MACHINE\Software\Wow6432Node
+#define SYMBIAN_SDKS_REG_SUBKEY "Software\\Symbian\\EPOC SDKs\\CommonPath"
+
+#ifdef Q_OS_WIN32
+#   define SYMBIAN_SDKS_REG_HANDLE HKEY_LOCAL_MACHINE
+#else
+#   define SYMBIAN_SDKS_REG_HANDLE 0
+#endif
+
+// Value which is populated and returned by the epocRoot() function.
+// Stored as a static value in order to avoid unnecessary re-evaluation.
+static QString epocRootValue;
+
+#ifdef QT_BUILD_QMAKE
+std::ostream &operator<<(std::ostream &s, const QString &val) {
+    s << val.toLocal8Bit().data();
+    return s;
+}
+#else
+// Operator implemented in configureapp.cpp
+std::ostream &operator<<(std::ostream &s, const QString &val);
+#endif
+
+QString getDevicesXmlPath()
+    {
+    // Note that the following call will return a null string on platforms other
+    // than Windows.  If support is required on other platforms for devices.xml,
+    // an alternative mechanism for retrieving the location of this file will
+    // be required.
+    return readRegistryKey(SYMBIAN_SDKS_REG_HANDLE, SYMBIAN_SDKS_REG_SUBKEY);
+    }
+
+/**
+ * Checks whether epocRootValue points to an existent directory.
+ * If not, epocRootValue is set to an empty string and an error message is printed.
+ */
+void checkEpocRootExists(const QString &source)
+{
+    if (!epocRootValue.isEmpty()) {
+        QDir dir(epocRootValue);
+        if (!dir.exists()) {
+            std::cerr << "Warning: " << source << " is set to an invalid path: " << epocRootValue << std::endl;
+            epocRootValue = QString();
+        }
+    }
+}
+
+/**
+ * Translate path from Windows to Qt format.
+ */
+static void fixEpocRoot(QString &path)
+{
+    path.replace("\\", "/");
+
+    if (path.size() > 1 && path[1] == QChar(':')) {
+        path = path.mid(2);
+    }
+
+    if (!path.size() || path[path.size()-1] != QChar('/')) {
+        path += QChar('/');
+    }
+}
+
+/**
+ * Determine the epoc root for the currently active SDK.
+ */
+QString epocRoot()
+{
+    if (epocRootValue.isEmpty()) {
+        // 1. If environment variable EPOCROOT is set and points to an existent
+        //    directory, this is returned.
+        epocRootValue = qgetenv("EPOCROOT");
+        checkEpocRootExists("EPOCROOT");
+
+        if (epocRootValue.isEmpty()) {
+            // 2. The location of devices.xml is specified by a registry key.  If this
+            //    file exists, it is parsed.
+            QString devicesXmlPath = getDevicesXmlPath();
+            if (devicesXmlPath.isEmpty()) {
+                std::cerr << "Error: Symbian SDK registry key not found" << std::endl;
+            } else {
+                devicesXmlPath += "/devices.xml";
+                QFile devicesFile(devicesXmlPath);
+                if (devicesFile.open(QIODevice::ReadOnly)) {
+
+                    // 3. If the EPOCDEVICE environment variable is set and a corresponding
+                    //    entry is found in devices.xml, and its epocroot value points to an
+                    //    existent directory, it is returned.
+                    // 4. If a device element marked as default is found in devices.xml and its
+                    //    epocroot value points to an existent directory, this is returned.
+
+                    const QString epocDeviceValue = qgetenv("EPOCDEVICE");
+                    bool epocDeviceFound = false;
+
+                    QXmlStreamReader xml(&devicesFile);
+                    while (!xml.atEnd()) {
+                        xml.readNext();
+                        if (xml.isStartElement() && xml.name() == "devices") {
+                            if (xml.attributes().value("version") == "1.0") {
+                                while (!(xml.isEndElement() && xml.name() == "devices") && !xml.atEnd()) {
+                                    xml.readNext();
+                                    if (xml.isStartElement() && xml.name() == "device") {
+                                        const bool isDefault =  xml.attributes().value("default") == "yes";
+                                        const QString id = xml.attributes().value("id").toString();
+                                        const QString name =  xml.attributes().value("name").toString();
+                                        const bool epocDeviceMatch = (id + ":" + name) == epocDeviceValue;
+                                        epocDeviceFound |= epocDeviceMatch;
+
+                                        if((epocDeviceValue.isEmpty() && isDefault) || epocDeviceMatch) {
+                                            // Found a matching device
+                                            while (!(xml.isEndElement() && xml.name() == "device") && !xml.atEnd()) {
+                                                xml.readNext();
+                                                if (xml.isStartElement() && xml.name() == "epocroot") {
+                                                    epocRootValue = xml.readElementText();
+                                                    const QString deviceSource = epocDeviceValue.isEmpty()
+                                                        ? "default device"
+                                                        : "EPOCDEVICE (" + epocDeviceValue + ")";
+                                                    checkEpocRootExists(deviceSource);
+                                                }
+                                            }
+
+                                            if (epocRootValue.isEmpty())
+                                                xml.raiseError("No epocroot element found");
+                                        }
+                                    }
+                                }
+                            } else {
+                                xml.raiseError("Invalid 'devices' element version");
+                            }
+                        }
+                    }
+                    if (xml.hasError()) {
+                        std::cerr << "Error: \"" << xml.errorString() << "\" when parsing devices.xml" << std::endl;
+                    } else {
+                        if (epocRootValue.isEmpty()) {
+                            if (!epocDeviceValue.isEmpty()) {
+                                if (epocDeviceFound) {
+                                    std::cerr << "Error: missing or invalid epocroot attribute "
+                                              << "in device '" << epocDeviceValue << "'";
+                                } else {
+                                    std::cerr << "Error: no device matching EPOCDEVICE ("
+                                              << epocDeviceValue << ")";
+                                }
+                            } else {
+                                if (epocDeviceFound) {
+                                    std::cerr << "Error: missing or invalid epocroot attribute "
+                                              << "in default device";
+                                } else {
+                                    std::cerr << "Error: no default device";
+                                }
+                            }
+                            std::cerr << " found in devices.xml file." << std::endl;
+                        }
+                    }
+                } else {
+                    std::cerr << "Error: could not open file " << devicesXmlPath << std::endl;
+                }
+            }
+        }
+
+        if (epocRootValue.isEmpty()) {
+            // 5. An empty string is returned.
+            std::cerr << "Error: failed to find epoc root" << std::endl
+                 << "Either" << std::endl
+                 << "    1. Set EPOCROOT environment variable to a valid value" << std::endl
+                 << " or 2. Ensure that the HKEY_LOCAL_MACHINE\\" SYMBIAN_SDKS_REG_SUBKEY
+                    " registry key is set, and then" << std::endl
+                 << "       a. Set EPOCDEVICE environment variable to a valid device" << std::endl
+                 << "    or b. Specify a default device in the devices.xml file." << std::endl;
+        } else {
+            fixEpocRoot(epocRootValue);
+        }
+    }
+
+    return epocRootValue;
+}
+
Index: /trunk/tools/shared/symbian/epocroot.h
===================================================================
--- /trunk/tools/shared/symbian/epocroot.h	(revision 769)
+++ /trunk/tools/shared/symbian/epocroot.h	(revision 769)
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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 qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SYMBIAN_EPOCROOT_H
+#define SYMBIAN_EPOCROOT_H
+
+#include <QtCore/qstring.h>
+
+/**
+ * Determine the epoc root for the currently active SDK.
+ *
+ * The algorithm used is as follows:
+ * 1. If environment variable EPOCROOT is set and points to an existent
+ *    directory, this is returned.
+ * 2. The location of devices.xml is specified by a registry key.  If this
+ *    file exists, it is parsed.
+ * 3. If the EPOCDEVICE environment variable is set and a corresponding
+ *    entry is found in devices.xml, and its epocroot value points to an
+ *    existent directory, it is returned.
+ * 4. If a device element marked as default is found in devices.xml and its
+ *    epocroot value points to an existent directory, this is returned.
+ * 5. An empty string is returned.
+ *
+ * Any return value other than the empty string therefore is guaranteed to
+ * point to an existent directory.
+ */
+QString epocRoot();
+
+#endif // EPOCROOT_H
Index: /trunk/tools/shared/windows/registry.cpp
===================================================================
--- /trunk/tools/shared/windows/registry.cpp	(revision 769)
+++ /trunk/tools/shared/windows/registry.cpp	(revision 769)
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** 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 qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qstringlist.h>
+#include "registry.h"
+
+/*!
+  Returns the path part of a registry key.
+  e.g.
+      For a key
+          "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
+      it returns
+          "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\"
+*/
+static QString keyPath(const QString &rKey)
+{
+    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
+    if (idx == -1)
+        return QString();
+    return rKey.left(idx + 1);
+}
+
+/*!
+  Returns the name part of a registry key.
+  e.g.
+      For a key
+          "Software\\Microsoft\\VisualStudio\\8.0\\Setup\\VC\\ProductDir"
+      it returns
+          "ProductDir"
+*/
+static QString keyName(const QString &rKey)
+{
+    int idx = rKey.lastIndexOf(QLatin1Char('\\'));
+    if (idx == -1)
+        return rKey;
+
+    QString res(rKey.mid(idx + 1));
+    if (res == "Default" || res == ".")
+        res = "";
+    return res;
+}
+
+QString readRegistryKey(HKEY parentHandle, const QString &rSubkey)
+{
+    QString result;
+
+#ifdef Q_OS_WIN32
+    QString rSubkeyName = keyName(rSubkey);
+    QString rSubkeyPath = keyPath(rSubkey);
+
+    HKEY handle = 0;
+    LONG res = RegOpenKeyEx(parentHandle, (wchar_t*)rSubkeyPath.utf16(), 0, KEY_READ, &handle);
+
+    if (res != ERROR_SUCCESS)
+        return QString();
+
+    // get the size and type of the value
+    DWORD dataType;
+    DWORD dataSize;
+    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, &dataType, 0, &dataSize);
+    if (res != ERROR_SUCCESS) {
+        RegCloseKey(handle);
+        return QString();
+    }
+
+    // get the value
+    QByteArray data(dataSize, 0);
+    res = RegQueryValueEx(handle, (wchar_t*)rSubkeyName.utf16(), 0, 0,
+                          reinterpret_cast<unsigned char*>(data.data()), &dataSize);
+    if (res != ERROR_SUCCESS) {
+        RegCloseKey(handle);
+        return QString();
+    }
+
+    switch (dataType) {
+        case REG_EXPAND_SZ:
+        case REG_SZ: {
+            result = QString::fromWCharArray(((const wchar_t *)data.constData()));
+            break;
+        }
+
+        case REG_MULTI_SZ: {
+            QStringList l;
+            int i = 0;
+            for (;;) {
+                QString s = QString::fromWCharArray((const wchar_t *)data.constData() + i);
+                i += s.length() + 1;
+
+                if (s.isEmpty())
+                    break;
+                l.append(s);
+            }
+            result = l.join(", ");
+            break;
+        }
+
+        case REG_NONE:
+        case REG_BINARY: {
+            result = QString::fromWCharArray((const wchar_t *)data.constData(), data.size() / 2);
+            break;
+        }
+
+        case REG_DWORD_BIG_ENDIAN:
+        case REG_DWORD: {
+            Q_ASSERT(data.size() == sizeof(int));
+            int i;
+            memcpy((char*)&i, data.constData(), sizeof(int));
+            result = QString::number(i);
+            break;
+        }
+
+        default:
+            qWarning("QSettings: unknown data %d type in windows registry", dataType);
+            break;
+    }
+
+    RegCloseKey(handle);
+#endif
+
+    return result;
+}
+
+
Index: /trunk/tools/shared/windows/registry.h
===================================================================
--- /trunk/tools/shared/windows/registry.h	(revision 769)
+++ /trunk/tools/shared/windows/registry.h	(revision 769)
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** 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 qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WINDOWS_REGISTRY_H
+#define WINDOWS_REGISTRY_H
+
+#include <QtCore/qglobal.h>
+
+#ifdef Q_OS_WIN32
+   #include <QtCore/qt_windows.h>
+#else
+    typedef void* HKEY;
+#endif
+
+#include <QtCore/qstring.h>
+
+/**
+ * Read a value from the Windows registry.
+ *
+ * If the key is not found, or the registry cannot be accessed (for example
+ * if this code is compiled for a platform other than Windows), a null
+ * string is returned.
+ */
+QString readRegistryKey(HKEY parentHandle, const QString &rSubkey);
+
+#endif // WINDOWS_REGISTRY_H
Index: /trunk/tools/tools.pro
===================================================================
--- /trunk/tools/tools.pro	(revision 768)
+++ /trunk/tools/tools.pro	(revision 769)
@@ -29,5 +29,6 @@
 contains(QT_CONFIG, declarative):SUBDIRS += qmlviewer qmldebugger
 contains(QT_CONFIG, dbus):SUBDIRS += qdbus
-!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator
+# We don't need these command line utilities on embedded platforms.
+!wince*:!symbian:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator
 embedded: SUBDIRS += makeqpf
 
Index: /trunk/translations/assistant_adp_ru.ts
===================================================================
--- /trunk/translations/assistant_adp_ru.ts	(revision 768)
+++ /trunk/translations/assistant_adp_ru.ts	(revision 769)
@@ -75,51 +75,50 @@
     <name>HelpDialog</name>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="+108"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>&amp;Index</source>
         <translation>&amp;Ð£ÐºÐ°Ð·Ð°ÑÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>&amp;Look For:</source>
         <translation>&amp;ÐÑÐºÐ°ÑÑ:</translation>
     </message>
     <message>
-        <location line="+91"/>
+        <location/>
         <source>&amp;New</source>
         <translation>&amp;ÐÐŸÐ²Ð°Ñ</translation>
     </message>
     <message>
-        <location line="+23"/>
-        <location line="+111"/>
+        <location/>
         <source>&amp;Search</source>
         <translation>&amp;ÐÐŸÐžÑÐº</translation>
     </message>
     <message>
-        <location line="-212"/>
+        <location/>
         <source>&lt;b&gt;Enter a keyword.&lt;/b&gt;&lt;p&gt;The list will select an item that matches the entered string best.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Ð£ÐºÐ°Ð·Ð°ÐœÐžÐµ ÐºÐ»ÑÑÐµÐ²ÐŸÐ³ÐŸ ÑÐ»ÐŸÐ²Ð°.&lt;/b&gt;&lt;p&gt;Ð¡Ð¿ÐžÑÐŸÐº Ð·Ð°Ð¿ÐŸÐ»ÐœÑÐµÑÑÑ ÑÐ»ÐµÐŒÐµÐœÑÐ°ÐŒÐž, Ð»ÑÑÑÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐžÐŒÐž ÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐŒÑ ÐºÐ»ÑÑÐµÐ²ÐŸÐŒÑ ÑÐ»ÐŸÐ²Ñ.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="+142"/>
+        <location/>
         <source>&lt;b&gt;Enter search word(s).&lt;/b&gt;&lt;p&gt;Enter here the word(s) you are looking for. The words may contain wildcards (*). For a sequence of words quote them.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Ð£ÐºÐ°Ð·Ð°ÐœÐžÐµ ÑÐ»ÐŸÐ² ÐŽÐ»Ñ Ð¿ÐŸÐžÑÐºÐ°.&lt;/b&gt;&lt;p&gt;ÐÐ²ÐµÐŽÐžÑÐµ ÐŸÐŽÐœÐŸ ÐžÐ»Ðž ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ², Ð¿ÐŸ ÐºÐŸÑÐŸÑÑÐŒ ÑÑÐµÐ±ÑÐµÑÑÑ ÐŸÑÑÑÐµÑÑÐ²ÐžÑÑ Ð¿ÐŸÐžÑÐº. Ð¡Ð»ÐŸÐ²Ð° ÐŒÐŸÐ³ÑÑ ÑÐŸÐŽÐµÑÐ¶ÐºÐ°ÑÑ ÑÐžÐŒÐ²ÐŸÐ»Ñ-Ð·Ð°ÐŒÐµÐœÐžÑÐµÐ»Ðž (*). ÐÑÐ»Ðž ÑÑÐµÐ±ÑÐµÑÑÑ ÐœÐ°Ð¹ÑÐž ÑÐŸÑÐµÑÐ°ÐœÐžÐµ ÑÐ»ÐŸÐ², Ð·Ð°ÐºÐ»ÑÑÐžÑÐµ ÐžÑÐºÐŸÐŒÑÑ ÑÑÐ°Ð·Ñ Ð² ÐºÐ°Ð²ÑÑÐºÐž.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&lt;b&gt;Found documents&lt;/b&gt;&lt;p&gt;This list contains all found documents from the last search. The documents are ordered, i.e. the first document has the most matches.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;ÐÐ°Ð¹ÐŽÐµÐœÐœÑÐµ ÐŽÐŸÐºÑÐŒÐµÐœÑÑ&lt;/b&gt;&lt;p&gt;Ð ÐŽÐ°ÐœÐœÐŸÐŒ ÑÐ¿ÐžÑÐºÐµ Ð¿ÑÐµÐŽÑÑÐ°Ð²Ð»ÐµÐœÑ Ð²ÑÐµ ÐœÐ°Ð¹ÐŽÐµÐœÐœÑÐµ Ð¿ÑÐž Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐŒ Ð¿ÐŸÐžÑÐºÐµ ÐŽÐŸÐºÑÐŒÐµÐœÑÑ. ÐÐŸÐºÑÐŒÐµÐœÑÑ ÑÐ¿ÐŸÑÑÐŽÐŸÑÐµÐœÑ Ð¿ÐŸ ÑÐµÐ»ÐµÐ²Ð°ÐœÑÐœÐŸÑÑÐž, Ñ.Ðµ. ÑÐµÐŒ Ð²ÑÑÐµ Ð² ÑÐ¿ÐžÑÐºÐµ, ÑÐµÐŒ ÑÐ°ÑÐµ Ð² ÐœÑÐŒ Ð²ÑÑÑÐµÑÐ°ÑÑÑÑ ÐžÑÐºÐŸÐŒÑÐµ ÑÐ»ÐŸÐ²Ð°.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="-196"/>
+        <location/>
         <source>&lt;b&gt;Help topics organized by category.&lt;/b&gt;&lt;p&gt;Double-click an item to see the topics in that category. To view a topic, just double-click it.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Ð Ð°Ð·ÐŽÐµÐ»Ñ ÑÐ¿ÑÐ°Ð²ÐºÐž, ÑÐ°ÑÐ¿ÑÐµÐŽÐµÐ»ÑÐœÐœÑÐµ Ð¿ÐŸ ÐºÐ°ÑÐµÐ³ÐŸÑÐžÑÐŒ.&lt;/b&gt;&lt;p&gt;ÐÐ²Ð°Ð¶ÐŽÑ ÑÑÐ»ÐºÐœÐžÑÐµ Ð¿ÐŸ ÐŸÐŽÐœÐŸÐŒÑ ÐžÐ· Ð¿ÑÐœÐºÑÐŸÐ² ÐŽÐ»Ñ ÐŸÑÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐ°Ð·ÐŽÐµÐ»ÐŸÐ² Ð² ÐŽÐ°ÐœÐœÐŸÐ¹ ÐºÐ°ÑÐµÐ³ÐŸÑÐžÐž. ÐÐ»Ñ ÐŸÑÐºÑÑÑÐžÑ ÑÐ°Ð·ÐŽÐµÐ»Ð° ÐŽÐ²Ð°Ð¶ÐŽÑ ÑÑÐ»ÐºÐœÐžÑÐµ Ð¿ÐŸ ÐœÐµÐŒÑ.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="-31"/>
+        <location/>
         <source>&lt;b&gt;Help&lt;/b&gt;&lt;p&gt;Choose the topic you want help on from the contents list, or search the index for keywords.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Ð¡Ð¿ÑÐ°Ð²ÐºÐ°&lt;/b&gt;&lt;p&gt;ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ°Ð·ÐŽÐµÐ» ÑÐ¿ÑÐ°Ð²ÐºÐž ÐžÐ· ÐŸÐ³Ð»Ð°Ð²Ð»ÐµÐœÐžÑ ÐžÐ»Ðž Ð²ÐŸÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµÑÑ Ð¿ÐŸÐžÑÐºÐŸÐŒ Ð¿ÐŸ Ð¿ÑÐµÐŽÐŒÐµÑÐœÐŸÐŒÑ ÑÐºÐ°Ð·Ð°ÑÐµÐ»Ñ.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location line="+85"/>
+        <location/>
         <source>&lt;b&gt;List of available help topics.&lt;/b&gt;&lt;p&gt;Double-click on an item to open its help page. If more than one is found, you must specify which page you want.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Ð¡Ð¿ÐžÑÐŸÐº ÐŽÐŸÑÑÑÐ¿ÐœÑÑ
@@ -127,10 +126,10 @@
     </message>
     <message>
-        <location line="+62"/>
+        <location/>
         <source>Add new bookmark</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð·Ð°ÐºÐ»Ð°ÐŽÐºÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Add the currently displayed page as a new bookmark.</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÐŒÑÑ ÑÑÑÐ°ÐœÐžÑÑ Ð² Ð·Ð°ÐºÐ»Ð°ÐŽÐºÐž.</translation>
@@ -142,40 +141,40 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-134"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Con&amp;tents</source>
         <translation>&amp;ÐÐ³Ð»Ð°Ð²Ð»ÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+144"/>
+        <location/>
         <source>Delete bookmark</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ Ð·Ð°ÐºÐ»Ð°ÐŽÐºÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Delete the selected bookmark.</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ Ð²ÑÐ±ÑÐ°ÐœÐœÑÑ Ð·Ð°ÐºÐ»Ð°ÐŽÐºÑ.</translation>
     </message>
     <message>
-        <location line="+51"/>
+        <location/>
         <source>Enter searchword(s)</source>
         <translation>ÐÐ²ÐµÐŽÐžÑÐµ ÐŸÐŽÐœÐŸ ÐžÐ»Ðž ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ² ÐŽÐ»Ñ Ð¿ÐŸÐžÑÐºÐ°</translation>
     </message>
     <message>
-        <location line="+38"/>
+        <location/>
         <source>Display the help page</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ ÑÑÑÐ°ÐœÐžÑÑ ÑÐ¿ÑÐ°Ð²ÐºÐž</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Display the help page for the full text search.</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ ÑÐ¿ÑÐ°Ð²ÐºÑ Ð¿ÐŸ Ð¿ÐŸÐ»ÐœÐŸÑÐµÐºÑÑÐŸÐ²ÐŸÐŒÑ Ð¿ÐŸÐžÑÐºÑ.</translation>
     </message>
     <message>
-        <location line="+26"/>
+        <location/>
         <source>Start searching</source>
         <translation>ÐÐ°ÑÐ°ÑÑ Ð¿ÐŸÐžÑÐº</translation>
     </message>
     <message>
-        <location line="-269"/>
+        <location/>
         <source>Displays help topics organized by category, index or bookmarks. Another tab inherits the full text search.</source>
         <translation>ÐÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÑ ÑÐ¿ÐžÑÐŸÐº ÑÐ°Ð·ÐŽÐµÐ»ÐŸÐ², ÑÐ°ÑÐ¿ÑÐµÐŽÑÐ»ÐµÐœÐœÑÑ
@@ -183,5 +182,5 @@
     </message>
     <message>
-        <location line="+96"/>
+        <location/>
         <source>Displays the list of bookmarks.</source>
         <translation>ÐÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÑ ÑÐ¿ÐžÑÐŸÐº Ð·Ð°ÐºÐ»Ð°ÐŽÐŸÐº.</translation>
@@ -209,5 +208,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-36"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Enter keyword</source>
         <translation>ÐÐ²ÐµÐŽÐžÑÐµ ÐºÐ»ÑÑÐµÐ²ÐŸÐµ ÑÐ»ÐŸÐ²ÐŸ</translation>
@@ -230,5 +229,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="+162"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Found &amp;Documents:</source>
         <translation>ÐÐ°Ð¹ÐŽÐµÐœÐœÑÐµ &amp;ÐŽÐŸÐºÑÐŒÐµÐœÑÑ:</translation>
@@ -241,10 +240,10 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="+24"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>He&amp;lp</source>
         <translation>&amp;Ð¡Ð¿ÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="-261"/>
+        <location/>
         <source>Help</source>
         <translation>Ð¡Ð¿ÑÐ°Ð²ÐºÐ°</translation>
@@ -278,10 +277,10 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="+321"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Preparing...</source>
         <translation>ÐÐŸÐŽÐ³ÐŸÑÐŸÐ²ÐºÐ°...</translation>
     </message>
     <message>
-        <location line="-34"/>
+        <location/>
         <source>Pressing this button starts the search.</source>
         <translation>ÐÐ°Ð¶Ð°ÑÐžÐµ ÐœÐ° ÑÑÑ ÐºÐœÐŸÐ¿ÐºÑ Ð·Ð°Ð¿ÑÑÑÐžÑ Ð¿ÑÐŸÑÐµÑÑ Ð¿ÐŸÐžÑÐºÐ°.</translation>
@@ -300,5 +299,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-80"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Searching f&amp;or:</source>
         <translation>&amp;ÐÑÐºÐ°ÑÑ:</translation>
@@ -322,6 +321,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-163"/>
-        <location line="+74"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>column 1</source>
         <translation>ÑÑÐŸÐ»Ð±ÐµÑ 1</translation>
@@ -342,10 +340,10 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-22"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>&amp;Bookmarks</source>
         <translation>&amp;ÐÐ°ÐºÐ»Ð°ÐŽÐºÐž</translation>
     </message>
     <message>
-        <location line="+73"/>
+        <location/>
         <source>&amp;Delete</source>
         <translation>&amp;Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
@@ -413,71 +411,70 @@
     <name>MainWindow</name>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+373"/>
-        <location line="+3"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>&quot;What&apos;s This?&quot; context sensitive help.</source>
         <translation>ÐÐŸÐœÑÐµÐºÑÑÐœÐ°Ñ ÑÐ¿ÑÐ°Ð²ÐºÐ° &quot;Ð§ÑÐŸ ÑÑÐŸ?&quot;.</translation>
     </message>
     <message>
-        <location line="-17"/>
+        <location/>
         <source>&amp;Add Bookmark</source>
         <translation>&amp;ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð·Ð°ÐºÐ»Ð°ÐŽÐºÑ</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location/>
         <source>&amp;Close</source>
         <translation>&amp;ÐÐ°ÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="-141"/>
+        <location/>
         <source>&amp;Copy</source>
         <translation>&amp;ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="-49"/>
+        <location/>
         <source>&amp;Edit</source>
         <translation>&amp;ÐÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="-39"/>
+        <location/>
         <source>&amp;File</source>
         <translation>&amp;Ð€Ð°Ð¹Ð»</translation>
     </message>
     <message>
-        <location line="+102"/>
+        <location/>
         <source>&amp;Find in Text...</source>
         <translation>Ð&amp;ÐŸÐžÑÐº Ð¿ÐŸ ÑÐµÐºÑÑÑ...</translation>
     </message>
     <message>
-        <location line="-82"/>
+        <location/>
         <source>&amp;Go</source>
         <translation>&amp;ÐÐµÑÐµÐ¹ÑÐž</translation>
     </message>
     <message>
-        <location line="-31"/>
+        <location/>
         <source>&amp;Help</source>
         <translation>&amp;Ð¡Ð¿ÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+143"/>
+        <location/>
         <source>&amp;Home</source>
         <translation>&amp;ÐÐŸÐŒÐŸÐ¹</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>&amp;Next</source>
         <translation>Ð¡Ð»&amp;ÐµÐŽÑÑÑÐžÐ¹</translation>
     </message>
     <message>
-        <location line="-14"/>
+        <location/>
         <source>&amp;Previous</source>
         <translation>&amp;ÐÑÐµÐŽÑÐŽÑÑÐžÐ¹</translation>
     </message>
     <message>
-        <location line="-86"/>
+        <location/>
         <source>&amp;Print...</source>
         <translation>&amp;ÐÐµÑÐ°ÑÑ...</translation>
     </message>
     <message>
-        <location line="-28"/>
+        <location/>
         <source>&amp;View</source>
         <translation>&amp;ÐÐžÐŽ</translation>
@@ -494,25 +491,25 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+150"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>About Qt</source>
         <translation>Ð Qt</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location/>
         <source>About Qt Assistant</source>
         <translation>Ð Qt Assistant</translation>
     </message>
     <message>
-        <location line="+94"/>
+        <location/>
         <source>Add Tab</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð²ÐºÐ»Ð°ÐŽÐºÑ</translation>
     </message>
     <message>
-        <location line="-22"/>
+        <location/>
         <source>Add the currently displayed page as a new bookmark.</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÐŒÑÑ ÑÑÑÐ°ÐœÐžÑÑ Ð² Ð·Ð°ÐºÐ»Ð°ÐŽÐºÐž.</translation>
     </message>
     <message>
-        <location line="-228"/>
+        <location/>
         <source>Boo&amp;kmarks</source>
         <translation>&amp;ÐÐ°ÐºÐ»Ð°ÐŽÐºÐž</translation>
@@ -524,15 +521,15 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+274"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Close Tab</source>
         <translation>ÐÐ°ÐºÑÑÑÑ Ð²ÐºÐ»Ð°ÐŽÐºÑ</translation>
     </message>
     <message>
-        <location line="-57"/>
+        <location/>
         <source>Close the current window.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÑÐµÐºÑÑÐµÐµ ÐŸÐºÐœÐŸ.</translation>
     </message>
     <message>
-        <location line="-58"/>
+        <location/>
         <source>Display further information about Qt Assistant.</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ Qt Assistant.</translation>
@@ -544,5 +541,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="-103"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>E&amp;xit</source>
         <translation>Ð&amp;ÑÑ
@@ -555,30 +552,30 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+42"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Find &amp;Next</source>
         <translation>ÐÐ°Ð¹ÑÐž &amp;ÑÐ»ÐµÐŽÑÑÑÐµÐµ</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Find &amp;Previous</source>
         <translation>ÐÐ°Ð¹ÑÐž &amp;Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐµ</translation>
     </message>
     <message>
-        <location line="+206"/>
+        <location/>
         <source>Font Settings...</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž ÑÑÐžÑÑÐ°...</translation>
     </message>
     <message>
-        <location line="-361"/>
+        <location/>
         <source>Go</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž</translation>
     </message>
     <message>
-        <location line="+169"/>
+        <location/>
         <source>Go to the home page. Qt Assistant&apos;s home page is the Qt Reference Documentation.</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž ÐœÐ° ÐŽÐŸÐŒÐ°ÑÐœÑÑ ÑÑÑÐ°ÐœÐžÑÑ. ÐÐŸÐŒÐ°ÑÐœÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ° Qt Assistant - Ð¡Ð¿ÑÐ°Ð²ÐŸÑÐœÐ°Ñ ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÑ Ð¿ÐŸ Qt.</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>Go to the next page.</source>
         <translation>ÐÐµÑÐµÑ
@@ -596,30 +593,30 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+55"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>New Window</source>
         <translation>ÐÐŸÐ²ÐŸÐµ ÐŸÐºÐœÐŸ</translation>
     </message>
     <message>
-        <location line="+55"/>
+        <location/>
         <source>Next Tab</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ Ð²ÐºÐ»Ð°ÐŽÐºÐ°</translation>
     </message>
     <message>
-        <location line="-52"/>
+        <location/>
         <source>Open a new window.</source>
         <translation>ÐÑÐºÑÑÑÑ ÐœÐŸÐ²ÐŸÐµ ÐŸÐºÐœÐŸ.</translation>
     </message>
     <message>
-        <location line="-116"/>
+        <location/>
         <source>Open the Find dialog. Qt Assistant will search the currently displayed page for the text you enter.</source>
         <translation>ÐÑÐºÑÑÑÑ ÐŸÐºÐœÐŸ Ð¿ÐŸÐžÑÐºÐ°. Qt Assistant Ð¿ÑÐŸÐžÐ·Ð²ÐµÐŽÑÑ Ð¿ÐŸÐžÑÐº Ð²Ð²ÐµÐŽÑÐœÐœÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ° ÐœÐ° ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÐŒÐŸÐ¹ ÑÑÑÐ°ÐœÐžÑÐµ.</translation>
     </message>
     <message>
-        <location line="+176"/>
+        <location/>
         <source>Previous Tab</source>
         <translation>ÐÑÐµÐŽÑÐŽÑÑÐ°Ñ Ð²ÐºÐ»Ð°ÐŽÐºÐ°</translation>
     </message>
     <message>
-        <location line="-218"/>
+        <location/>
         <source>Print the currently displayed page.</source>
         <translation>ÐÐµÑÐ°ÑÐ°ÑÑ ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÐŒÑÑ ÑÑÑÐ°ÐœÐžÑÑ.</translation>
@@ -632,15 +629,15 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+237"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Qt Assistant Manual</source>
         <translation>Ð ÑÐºÐŸÐ²ÐŸÐŽÑÑÐ²ÐŸ Ð¿ÐŸ Qt Assistant</translation>
     </message>
     <message>
-        <location line="-366"/>
+        <location/>
         <source>Qt Assistant by Nokia</source>
         <translation>Qt Assistant ÐŸÑ Nokia</translation>
     </message>
     <message>
-        <location line="+140"/>
+        <location/>
         <source>Quit Qt Assistant.</source>
         <translation>ÐÑÐ¹ÑÐž ÐžÐ· Qt Assistant.</translation>
@@ -654,5 +651,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+234"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Save Page As...</source>
         <translation>Ð¡ÐŸÑ
@@ -660,5 +657,5 @@
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Select the page in contents tab.</source>
         <translation>ÐÑÐ±ÑÐ°ÑÑ ÑÑÑÐ°ÐœÐžÑÑ Ð²ÐŸ Ð²ÐºÐ»Ð°ÐŽÐºÐµ ÐŸÐ³Ð»Ð°Ð²Ð»ÐµÐœÐžÑ.</translation>
@@ -670,5 +667,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="-3"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Sync with Table of Contents</source>
         <translation>Ð¡ÐžÐœÑ
@@ -676,5 +673,5 @@
     </message>
     <message>
-        <location line="-380"/>
+        <location/>
         <source>Toolbar</source>
         <translation>ÐÐ°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
@@ -686,25 +683,25 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+312"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>What&apos;s This?</source>
         <translation>Ð§ÑÐŸ ÑÑÐŸ?</translation>
     </message>
     <message>
-        <location line="-58"/>
+        <location/>
         <source>Zoom &amp;in</source>
         <translation>Ð£&amp;Ð²ÐµÐ»ÐžÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Zoom &amp;out</source>
         <translation>Ð£&amp;ÐŒÐµÐœÑÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-11"/>
+        <location/>
         <source>Zoom in on the document, i.e. increase the font size.</source>
         <translation>Ð£Ð²ÐµÐ»ÐžÑÐžÑÑ ÑÐ°Ð·ÐŒÐµÑ ÑÑÐžÑÑÐ°.</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Zoom out on the document, i.e. decrease the font size.</source>
         <translation>Ð£ÐŒÐµÐœÑÑÐžÑÑ ÑÐ°Ð·ÐŒÐµÑ ÑÑÐžÑÑÐ°.</translation>
@@ -751,45 +748,45 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="-144"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Ctrl+P</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Ctrl+Q</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Copy the selected text to the clipboard.</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ Ð²ÑÐŽÐµÐ»ÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ Ð² Ð±ÑÑÐµÑ ÐŸÐ±ÐŒÐµÐœÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+C</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Ctrl+F</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>F3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Shift+F3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Ctrl+Home</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Go to the previous page.</source>
         <translation>ÐÐµÑÐµÑ
@@ -797,65 +794,65 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Alt+Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Alt+Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+33"/>
+        <location/>
         <source>Ctrl++</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Ctrl+-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Ctrl+N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Ctrl+W</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location/>
         <source>Shift+F1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ctrl+Alt+N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ctrl+Alt+Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ctrl+Alt+Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ctrl+Alt+Q</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>F1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ctrl+Alt+S</source>
         <translation type="unfinished"></translation>
@@ -878,5 +875,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/tabbedbrowser.ui" line="+197"/>
+        <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
         <source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
         <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;ÐÐŸÐžÑÐº Ñ ÐœÐ°ÑÐ°Ð»Ð°</translation>
@@ -888,5 +885,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/tabbedbrowser.ui" line="-26"/>
+        <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
         <source>Case Sensitive</source>
         <translation>Ð£ÑÐžÑÑÐ²Ð°ÑÑ ÑÐµÐ³ÐžÑÑÑ</translation>
@@ -913,27 +910,27 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/tabbedbrowser.ui" line="-19"/>
+        <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
         <source>Next</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐµÐµ</translation>
     </message>
     <message>
-        <location line="-22"/>
+        <location/>
         <source>Previous</source>
         <translation>ÐÑÐµÐŽÑÐŽÑÑÐµÐµ</translation>
     </message>
     <message>
-        <location line="-62"/>
+        <location/>
         <source>Untitled</source>
         <translation>ÐÐµÐ·ÑÐŒÑÐœÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+110"/>
+        <location/>
         <source>Whole words</source>
         <translation>Ð¡Ð»ÐŸÐ²Ð° ÑÐµÐ»ÐžÐºÐŸÐŒ</translation>
     </message>
     <message>
-        <location line="-123"/>
+        <location/>
         <source>TabbedBrowser</source>
-        <translation type="unfinished"></translation>
+        <translation>TabbedBrowser</translation>
     </message>
 </context>
@@ -941,20 +938,20 @@
     <name>TopicChooser</name>
     <message>
-        <location filename="../tools/assistant/compat/topicchooser.ui" line="+149"/>
+        <location filename="../tools/assistant/compat/topicchooser.ui"/>
         <source>&amp;Close</source>
         <translation>&amp;ÐÐ°ÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="-16"/>
+        <location/>
         <source>&amp;Display</source>
         <translation>&amp;ÐÐŸÐºÐ°Ð·Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="-53"/>
+        <location/>
         <source>&amp;Topics</source>
         <translation>&amp;Ð Ð°Ð·ÐŽÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="-27"/>
+        <location/>
         <source>Choose Topic</source>
         <translation>ÐÑÐ±ÐŸÑ ÑÐ°Ð·ÐŽÐµÐ»Ð°</translation>
@@ -966,10 +963,10 @@
     </message>
     <message>
-        <location filename="../tools/assistant/compat/topicchooser.ui" line="+93"/>
+        <location filename="../tools/assistant/compat/topicchooser.ui"/>
         <source>Close the Dialog.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŽÐžÐ°Ð»ÐŸÐ³.</translation>
     </message>
     <message>
-        <location line="-56"/>
+        <location/>
         <source>Displays a list of available help topics for the keyword.</source>
         <translation>ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÑÐ¿ÐžÑÐŸÐº ÐŽÐŸÑÑÑÐ¿ÐœÑÑ
@@ -978,10 +975,10 @@
     </message>
     <message>
-        <location line="+40"/>
+        <location/>
         <source>Open the topic selected in the list.</source>
         <translation>ÐÑÐºÑÑÑÑ Ð²ÑÐ±ÑÐ°ÐœÐœÑÐ¹ ÑÐ°Ð·ÐŽÐµÐ».</translation>
     </message>
     <message>
-        <location line="-74"/>
+        <location/>
         <source>Select a topic from the list and click the &lt;b&gt;Display&lt;/b&gt;-button to open the online help.</source>
         <translation>ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ°Ð·ÐŽÐµÐ» ÐžÐ· ÑÐ¿ÐžÑÐºÐ° Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐœÐ° ÐºÐœÐŸÐ¿ÐºÑ &lt;b&gt;ÐÐŸÐºÐ°Ð·Ð°ÑÑ&lt;/b&gt; ÐŽÐ»Ñ ÐŸÑÐºÑÑÑÐžÑ ÐŸÐœÐ»Ð°Ð¹Ðœ ÑÐ¿ÑÐ°Ð²ÐºÐž.</translation>
Index: /trunk/translations/assistant_cs.ts
===================================================================
--- /trunk/translations/assistant_cs.ts	(revision 769)
+++ /trunk/translations/assistant_cs.ts	(revision 769)
@@ -0,0 +1,1074 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs_CZ">
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+110"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>AboutLabel</name>
+    <message>
+        <location line="-14"/>
+        <source>Warning</source>
+        <translation>VarovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Unable to launch external application.
+</source>
+        <translation>Chyba pÅi spouÅ¡tÄnÃ­ vnÄjÅ¡Ã­ aplikace.
+</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+</context>
+<context>
+    <name>BookmarkDialog</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/>
+        <source>Add Bookmark</source>
+        <translation>PÅidat zÃ¡loÅŸku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Bookmark:</source>
+        <translation>ZÃ¡loÅŸka:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Add in Folder:</source>
+        <translation>ZÅÃ­dit ve sloÅŸce:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New Folder</source>
+        <translation>NovÃ¡ sloÅŸka</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+184"/>
+        <location line="+18"/>
+        <location line="+39"/>
+        <location line="+18"/>
+        <location line="+30"/>
+        <source>Bookmarks</source>
+        <translation>ZÃ¡loÅŸky</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/>
+        <source>+</source>
+        <translation>+</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="-61"/>
+        <source>Delete Folder</source>
+        <translation>Smazat sloÅŸku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rename Folder</source>
+        <translation>PÅejmenovat sloÅŸku</translation>
+    </message>
+</context>
+<context>
+    <name>BookmarkManager</name>
+    <message>
+        <location line="+434"/>
+        <source>Bookmarks</source>
+        <translation>ZÃ¡loÅŸky</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>You are going to delete a Folder, this will also&lt;br&gt;remove it&apos;s content. Are you sure to continue?</source>
+        <translation>KdyÅŸ smaÅŸete tuto sloÅŸku, bude smazÃ¡n i &lt;br&gt;celÃœ jejÃ­ obsah. Opravdu chcete pokraÄovat?</translation>
+    </message>
+    <message>
+        <location line="+143"/>
+        <location line="+9"/>
+        <source>New Folder</source>
+        <translation>NovÃ¡ sloÅŸka</translation>
+    </message>
+</context>
+<context>
+    <name>BookmarkWidget</name>
+    <message>
+        <location line="-416"/>
+        <source>Filter:</source>
+        <translation>Filtr:</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location line="-79"/>
+        <source>Delete Folder</source>
+        <translation>Smazat sloÅŸku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rename Folder</source>
+        <translation>PÅejmenovat sloÅŸku</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Show Bookmark</source>
+        <translation>UkÃ¡zat zÃ¡loÅŸku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Show Bookmark in New Tab</source>
+        <translation>UkÃ¡zat zÃ¡loÅŸku v novÃ© kartÄ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete Bookmark</source>
+        <translation>Smazat zÃ¡loÅŸku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rename Bookmark</source>
+        <translation>PÅejmenovat zÃ¡loÅŸku</translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>Add</source>
+        <translation>PÅidat</translation>
+    </message>
+</context>
+<context>
+    <name>CentralWidget</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+238"/>
+        <source>Add new page</source>
+        <translation>PÅidat novou stranu</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Close current page</source>
+        <translation>ZavÅÃ­t souÄasnou stranu</translation>
+    </message>
+    <message>
+        <location line="+312"/>
+        <source>Print Document</source>
+        <translation>Vytisknout dokument</translation>
+    </message>
+    <message>
+        <location line="+148"/>
+        <location line="+2"/>
+        <source>unknown</source>
+        <translation>NeznÃ¡mÃœ</translation>
+    </message>
+    <message>
+        <location line="+93"/>
+        <source>Add New Page</source>
+        <translation>PÅidat novou stranu</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Close This Page</source>
+        <translation>ZavÅÃ­t tuto stranu</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Close Other Pages</source>
+        <translation>ZavÅÃ­t jinÃ© strany</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Add Bookmark for this Page...</source>
+        <translation>PÅidat zÃ¡loÅŸku pro tuto stranu...</translation>
+    </message>
+    <message>
+        <location line="+255"/>
+        <source>Search</source>
+        <translation>Hledat</translation>
+    </message>
+</context>
+<context>
+    <name>ContentWindow</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+158"/>
+        <source>Open Link</source>
+        <translation>OtevÅÃ­t adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Open Link in New Tab</source>
+        <translation>OtevÅÃ­t odkaz v novÃ© kartÄ</translation>
+    </message>
+</context>
+<context>
+    <name>FilterNameDialogClass</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/>
+        <source>Add Filter Name</source>
+        <translation>PÅidat nÃ¡zev filtru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Filter Name:</source>
+        <translation>NÃ¡zev filtru:</translation>
+    </message>
+</context>
+<context>
+    <name>FindWidget</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-955"/>
+        <source>Previous</source>
+        <translation>PÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Next</source>
+        <translation>DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Case Sensitive</source>
+        <translation>RozliÅ¡ujÃ­cÃ­ velkÃ¡ a malÃ¡ pÃ­smena</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Whole words</source>
+        <translation>CelÃ¡ slova</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+        <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Konec strany</translation>
+    </message>
+</context>
+<context>
+    <name>FontPanel</name>
+    <message>
+        <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/>
+        <source>Font</source>
+        <translation>PÃ­smo</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>&amp;Writing system</source>
+        <translation>ZpÅ¯sob &amp;psanÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Family</source>
+        <translation>&amp;PÃ­smovÃ¡ rodina</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Style</source>
+        <translation>&amp;Styl</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Point size</source>
+        <translation>&amp;BodovÃ¡ velikost</translation>
+    </message>
+</context>
+<context>
+    <name>HelpViewer</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+492"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location line="-62"/>
+        <source>&lt;title&gt;Error 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
+        <translation>&lt;title&gt;Chyba 404 ...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Stranu se nepodaÅilo najÃ­t.&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
+    </message>
+    <message>
+        <location line="+125"/>
+        <source>Copy &amp;Link Location</source>
+        <translation>&amp;KopÃ­rovat adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Open Link in New Tab	Ctrl+LMB</source>
+        <translation>OtevÅÃ­t odkaz v novÃ© kartÄ	Ctrl+LMB</translation>
+    </message>
+    <message>
+        <location line="-275"/>
+        <source>Open Link in New Tab</source>
+        <translation>OtevÅÃ­t odkaz v novÃ© kartÄ</translation>
+    </message>
+    <message>
+        <location line="+209"/>
+        <source>Unable to launch external application.
+</source>
+        <translation>Chyba pÅi spouÅ¡tÄnÃ­ vnÄjÅ¡Ã­ aplikace.
+</translation>
+    </message>
+</context>
+<context>
+    <name>IndexWindow</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/>
+        <source>&amp;Look for:</source>
+        <translation>&amp;Hledat:</translation>
+    </message>
+    <message>
+        <location line="+68"/>
+        <source>Open Link</source>
+        <translation>OtevÅÃ­t adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Open Link in New Tab</source>
+        <translation>OtevÅÃ­t odkaz v novÃ© kartÄ</translation>
+    </message>
+</context>
+<context>
+    <name>InstallDialog</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
+        <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/>
+        <source>Install Documentation</source>
+        <translation>Nainstalovat dokumentaci</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+30"/>
+        <source>Downloading documentation info...</source>
+        <translation>Stahuje se informace o  dokumentaci...</translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>Download canceled.</source>
+        <translation>StahovÃ¡nÃ­ bylo zruÅ¡eno.</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <location line="+78"/>
+        <location line="+27"/>
+        <source>Done.</source>
+        <translation>Hotovo.</translation>
+    </message>
+    <message>
+        <location line="-90"/>
+        <source>The file %1 already exists. Do you want to overwrite it?</source>
+        <translation>Soubor %1 jiÅŸ existuje. Chcete jej pÅepsat?</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Unable to save the file %1: %2.</source>
+        <translation>Soubor %1 nelze uloÅŸit: %2.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Downloading %1...</source>
+        <translation>Stahuje se %1...</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <location line="+42"/>
+        <location line="+38"/>
+        <source>Download failed: %1.</source>
+        <translation>StaÅŸenÃ­ se nezdaÅilo: %1.</translation>
+    </message>
+    <message>
+        <location line="-70"/>
+        <source>Documentation info file is corrupt!</source>
+        <translation>Soubor s informacÃ­ o dokumentaci je poÅ¡kozen!</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Download failed: Downloaded file is corrupted.</source>
+        <translation>StaÅŸenÃ­ se nezdaÅilo: StaÅŸenÃœ soubor je pravdÄpodobnÄ poÅ¡kozen.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Installing documentation %1...</source>
+        <translation>Instaluje dokumentace %1...</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Error while installing documentation:
+%1</source>
+        <translation>Chyba pÅi instalaci dokumentace:
+%1</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
+        <source>Available Documentation:</source>
+        <translation>DostupnÃ¡ dokumentace:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Install</source>
+        <translation>Instalovat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Installation Path:</source>
+        <translation>Cesta pro instalaci:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/>
+        <location line="+391"/>
+        <source>Index</source>
+        <translation>RejstÅÃ­k</translation>
+    </message>
+    <message>
+        <location line="-385"/>
+        <location line="+383"/>
+        <source>Contents</source>
+        <translation>Obsah</translation>
+    </message>
+    <message>
+        <location line="-378"/>
+        <location line="+382"/>
+        <source>Bookmarks</source>
+        <translation>ZÃ¡loÅŸky</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Search</source>
+        <translation>Hledat</translation>
+    </message>
+    <message>
+        <location line="-372"/>
+        <location line="+215"/>
+        <location line="+512"/>
+        <source>Qt Assistant</source>
+        <translation>Qt Assistant</translation>
+    </message>
+    <message>
+        <location line="-544"/>
+        <location line="+5"/>
+        <source>Unfiltered</source>
+        <translation>Bez filtru</translation>
+    </message>
+    <message>
+        <location line="+107"/>
+        <source>Page Set&amp;up...</source>
+        <translation>&amp;NastavenÃ­ strany...</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Print Preview...</source>
+        <translation>NÃ¡hled tisku...</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Print...</source>
+        <translation>&amp;Tisk...</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>New &amp;Tab</source>
+        <translation>NovÃ¡ &amp;karta</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Close Tab</source>
+        <translation>&amp;ZavÅÃ­t kartu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Quit</source>
+        <translation>&amp;UkonÄit</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Copy selected Text</source>
+        <translation>&amp;KopÃ­rovat vybranÃœ text</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&amp;Find in Text...</source>
+        <translation>&amp;NajÃ­t v textu...</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Find &amp;Next</source>
+        <translation>Hledat &amp;dÃ¡l</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Find &amp;Previous</source>
+        <translation>NajÃ­t &amp;pÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Preferences...</source>
+        <translation>NastavenÃ­...</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Zoom &amp;in</source>
+        <translation>&amp;ZvÄtÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Zoom &amp;out</source>
+        <translation>&amp;ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Normal &amp;Size</source>
+        <translation>ObvyklÃ¡ &amp;velikost</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Ctrl+0</source>
+        <translation>Ctrl+0</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>ALT+C</source>
+        <translation>ALT+C</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>ALT+I</source>
+        <translation>ALT+I</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>ALT+S</source>
+        <translation>ALT+S</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Home</source>
+        <translation>&amp;ZaÄÃ¡teÄnÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Back</source>
+        <translation>&amp;ZpÄt</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Forward</source>
+        <translation>&amp;DopÅedu</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Sync with Table of Contents</source>
+        <translation>SeÅÃ­dit stranu s kartou obsahu</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Next Page</source>
+        <translation>DalÅ¡Ã­ strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ctrl+Alt+Right</source>
+        <translation>Ctrl+Alt+Right</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Previous Page</source>
+        <translation>PÅedchozÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ctrl+Alt+Left</source>
+        <translation>Ctrl+Alt+Left</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Add Bookmark...</source>
+        <translation>PÅidat zÃ¡loÅŸku...</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>About...</source>
+        <translation>O...</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Navigation Toolbar</source>
+        <translation>NavigaÄnÃ­ pruh</translation>
+    </message>
+    <message>
+        <location line="+76"/>
+        <source>Toolbars</source>
+        <translation>NÃ¡strojovÃ© pruhy</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Filter Toolbar</source>
+        <translation>FiltrovacÃ­ pruh</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Filtered by:</source>
+        <translation>Filtr:</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Address Toolbar</source>
+        <translation>AdresnÃ­ pruh</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Address:</source>
+        <translation>Adresa:</translation>
+    </message>
+    <message>
+        <location line="+114"/>
+        <source>Could not find the associated content item.</source>
+        <translation>NepodaÅilo se najÃ­t pÅÃ­sluÅ¡nou poloÅŸku obsahu.</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>About %1</source>
+        <translation>O %1</translation>
+    </message>
+    <message>
+        <location line="+114"/>
+        <source>Updating search index</source>
+        <translation>Sestavuje se rejstÅÃ­k hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="-638"/>
+        <source>Looking for Qt Documentation...</source>
+        <translation>HledÃ¡ se dokumentace ke Qt...</translation>
+    </message>
+    <message>
+        <location line="+241"/>
+        <source>&amp;Window</source>
+        <translation>&amp;Okno</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Minimize</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ctrl+M</source>
+        <translation>Ctrl+M</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Zoom</source>
+        <translation>ZvÄtÅ¡enÃ­</translation>
+    </message>
+    <message>
+        <location line="-159"/>
+        <source>&amp;File</source>
+        <translation>&amp;Soubor</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>&amp;Edit</source>
+        <translation>&amp;Ãpravy</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>&amp;View</source>
+        <translation>&amp;Pohled</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>&amp;Go</source>
+        <translation>&amp;JÃ­t na</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>ALT+Home</source>
+        <translation>ALT+Home</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>&amp;Bookmarks</source>
+        <translation>&amp;ZÃ¡loÅŸky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Help</source>
+        <translation>&amp;NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-40"/>
+        <source>ALT+O</source>
+        <translation>ALT+O</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>CTRL+D</source>
+        <translation>CTRL+D</translation>
+    </message>
+</context>
+<context>
+    <name>PreferencesDialog</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+259"/>
+        <location line="+43"/>
+        <source>Add Documentation</source>
+        <translation>PÅidat dokumentaci</translation>
+    </message>
+    <message>
+        <location line="-43"/>
+        <source>Qt Compressed Help Files (*.qch)</source>
+        <translation>StlaÄenÃ© soubory s nÃ¡povÄdoun (*.qch)</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>The specified file is not a valid Qt Help File!</source>
+        <translation>ZadanÃœ soubor nenÃ­ platnÃœm souborem nÃ¡povÄdy ke Qt.</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>The namespace %1 is already registered!</source>
+        <translation>JmennÃœ prostor %1 je jiÅŸ zaznamenÃ¡m!</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Remove Documentation</source>
+        <translation>Odstranit dokumentaci</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source>
+        <translation>NÄkterÃ© v souÄasnosti otevÅenÃ© dokumenty pochÃ¡zejÃ­ z dokumentace, kterou se prÃ¡vÄ pokouÅ¡Ã­te odstranit. PÅi odstraÅovÃ¡nÃ­ budou zavÅeny.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location line="+88"/>
+        <source>Use custom settings</source>
+        <translation>PouÅŸÃ­t nastavenÃ­ stanovenÃ¡ uÅŸivatelem</translation>
+    </message>
+</context>
+<context>
+    <name>PreferencesDialogClass</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/>
+        <source>Preferences</source>
+        <translation>NastavenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Fonts</source>
+        <translation>PÃ­sma</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Font settings:</source>
+        <translation>NastavenÃ­ pÃ­sem:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Browser</source>
+        <translation>ProhlÃ­ÅŸeÄ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Application</source>
+        <translation>Program</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Filters</source>
+        <translation>Filtr</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Filter:</source>
+        <translation>Filtr:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Attributes:</source>
+        <translation>Vlastnosti:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Add</source>
+        <translation>PÅidat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Documentation</source>
+        <translation>Dokumentace</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Registered Documentation:</source>
+        <translation>ZaznamenanÃ¡ dokumentace:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Add...</source>
+        <translation>PÅidat...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Options</source>
+        <translation>Volby</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Current Page</source>
+        <translation>NynÄjÅ¡Ã­ strana</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Restore to default</source>
+        <translation>Obnovit vÃœchozÃ­ nastavenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Homepage</source>
+        <translation>ZaÄÃ¡teÄnÃ­ strÃ¡nka</translation>
+    </message>
+    <message>
+        <location/>
+        <source>On help start:</source>
+        <translation>Na zaÄÃ¡tek nÃ¡povÄdy:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show my home page</source>
+        <translation>UkÃ¡zat moji domovskou strÃ¡nku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show a blank page</source>
+        <translation>UkÃ¡zat prÃ¡zdnou strÃ¡nku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show my tabs from last session</source>
+        <translation>UkÃ¡zat mÃ© karty z poslednÃ­ho sezenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Blank Page</source>
+        <translation>PrÃ¡zdnÃ¡ strana</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/>
+        <source>The specified collection file does not exist!</source>
+        <translation>ZadanÃœ sbÃ­rkovÃœ soubor nelze najÃ­t!</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Missing collection file!</source>
+        <translation>ChybÄjÃ­cÃ­ sbÃ­rkovÃœ soubor!</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Invalid URL!</source>
+        <translation>NeplatnÃ© URL!</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Missing URL!</source>
+        <translation>ChybÄjÃ­cÃ­ URL!</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location line="+19"/>
+        <location line="+19"/>
+        <source>Unknown widget: %1</source>
+        <translation>NeznÃ¡mÃœ prvek: %1</translation>
+    </message>
+    <message>
+        <location line="-34"/>
+        <location line="+19"/>
+        <location line="+19"/>
+        <source>Missing widget!</source>
+        <translation>ChybÄjÃ­cÃ­ prvek!</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location line="+12"/>
+        <source>The specified Qt help file does not exist!</source>
+        <translation>ZadanÃœ soubor s nÃ¡povÄdou ke Qt nelze najÃ­t!</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <location line="+12"/>
+        <source>Missing help file!</source>
+        <translation>ChybÄjÃ­cÃ­ soubor s nÃ¡povÄdou!</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Missing filter argument!</source>
+        <translation>ChybÄjÃ­cÃ­ argument pro filtr!</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Unknown option: %1</source>
+        <translation>NeznÃ¡mÃ¡ volba: %1</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <location line="+2"/>
+        <source>Qt Assistant</source>
+        <translation>Qt Assistant</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/main.cpp" line="+217"/>
+        <source>Could not register documentation file
+%1
+
+Reason:
+%2</source>
+        <translation>Soubor s dokumentacÃ­ %1 nelze zaznamenat
+
+DÅ¯vod:
+%2</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Documentation successfully registered.</source>
+        <translation>Dokumentace byla ÃºspÄÅ¡nÄ zaznamenÃ¡na.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Could not unregister documentation file
+%1
+
+Reason:
+%2</source>
+        <translation>ZaznamenÃ¡nÃ­ souboru s dokumentacÃ­ %1 nelze zruÅ¡it
+
+Grund:
+%2</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Documentation successfully unregistered.</source>
+        <translation>Dokumentace byla ÃºspÄÅ¡nÄ odstranÄna.</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>Cannot load sqlite database driver!</source>
+        <translation>DatabÃ¡zovÃœ ovladaÄ pro SQLite nelze nahrÃ¡t!</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The specified collection file could not be read!</source>
+        <translation>ZadanÃœ sbÃ­rkovÃœ soubor nelze pÅeÄÃ­st!</translation>
+    </message>
+</context>
+<context>
+    <name>RemoteControl</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+163"/>
+        <source>Debugging Remote Control</source>
+        <translation>LadÃ­ se dÃ¡lkovÃ© ovlÃ¡dÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Received Command: %1 %2</source>
+        <translation>PÅijatÃœ pÅÃ­kaz: %1 : %2</translation>
+    </message>
+</context>
+<context>
+    <name>SearchWidget</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Copy &amp;Link Location</source>
+        <translation>&amp;KopÃ­rovat adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Open Link in New Tab</source>
+        <translation>OtevÅÃ­t odkaz v novÃ© kartÄ</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+</context>
+<context>
+    <name>TopicChooser</name>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/>
+        <source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;:</source>
+        <translation>Vyberte nÃ¡mÄt pro &lt;b&gt;%1&lt;/b&gt;:</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/>
+        <source>Choose Topic</source>
+        <translation>Vybrat nÃ¡mÄt</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Topics</source>
+        <translation>&amp;NÃ¡mÄty</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Display</source>
+        <translation>&amp;Zobrazit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/assistant_ru.ts
===================================================================
--- /trunk/translations/assistant_ru.ts	(revision 768)
+++ /trunk/translations/assistant_ru.ts	(revision 769)
@@ -33,39 +33,39 @@
     <name>BookmarkDialog</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui" line="+19"/>
+        <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/>
         <source>Add Bookmark</source>
         <translation>ÐÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ Ð·Ð°ÐºÐ»Ð°ÐŽÐºÐž</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Bookmark:</source>
         <translation>ÐÐ°ÐºÐ»Ð°ÐŽÐºÐ°:</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Add in Folder:</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² Ð¿Ð°Ð¿ÐºÑ:</translation>
     </message>
     <message>
-        <location line="+29"/>
+        <location/>
         <source>+</source>
         <translation>+</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>New Folder</source>
         <translation>ÐÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+184"/>
+        <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+187"/>
         <location line="+18"/>
         <location line="+39"/>
         <location line="+18"/>
-        <location line="+30"/>
+        <location line="+33"/>
         <source>Bookmarks</source>
         <translation>ÐÐ°ÐºÐ»Ð°ÐŽÐºÐž</translation>
     </message>
     <message>
-        <location line="-61"/>
+        <location line="-64"/>
         <source>Delete Folder</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ Ð¿Ð°Ð¿ÐºÑ</translation>
@@ -80,5 +80,5 @@
     <name>BookmarkManager</name>
     <message>
-        <location line="+434"/>
+        <location line="+452"/>
         <source>Bookmarks</source>
         <translation>ÐÐ°ÐºÐ»Ð°ÐŽÐºÐž</translation>
@@ -104,5 +104,5 @@
     <name>BookmarkWidget</name>
     <message>
-        <location line="-462"/>
+        <location line="-474"/>
         <source>Delete Folder</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ Ð¿Ð°Ð¿ÐºÑ</translation>
@@ -152,5 +152,5 @@
     <name>CentralWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+238"/>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/>
         <source>Add new page</source>
         <translation>ÐÑÐºÑÑÑÑ ÐœÐŸÐ²ÑÑ ÑÑÑÐ°ÐœÐžÑÑ</translation>
@@ -167,5 +167,5 @@
     </message>
     <message>
-        <location line="+148"/>
+        <location line="+130"/>
         <location line="+2"/>
         <source>unknown</source>
@@ -193,5 +193,5 @@
     </message>
     <message>
-        <location line="+255"/>
+        <location line="+248"/>
         <source>Search</source>
         <translation>ÐÐŸÐžÑÐº</translation>
@@ -214,10 +214,10 @@
     <name>FilterNameDialogClass</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/filternamedialog.ui" line="+13"/>
+        <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/>
         <source>Add Filter Name</source>
         <translation>ÐÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ ÑÐžÐ»ÑÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Filter Name:</source>
         <translation>ÐÐ°Ð·Ð²Ð°ÐœÐžÐµ ÑÐžÐ»ÑÑÑÐ°:</translation>
@@ -227,5 +227,5 @@
     <name>FindWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-955"/>
+        <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-931"/>
         <source>Previous</source>
         <translation>ÐÑÐµÐŽÑÐŽÑÑÐµÐµ</translation>
@@ -283,5 +283,5 @@
     <name>HelpViewer</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+284"/>
+        <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+283"/>
         <source>Open Link in New Tab</source>
         <translation>ÐÑÐºÑÑÑÑ ÑÑÑÐ»ÐºÑ Ð² ÐœÐŸÐ²ÐŸÐ¹ Ð²ÐºÐ»Ð°ÐŽÐºÐµ</translation>
@@ -328,5 +328,5 @@
     </message>
     <message>
-        <location line="+68"/>
+        <location line="+72"/>
         <source>Open Link</source>
         <translation>ÐÑÐºÑÑÑÑ ÑÑÑÐ»ÐºÑ</translation>
@@ -341,5 +341,5 @@
     <name>InstallDialog</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+13"/>
+        <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
         <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/>
         <source>Install Documentation</source>
@@ -409,30 +409,30 @@
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+6"/>
+        <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
         <source>Available Documentation:</source>
         <translation>ÐÐŸÑÑÑÐ¿ÐœÐ°Ñ ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Install</source>
         <translation>Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Cancel</source>
         <translation>ÐÑÐŒÐµÐœÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Close</source>
         <translation>ÐÐ°ÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Installation Path:</source>
         <translation>ÐÑÑÑ ÑÑÑÐ°ÐœÐŸÐ²ÐºÐž:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
@@ -443,29 +443,29 @@
     <message>
         <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/>
-        <location line="+391"/>
+        <location line="+383"/>
         <source>Index</source>
         <translation>Ð£ÐºÐ°Ð·Ð°ÑÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="-385"/>
-        <location line="+383"/>
+        <location line="-377"/>
+        <location line="+375"/>
         <source>Contents</source>
         <translation>Ð¡ÐŸÐŽÐµÑÐ¶Ð°ÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="-378"/>
-        <location line="+382"/>
+        <location line="-370"/>
+        <location line="+374"/>
         <source>Bookmarks</source>
         <translation>ÐÐ°ÐºÐ»Ð°ÐŽÐºÐž</translation>
     </message>
     <message>
-        <location line="-370"/>
-        <location line="+215"/>
-        <location line="+512"/>
+        <location line="-362"/>
+        <location line="+207"/>
+        <location line="+514"/>
         <source>Qt Assistant</source>
         <translation>Qt Assistant</translation>
     </message>
     <message>
-        <location line="-544"/>
+        <location line="-546"/>
         <location line="+5"/>
         <source>Unfiltered</source>
@@ -529,5 +529,10 @@
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+2"/>
+        <source>&amp;Find</source>
+        <translation>&amp;ÐÐŸÐžÑÐº</translation>
+    </message>
+    <message>
+        <location line="+4"/>
         <source>Find &amp;Next</source>
         <translation>ÐÐ°Ð¹ÑÐž &amp;ÑÐ»ÐµÐŽÑÑÑÐµÐµ</translation>
@@ -625,5 +630,11 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+2"/>
+        <source>Sync</source>
+        <translation>Ð¡ÐžÐœÑ
+ÑÐŸÐœÐžÐ·ÐžÑÐŸÐ²Ð°ÑÑ</translation>
+    </message>
+    <message>
+        <location line="+5"/>
         <source>Next Page</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ°</translation>
@@ -710,5 +721,5 @@
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+25"/>
         <source>Address Toolbar</source>
         <translation>ÐÐ°ÐœÐµÐ»Ñ Ð°ÐŽÑÐµÑÐ°</translation>
@@ -788,116 +799,115 @@
     <name>PreferencesDialogClass</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui" line="+14"/>
+        <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/>
         <source>Preferences</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Fonts</source>
         <translation>ÐšÑÐžÑÑÑ</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Font settings:</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž ÑÑÐžÑÑÐ°:</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Browser</source>
         <translation>ÐÐ±ÐŸÐ·ÑÐµÐ²Ð°ÑÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Application</source>
         <translation>ÐÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>Filters</source>
         <translation>Ð€ÐžÐ»ÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Filter:</source>
         <translation>Ð€ÐžÐ»ÑÑÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Attributes:</source>
         <translation>ÐÑÑÐžÐ±ÑÑÑ:</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Add</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
-        <location line="+51"/>
+        <location/>
         <source>Remove</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-43"/>
+        <location/>
         <source>Documentation</source>
         <translation>ÐÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Registered Documentation:</source>
         <translation>ÐÐ°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°ÐœÐœÐ°Ñ ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÑ:</translation>
     </message>
     <message>
-        <location line="+30"/>
+        <location/>
         <source>Add...</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ...</translation>
     </message>
     <message>
-        <location line="+32"/>
+        <location/>
         <source>Options</source>
         <translation>ÐÐ°ÑÐ°ÐŒÐµÑÑÑ</translation>
     </message>
     <message>
-        <location line="+74"/>
+        <location/>
         <source>Homepage</source>
         <translation>Ð¡ÑÐ°ÑÑÐŸÐ²Ð°Ñ ÑÑÑÐ°ÐœÐžÑÐ°</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location/>
         <source>Current Page</source>
         <translation>Ð¢ÐµÐºÑÑÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ°</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Restore to default</source>
         <translation>Ð¡ÑÑÐ°ÐœÐžÑÐ° Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="-97"/>
+        <location/>
         <source>On help start:</source>
         <translation>ÐÑÐž Ð·Ð°Ð¿ÑÑÐºÐµ:</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Show my home page</source>
         <translation>ÐÑÐŸÐ±ÑÐ°Ð·ÐžÑÑ ÑÑÐ°ÑÑÐŸÐ²ÑÑ ÑÑÑÐ°ÐœÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Show a blank page</source>
         <translation>ÐÑÐŸÐ±ÑÐ°Ð·ÐžÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐ°ÐœÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Show my tabs from last session</source>
         <translation>ÐÐŸÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ Ð¿ÑÐµÐŽÑÐŽÑÑÑÑ ÑÐµÑÑÐžÐžÑ</translation>
     </message>
     <message>
-        <location line="+66"/>
+        <location/>
         <source>Blank Page</source>
         <translation>ÐÑÑÑÐ°Ñ ÑÑÑÐ°ÐœÐžÑÐ°</translation>
@@ -969,5 +979,5 @@
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/main.cpp" line="+217"/>
+        <location filename="../tools/assistant/tools/assistant/main.cpp" line="+228"/>
         <source>Could not register documentation file
 %1
@@ -1032,5 +1042,5 @@
     <name>SearchWidget</name>
     <message>
-        <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/>
+        <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/>
         <source>&amp;Copy</source>
         <translation>&amp;ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ</translation>
@@ -1060,20 +1070,20 @@
     </message>
     <message>
-        <location filename="../tools/assistant/tools/assistant/topicchooser.ui" line="+16"/>
+        <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/>
         <source>Choose Topic</source>
         <translation>ÐÑÐ±ÐŸÑ ÑÐ°Ð·ÐŽÐµÐ»Ð°</translation>
     </message>
     <message>
-        <location line="+21"/>
+        <location/>
         <source>&amp;Topics</source>
         <translation>&amp;Ð Ð°Ð·ÐŽÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="+51"/>
+        <location/>
         <source>&amp;Display</source>
         <translation>&amp;ÐÐŸÐºÐ°Ð·Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>&amp;Close</source>
         <translation>&amp;ÐÐ°ÐºÑÑÑÑ</translation>
Index: /trunk/translations/designer_cs.ts
===================================================================
--- /trunk/translations/designer_cs.ts	(revision 769)
+++ /trunk/translations/designer_cs.ts	(revision 769)
@@ -0,0 +1,7051 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs_CZ">
+<context>
+    <name>AbstractFindWidget</name>
+    <message>
+        <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="+127"/>
+        <source>&amp;Previous</source>
+        <translation>&amp;PÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&amp;Next</source>
+        <translation>&amp;DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>&amp;Case sensitive</source>
+        <translation>&amp;RozliÅ¡ujÃ­cÃ­ velkÃ¡ a malÃ¡ pÃ­smena</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Whole &amp;words</source>
+        <translation>CelÃ¡ &amp;slova</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+        <translation>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;HledÃ¡nÃ­ dosÃ¡hlo konce</translation>
+    </message>
+</context>
+<context>
+    <name>AddLinkDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/>
+        <source>Insert Link</source>
+        <translation>VloÅŸit odkaz</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Title:</source>
+        <translation>NÃ¡zev:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>URL:</source>
+        <translation>URL:</translation>
+    </message>
+</context>
+<context>
+    <name>AppFontDialog</name>
+    <message>
+        <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="+418"/>
+        <source>Additional Fonts</source>
+        <translation>DodateÄnÃ¡ pÃ­sma</translation>
+    </message>
+</context>
+<context>
+    <name>AppFontManager</name>
+    <message>
+        <location line="-267"/>
+        <source>&apos;%1&apos; is not a file.</source>
+        <translation>&apos;%1&apos; nenÃ­ soubor.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>The font file &apos;%1&apos; does not have read permissions.</source>
+        <translation>Soubor s pÃ­smem &apos;%1&apos; nemÃ¡ oprÃ¡vnÄnÃ­ ke ÄtenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>The font file &apos;%1&apos; is already loaded.</source>
+        <translation>Soubor s pÃ­smem &apos;%1&apos; je jiÅŸ nahrÃ¡n.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>The font file &apos;%1&apos; could not be loaded.</source>
+        <translation>Soubor s pÃ­smem &apos;%1&apos; se nepodaÅilo nahrÃ¡t.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>&apos;%1&apos; is not a valid font id.</source>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm pÃ­smovÃœm ID.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>There is no loaded font matching the id &apos;%1&apos;.</source>
+        <translation>NenÃ­ nahrÃ¡no ÅŸÃ¡dnÃ© pÃ­smo s ID &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>The font &apos;%1&apos; (%2) could not be unloaded.</source>
+        <translation>PÃ­smo &apos;%1&apos; (%2) se nepodaÅilo uvolnit z pamÄti.</translation>
+    </message>
+</context>
+<context>
+    <name>AppFontWidget</name>
+    <message>
+        <location line="+26"/>
+        <source>Fonts</source>
+        <translation>PÃ­sma</translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>Add font files</source>
+        <translation>PÅidat soubory s pÃ­smy</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Remove current font file</source>
+        <translation>Odstranit souÄasnÃœ soubor s pÃ­smem</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Remove all font files</source>
+        <translation>Odstranit vÅ¡echny soubory s pÃ­smy</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Add Font Files</source>
+        <translation>PÅidat soubory s pÃ­smy</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Font files (*.ttf)</source>
+        <translation>Soubory s pÃ­smy (*.ttf)</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Error Adding Fonts</source>
+        <translation>Chyba pÅi pÅidÃ¡vÃ¡nÃ­ pÃ­sem</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Error Removing Fonts</source>
+        <translation>Chyba pÅi odstraÅovÃ¡nÃ­ pÃ­sem</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Remove Fonts</source>
+        <translation>Odstranit pÃ­sma</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Would you like to remove all fonts?</source>
+        <translation>Chcete odstranit vÅ¡echna pÃ­sma?</translation>
+    </message>
+</context>
+<context>
+    <name>AppearanceOptionsWidget</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>User Interface Mode</source>
+        <translation>OkennÃ­ reÅŸim</translation>
+    </message>
+</context>
+<context>
+    <name>AssistantClient</name>
+    <message>
+        <location filename="../tools/designer/src/designer/assistantclient.cpp" line="+100"/>
+        <source>Unable to send request: Assistant is not responding.</source>
+        <translation>Chyba pÅi posÃ­lÃ¡nÃ­ poÅŸadavku: Program Assistant neodpovÃ­dÃ¡.</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>The binary &apos;%1&apos; does not exist.</source>
+        <translation>ProveditelnÃœ soubor &apos;%1&apos; neexistuje.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Unable to launch assistant (%1).</source>
+        <translation>Program Assistant nelze spustit (%1).</translation>
+    </message>
+</context>
+<context>
+    <name>BrushPropertyManager</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+149"/>
+        <source>Style</source>
+        <translation>Styl</translation>
+    </message>
+    <message>
+        <location line="-97"/>
+        <source>No brush</source>
+        <translation>ÅœÃ¡dnÃœ vzor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Solid</source>
+        <translation>PlnÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 1</source>
+        <translation>Hustota 1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 2</source>
+        <translation>Hustota 2</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 3</source>
+        <translation>Hustota 3</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 4</source>
+        <translation>Hustota 4</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 5</source>
+        <translation>Hustota 5</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 6</source>
+        <translation>Hustota 6</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dense 7</source>
+        <translation>Hustota 7</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Horizontal</source>
+        <translation>VodorovnÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Vertical</source>
+        <translation>SvislÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cross</source>
+        <translation>KÅÃ­ÅŸÃ­cÃ­ se ÄÃ¡ry</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Backward diagonal</source>
+        <translation>ZpÄtnÃ© ÃºhlopÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Forward diagonal</source>
+        <translation>VpÅed smÄÅujÃ­cÃ­ ÃºhlopÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Crossing diagonal</source>
+        <translation>KÅÃ­ÅŸÃ­cÃ­ se ÃºhlopÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+94"/>
+        <source>Color</source>
+        <translation>Barva</translation>
+    </message>
+    <message>
+        <location line="+105"/>
+        <source>[%1, %2]</source>
+        <translation>[%1, %2]</translation>
+    </message>
+</context>
+<context>
+    <name>Command</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="+208"/>
+        <location line="+258"/>
+        <source>Change signal</source>
+        <translation>ZmÄnit signÃ¡l</translation>
+    </message>
+    <message>
+        <location line="-256"/>
+        <location line="+268"/>
+        <source>Change slot</source>
+        <translation>ZmÄnit zdÃ­Åku</translation>
+    </message>
+    <message>
+        <location line="-220"/>
+        <source>Change signal-slot connection</source>
+        <translation>ZmÄnit spojenÃ­ signÃ¡l-zdÃ­Åka</translation>
+    </message>
+    <message>
+        <location line="+234"/>
+        <source>Change sender</source>
+        <translation>ZmÄnit vysÃ­laÄ</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Change receiver</source>
+        <translation>ZmÄnit pÅijÃ­maÄ</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+143"/>
+        <source>Add connection</source>
+        <translation>PÅidat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Adjust connection</source>
+        <translation>Nastavit spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Delete connections</source>
+        <translation>Smazat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>Change source</source>
+        <translation>ZmÄnit zdroj</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Change target</source>
+        <translation>ZmÄnit koncovÃœ bod</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="+149"/>
+        <source>Insert &apos;%1&apos;</source>
+        <translation>VloÅŸit &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+167"/>
+        <source>Raise &apos;%1&apos;</source>
+        <translation>&apos;%1&apos; dopÅedu</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Lower &apos;%1&apos;</source>
+        <translation>&apos;%1&apos; dozadu</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>Delete &apos;%1&apos;</source>
+        <translation>Smazat &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+119"/>
+        <source>Reparent &apos;%1&apos;</source>
+        <translation>PÅiÅadit jinÃœ prvek &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Promote to custom widget</source>
+        <translation>VytvoÅit zÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenÃœ prvek</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Demote from custom widget</source>
+        <translation>Odstranit zÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenou tÅÃ­du</translation>
+    </message>
+    <message>
+        <location line="+79"/>
+        <source>Lay out using grid</source>
+        <translation>RozmÃ­stit pÅedmÄty tabulkovÄ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lay out vertically</source>
+        <translation>RozmÃ­stit pÅedmÄty svisle</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lay out horizontally</source>
+        <translation>RozmÃ­stit pÅedmÄty vodorovnÄ</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Break layout</source>
+        <translation>ZruÅ¡it rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+240"/>
+        <location line="+235"/>
+        <location line="+78"/>
+        <source>Move Page</source>
+        <translation>Posunout stranu</translation>
+    </message>
+    <message>
+        <location line="-279"/>
+        <location line="+123"/>
+        <location line="+188"/>
+        <location line="+666"/>
+        <source>Delete Page</source>
+        <translation>Smazat stranu</translation>
+    </message>
+    <message>
+        <location line="-939"/>
+        <location line="+123"/>
+        <source>Page</source>
+        <translation>Strana</translation>
+    </message>
+    <message>
+        <location line="+860"/>
+        <source>page</source>
+        <translation>Strana</translation>
+    </message>
+    <message>
+        <location line="-978"/>
+        <location line="+123"/>
+        <location line="+186"/>
+        <location line="+667"/>
+        <source>Insert Page</source>
+        <translation>VloÅŸit stranu</translation>
+    </message>
+    <message>
+        <location line="-647"/>
+        <source>Change Tab order</source>
+        <translation>ZmÄnit poÅadÃ­ karet</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Create Menu Bar</source>
+        <translation>VytvoÅit nabÃ­dkovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Delete Menu Bar</source>
+        <translation>Smazat nabÃ­dkovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+47"/>
+        <source>Create Status Bar</source>
+        <translation>VytvoÅit stavovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Delete Status Bar</source>
+        <translation>Smazat stavovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Add Tool Bar</source>
+        <translation>PÅidat nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Add Dock Window</source>
+        <translation>PÅidat ukotvenÃ© okno</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Adjust Size of &apos;%1&apos;</source>
+        <translation>Upravit velikost &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Change Form Layout Item Geometry</source>
+        <translation>ZmÄnit uspoÅÃ¡dÃ¡nÃ­ prvku rozvrÅŸenÃ­ formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+95"/>
+        <source>Change Layout Item Geometry</source>
+        <translation>ZmÄnit uspoÅÃ¡dÃ¡nÃ­ prvku rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+576"/>
+        <source>Change Table Contents</source>
+        <translation>ZmÄnit obsah tabulky</translation>
+    </message>
+    <message>
+        <location line="+107"/>
+        <source>Change Tree Contents</source>
+        <translation>ZmÄnit obsah stromu</translation>
+    </message>
+    <message>
+        <location line="+74"/>
+        <location line="+146"/>
+        <source>Add action</source>
+        <translation>PÅidat Äinnost</translation>
+    </message>
+    <message>
+        <location line="-120"/>
+        <location line="+126"/>
+        <source>Remove action</source>
+        <translation>Odstranit Äinnost</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Add menu</source>
+        <translation>PÅidat nabÃ­dku</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Remove menu</source>
+        <translation>Odstranit nabÃ­dku</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Create submenu</source>
+        <translation>VytvoÅit vedlejÅ¡Ã­ nabÃ­dku</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Delete Tool Bar</source>
+        <translation>Smazat nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1195"/>
+        <source>Set action text</source>
+        <translation>Nastavit text k Äinnosti</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Insert action</source>
+        <translation>VloÅŸit Äinnost</translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+907"/>
+        <source>Move action</source>
+        <translation>Posunout Äinnost</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-424"/>
+        <source>Change Title</source>
+        <translation>ZmÄnit nÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Insert Menu</source>
+        <translation>VloÅŸit nabÃ­dku</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+202"/>
+        <source>Change signals/slots</source>
+        <translation>ZmÄnit signÃ¡ly/zdÃ­Åky</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="-867"/>
+        <source>Delete Subwindow</source>
+        <translation>Smazat podokno</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Insert Subwindow</source>
+        <translation>VloÅŸit podokno</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>subwindow</source>
+        <translation>Podokno</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Subwindow</source>
+        <translation>Podokno</translation>
+    </message>
+    <message>
+        <location line="-1821"/>
+        <source>Change Z-order of &apos;%1&apos;</source>
+        <translation>ZmÄnit Z-poÅadÃ­ &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+625"/>
+        <source>Simplify Grid Layout</source>
+        <translation>ZjednoduÅ¡it tabulkovÃ© rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+221"/>
+        <source>Create button group</source>
+        <translation>Seskupit tlaÄÃ­tka</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Break button group</source>
+        <translation>ZruÅ¡it seskupenÃ­ tlaÄÃ­tek</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Break button group &apos;%1&apos;</source>
+        <translation>ZruÅ¡it seskupenÃ­ &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Add buttons to group</source>
+        <translation>PÅidat tlaÄÃ­tka do seskupenÃ­</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Remove buttons from group</source>
+        <translation>Odstranit tlaÄÃ­tka ze seskupenÃ­</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+349"/>
+        <source>Morph %1/&apos;%2&apos; into %3</source>
+        <extracomment>MorphWidgetCommand description</extracomment>
+        <translation>PÅemÄnit %1/&apos;%2&apos; na %3</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="+154"/>
+        <source>Change layout of &apos;%1&apos; from %2 to %3</source>
+        <translation>ZmÄnit rozvrÅŸenÃ­ &apos;%1&apos; z %2 na %3</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="-14"/>
+        <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+458"/>
+        <source>Add &apos;%1&apos; to &apos;%2&apos;</source>
+        <extracomment>Command description for adding buttons to a QButtonGroup</extracomment>
+        <translation>PÅidat &apos;%1&apos; k &apos;%2&apos;</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Remove &apos;%1&apos; from &apos;%2&apos;</source>
+        <extracomment>Command description for removing buttons from a QButtonGroup</extracomment>
+        <translation>Odstranit &apos;%1&apos; z &apos;%2&apos;</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="+55"/>
+        <source>Change script</source>
+        <translation>ZmÄnit skript</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1213"/>
+        <source>Changed &apos;%1&apos; of &apos;%2&apos;</source>
+        <translation>ZmÄnÄno &apos;%1&apos; z &apos;%2&apos;</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+3"/>
+        <source>Changed &apos;%1&apos; of %n objects</source>
+        <translatorcomment>Singular will never be shown</translatorcomment>
+        <translation>
+            <numerusform>ZmÄnÄna vlastnost &apos;%1&apos; jednoho pÅedmÄtu</numerusform>
+            <numerusform>ZmÄnÄna vlastnost &apos;%1&apos; %n pÅedmÄtÅ¯</numerusform>
+            <numerusform>ZmÄnÄna vlastnost &apos;%1&apos; %n pÅedmÄtÅ¯</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+76"/>
+        <source>Reset &apos;%1&apos; of &apos;%2&apos;</source>
+        <translation>Znovu nastavit &apos;%1&apos; &apos;%2&apos;</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+3"/>
+        <source>Reset &apos;%1&apos; of %n objects</source>
+        <translatorcomment>Singular will never be shown</translatorcomment>
+        <translation>
+            <numerusform>Znovu nastavit &apos;%1&apos; jednoho pÅedmÄtu</numerusform>
+            <numerusform>Znovu nastavit &apos;%1&apos; %n pÅedmÄtÅ¯</numerusform>
+            <numerusform>Znovu nastavit &apos;%1&apos; %n pÅedmÄtÅ¯</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <source>Add dynamic property &apos;%1&apos; to &apos;%2&apos;</source>
+        <translation>PÅidat dynamickou vlastnost &apos;%1&apos; do &apos;%2&apos;</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+3"/>
+        <source>Add dynamic property &apos;%1&apos; to %n objects</source>
+        <translatorcomment>Singular will never be shown</translatorcomment>
+        <translation>
+            <numerusform>PÅidat dynamickou vlastnost &apos;%1&apos; do jednoho pÅedmÄtu</numerusform>
+            <numerusform>PÅidat dynamickou vlastnost &apos;%1&apos; do %n pÅedmÄtÅ¯</numerusform>
+            <numerusform>PÅidat dynamickou vlastnost &apos;%1&apos; do %n pÅedmÄtÅ¯</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+86"/>
+        <source>Remove dynamic property &apos;%1&apos; from &apos;%2&apos;</source>
+        <translation>Odstranit dynamickou vlastnost &apos;%1&apos; z &apos;%2&apos;</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+3"/>
+        <source>Remove dynamic property &apos;%1&apos; from %n objects</source>
+        <translation>
+            <numerusform>Odstranit dynamickou vlastnost &apos;%1&apos; z jednoho pÅedmÄtu</numerusform>
+            <numerusform>Odstranit dynamickou vlastnost &apos;%1&apos; z %n pÅedmÄtÅ¯</numerusform>
+            <numerusform>Odstranit dynamickou vlastnost &apos;%1&apos; z %n pÅedmÄtÅ¯</numerusform>
+        </translation>
+    </message>
+</context>
+<context>
+    <name>ConnectDialog</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/>
+        <source>Configure Connection</source>
+        <translation>Upravit spojenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>GroupBox</source>
+        <translation>GroupBox</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Edit...</source>
+        <translation>Upravit...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show signals and slots inherited from QWidget</source>
+        <translation>UkÃ¡zat signÃ¡ly a zdÃ­Åky zdÄdÄnÃ© z QWidget</translation>
+    </message>
+</context>
+<context>
+    <name>ConnectionDelegate</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/>
+        <source>&lt;object&gt;</source>
+        <translation>&lt;PÅedmÄt&gt;</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>&lt;signal&gt;</source>
+        <translation>&lt;SignÃ¡l&gt;</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&lt;slot&gt;</source>
+        <translation>&lt;ZdÃ­Åka&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>DPI_Chooser</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+69"/>
+        <source>Standard (96 x 96)</source>
+        <extracomment>Embedded device standard screen resolution</extracomment>
+        <translation>ObvyklÃ© rozliÅ¡enÃ­ (96 x 96)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Greenphone (179 x 185)</source>
+        <extracomment>Embedded device screen resolution</extracomment>
+        <translation>Greenphone (179 x 185)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>High (192 x 192)</source>
+        <extracomment>Embedded device high definition screen resolution</extracomment>
+        <translation>VysokÃ© rozliÅ¡enÃ­ (192 x 192)</translation>
+    </message>
+</context>
+<context>
+    <name>Designer</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+449"/>
+        <source>Qt Designer</source>
+        <translation>Qt Designer</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="+682"/>
+        <source>Unable to launch %1.</source>
+        <translation>%1 se nepodaÅilo spustit.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1 timed out.</source>
+        <translation>PÅekroÄenÃ­ Äasu pÅi provedenÃ­ %1.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+10"/>
+        <source>This file contains top level spacers.&lt;br&gt;They have &lt;b&gt;NOT&lt;/b&gt; been saved into the form.</source>
+        <translation>FormulÃ¡Å obsahuje volnÄ stojÃ­cÃ­ prvky rozloÅŸenÃ­, kterÃ© &lt;b&gt;NEBYLY&lt;/b&gt; uloÅŸeny do formulÃ¡Åe.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Perhaps you forgot to create a layout?</source>
+        <translation>PÅidal jste rozvrÅŸenÃ­?</translation>
+    </message>
+    <message>
+        <location line="+205"/>
+        <source>This file cannot be read because it was created using %1.</source>
+        <translation>Soubor nelze pÅeÄÃ­st, protoÅŸe byl vytvoÅen %1.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>This file was created using Designer from Qt-%1 and cannot be read.</source>
+        <translation>Soubor nelze pÅeÄÃ­st, protoÅŸe byl vytvoÅen programem Designer ve verzi %1.</translation>
+    </message>
+    <message>
+        <location line="+82"/>
+        <source>This file cannot be read because the extra info extension failed to load.</source>
+        <translation>Soubor nelze pÅeÄÃ­st (Chyba pÅi nahrÃ¡vÃ¡nÃ­ dat ExtraInfoExtension).</translation>
+    </message>
+    <message>
+        <location line="-52"/>
+        <source>The converted file could not be read.</source>
+        <translation>PÅevedenÃœ soubor se nepodaÅilo pÅeÄÃ­st.</translation>
+    </message>
+    <message>
+        <location line="-76"/>
+        <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+        <translation>Chyba pÅi ÄtenÃ­ souboru s rozhranÃ­m: KoÅenovÃœ prvek &lt;ui&gt; chybÃ­.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+        <translation>Chyba pÅi ÄtenÃ­ souboru s rozhranÃ­m, ÅÃ¡dek %1, sloupec %2: %3</translation>
+    </message>
+    <message>
+        <location line="+74"/>
+        <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source>
+        <translation>Soubor byl vytvoÅen programem Designer ve verzi %1 a bude pÅeveden na novÃœ formulÃ¡Å pomocÃ­ programu Qt Designer.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The old form has not been touched, but you will have to save the form under a new name.</source>
+        <translation>StarÃœ formulÃ¡Å zÅ¯stÃ¡vÃ¡ nezmÄnÄn. NovÃœ formulÃ¡Å musÃ­ bÃœt uloÅŸen pod novÃœm nÃ¡zvem.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>This file was created using Designer from Qt-%1 and could not be read:
+%2</source>
+        <translation>ÄtenÃ­ Designerem %1 vytvoÅenÃ©ho souboru se nezdaÅilo:
+%2</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please run it through &lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; to convert it to Qt-4&apos;s ui format.</source>
+        <translation>PÅemÄÅte to, prosÃ­m, pÅÃ­kazem &lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; na formÃ¡t rozhranÃ­ Qt 4.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/>
+        <source>Custom Widgets</source>
+        <translation>UÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Promoted Widgets</source>
+        <translation>ZÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+</context>
+<context>
+    <name>DesignerMetaEnum</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="-513"/>
+        <source>%1 is not a valid enumeration value of &apos;%2&apos;.</source>
+        <translation>%1 nenÃ­ platnou vÃœÄtovou hodnotou &apos;%2&apos;.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&apos;%1&apos; could not be converted to an enumeration value of type &apos;%2&apos;.</source>
+        <translation>&apos;%1&apos; se nepodaÅilo pÅevÃ©st na vÃœÄtovou hodnotu typu &apos;%2&apos;.</translation>
+    </message>
+</context>
+<context>
+    <name>DesignerMetaFlags</name>
+    <message>
+        <location line="+78"/>
+        <source>&apos;%1&apos; could not be converted to a flag value of type &apos;%2&apos;.</source>
+        <translation>&apos;%1&apos; se nepodaÅilo pÅevÃ©st na pÅÃ­znakovou hodnotu typu &apos;%2&apos;.</translation>
+    </message>
+</context>
+<context>
+    <name>DeviceProfile</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="+397"/>
+        <source>&apos;%1&apos; is not a number.</source>
+        <extracomment>Reading a number for an embedded device profile</extracomment>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm ÄÃ­slem.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>An invalid tag &lt;%1&gt; was encountered.</source>
+        <translation> Byl zjiÅ¡tÄn neplatnÃœ prvek&apos;%1&apos;.</translation>
+    </message>
+</context>
+<context>
+    <name>DeviceProfileDialog</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/>
+        <source>&amp;Family</source>
+        <translation>&amp;PÃ­smovÃ¡ rodina</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Point Size</source>
+        <translation>&amp;BodovÃ¡ velikost</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Style</source>
+        <translation>Styl</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Device DPI</source>
+        <translation>RozliÅ¡enÃ­ obrazovky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+</context>
+<context>
+    <name>DeviceSkin</name>
+    <message>
+        <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/>
+        <source>The image file &apos;%1&apos; could not be loaded.</source>
+        <translation>Soubor s obrÃ¡zkem &apos;%1&apos; se nepodaÅilo nahrÃ¡t.</translation>
+    </message>
+    <message>
+        <location line="+64"/>
+        <source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
+        <translation>AdresÃ¡Å se vzhledem &apos;%1&apos; neobsahuje ÅŸÃ¡dnÃœ soubor s nastavenÃ­m.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>The skin configuration file &apos;%1&apos; could not be opened.</source>
+        <translation>Soubor s nastavenÃ­m vzhledu &apos;%1&apos; se nepodaÅilo otevÅÃ­t.</translation>
+    </message>
+    <message>
+        <location line="+76"/>
+        <source>Syntax error: %1</source>
+        <translation>Chyba ve skladbÄ: %1</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>The skin cursor image file &apos;%1&apos; does not exist.</source>
+        <translation>Soubor s obrÃ¡zkem pro vzhled ukazovÃ¡tka &apos;%1&apos; neexistuje.</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Syntax error in area definition: %1</source>
+        <translation>VymezenÃ­ oblasti obsahuje chybu ve skladbÄ: %1</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Mismatch in number of areas, expected %1, got %2.</source>
+        <translation>ZadanÃœ poÄet oblastÃ­ (%1) neodpovÃ­dÃ¡; byly nalezeny %2 oblasti.</translation>
+    </message>
+    <message>
+        <location line="-187"/>
+        <source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
+        <translation>Soubor s nastavenÃ­m vzhledu &apos;%1&apos; se nepodaÅilo pÅeÄÃ­st: %2</translation>
+    </message>
+    <message>
+        <location line="+91"/>
+        <source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
+        <translation>Soubor s nastavenÃ­m vzhledu &apos;%1&apos; (nahoru) neexistuje.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
+        <translation>Soubor s nastavenÃ­m vzhledu &apos;%1&apos; (dolÅ¯) neexistuje.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
+        <translation>Soubor s nastavenÃ­m vzhledu &apos;%1&apos; (zavÅeno) neexistuje.</translation>
+    </message>
+</context>
+<context>
+    <name>EmbeddedOptionsControl</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="+307"/>
+        <source>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Font&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Resolution&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</source>
+        <extracomment>Format embedded device profile description</extracomment>
+        <translation>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Font&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Stil&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;RozliÅ¡enÃ­&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>EmbeddedOptionsPage</name>
+    <message>
+        <location line="+103"/>
+        <source>Embedded Design</source>
+        <extracomment>Tab in preferences dialog</extracomment>
+        <translation>VloÅŸenÃœ nÃ¡vrh</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Device Profiles</source>
+        <extracomment>EmbeddedOptionsControl group box&quot;</extracomment>
+        <translation>Profily zaÅÃ­zenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>FontPanel</name>
+    <message>
+        <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/>
+        <source>Font</source>
+        <translation>PÃ­smo</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>&amp;Writing system</source>
+        <translation>ZpÅ¯sob &amp;psanÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Family</source>
+        <translation>&amp;PÃ­smovÃ¡ rodina</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Style</source>
+        <translation>&amp;Styl</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Point size</source>
+        <translation>&amp;BodovÃ¡ velikost</translation>
+    </message>
+</context>
+<context>
+    <name>FontPropertyManager</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="+62"/>
+        <source>PreferDefault</source>
+        <translation>UpÅednostÅovat vÃœchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>NoAntialias</source>
+        <translation>ÅœÃ¡dnÃ© vyhlazovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>PreferAntialias</source>
+        <translation>UpÅednostÅovat vyhlazovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+61"/>
+        <source>Antialiasing</source>
+        <translation>VyhlazovÃ¡nÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>FormBuilder</name>
+    <message>
+        <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+359"/>
+        <source>Invalid stretch value for &apos;%1&apos;: &apos;%2&apos;</source>
+        <extracomment>Parsing layout stretch values</extracomment>
+        <translation>NeplatnÃ¡ hodnota roztaÅŸenÃ­ pro &apos;%1&apos;: &apos;%2&apos;</translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>Invalid minimum size for &apos;%1&apos;: &apos;%2&apos;</source>
+        <extracomment>Parsing grid layout minimum size values</extracomment>
+        <translation>NeplatnÃ¡ nejmenÅ¡Ã­ velikost pro &apos;%1&apos;: &apos;%2&apos;</translation>
+    </message>
+</context>
+<context>
+    <name>FormEditorOptionsPage</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="+91"/>
+        <source>%1 %</source>
+        <translation>%1 %</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Preview Zoom</source>
+        <translation>Velikost zvÄtÅ¡enÃ­ pro nÃ¡hled</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Default Zoom</source>
+        <translation>VÃœchozÃ­ zvÄtÅ¡enÃ­</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Forms</source>
+        <extracomment>Tab in preferences dialog</extracomment>
+        <translation>FormulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Default Grid</source>
+        <translation>VÃœchozÃ­ mÅÃ­ÅŸka pro novÃ© formulÃ¡Åe</translation>
+    </message>
+</context>
+<context>
+    <name>FormLayoutRowDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/>
+        <source>Add Form Layout Row</source>
+        <translation>PÅidat ÅÃ¡dek s rozvrÅŸenÃ­m formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Label text:</source>
+        <translation>&amp;Text popisku:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Field &amp;type:</source>
+        <translation>&amp;Typ datovÃ©ho pole:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Field name:</source>
+        <translation>&amp;NÃ¡zev pole:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Buddy:</source>
+        <translation>&amp;KamarÃ¡d:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Row:</source>
+        <translation>&amp;ÅÃ¡dek:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Label &amp;name:</source>
+        <translation>&amp;NÃ¡zev popisku:</translation>
+    </message>
+</context>
+<context>
+    <name>FormWindow</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1701"/>
+        <source>Unexpected element &lt;%1&gt;</source>
+        <translation>NeplatnÃœ prvek &lt;%1&gt;</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+        <translation>Chyba pÅi vloÅŸenÃ­ obsahu schrÃ¡nky, ÅÃ¡dek %1, sloupec %2: %3</translation>
+    </message>
+</context>
+<context>
+    <name>FormWindowSettings</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/>
+        <source>Form Settings</source>
+        <translation>NastavenÃ­ formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Layout &amp;Default</source>
+        <translation>&amp;VÃœchozÃ­ rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Spacing:</source>
+        <translation>&amp;Odstup:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Margin:</source>
+        <translation>&amp;Okraj:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Layout Function</source>
+        <translation>&amp;Funkce rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ma&amp;rgin:</source>
+        <translation>Ok&amp;raj:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Spa&amp;cing:</source>
+        <translation>Odstu&amp;p:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Embedded Design</source>
+        <translation>VloÅŸenÃœ nÃ¡vrh</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Author</source>
+        <translation>&amp;Autor</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Include Hints</source>
+        <translation>&amp;Zahrnout rady</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Pixmap Function</source>
+        <translation>&amp;Funkce pixmapy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grid</source>
+        <translation>MÅÃ­ÅŸka</translation>
+    </message>
+</context>
+<context>
+    <name>IconSelector</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="+352"/>
+        <source>All Pixmaps (</source>
+        <translation>VÅ¡echny soubory s pixmapami (</translation>
+    </message>
+</context>
+<context>
+    <name>ItemPropertyBrowser</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+66"/>
+        <source>XX Icon Selected off</source>
+        <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment>
+        <translation>VybranÃ¡ ikona, z</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindowBase</name>
+    <message>
+        <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+119"/>
+        <source>Main</source>
+        <extracomment>Not currently used (main tool bar)</extracomment>
+        <translation>HlavnÃ­ pruh s nÃ¡stroji</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>File</source>
+        <translation>Soubor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Edit</source>
+        <translation>Ãpravy</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tools</source>
+        <translation>NÃ¡stroje</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Qt Designer</source>
+        <translation>Qt Designer</translation>
+    </message>
+</context>
+<context>
+    <name>NewForm</name>
+    <message>
+        <location filename="../tools/designer/src/designer/newform.cpp" line="+79"/>
+        <source>C&amp;reate</source>
+        <translation>&amp;VytvoÅit novÃœ z pÅedlohy</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Recent</source>
+        <translation>Naposledy otevÅenÃœ</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Open...</source>
+        <translation>&amp;OtevÅÃ­t...</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Recent Forms</source>
+        <translation>&amp;Naposledy otevÅenÃ© formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+64"/>
+        <source>Read error</source>
+        <translation>Chyba pÅi ÄtenÃ­</translation>
+    </message>
+    <message>
+        <location line="-100"/>
+        <source>New Form</source>
+        <translation>NovÃœ formulÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Show this Dialog on Startup</source>
+        <translation>UkÃ¡zat tento dialog pÅi spuÅ¡tÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+128"/>
+        <source>A temporary form file could not be created in %1.</source>
+        <translation>V adresÃ¡Åi %1 se nepodaÅilo vytvoÅit doÄasnÃœ soubor s formulÃ¡Åem.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The temporary form file %1 could not be written.</source>
+        <translation>DoÄasnÃœ soubor s formulÃ¡Åem %1 se nepodaÅilo zapsat.</translation>
+    </message>
+</context>
+<context>
+    <name>ObjectInspectorModel</name>
+    <message>
+        <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="+360"/>
+        <source>Object</source>
+        <translation>PÅedmÄt</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Class</source>
+        <translation>TÅÃ­da</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>separator</source>
+        <translation>OddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="+98"/>
+        <source>&lt;noname&gt;</source>
+        <translation>&lt;nepojmenovanÃœ&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>ObjectNameDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+158"/>
+        <source>Change Object Name</source>
+        <translation>ZmÄnit nÃ¡zev pÅedmÄtu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Object Name</source>
+        <translation>NÃ¡zev pÅedmÄtu</translation>
+    </message>
+</context>
+<context>
+    <name>PluginDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/>
+        <source>Plugin Information</source>
+        <translation>PÅÃ­davnÃ© moduly</translation>
+    </message>
+    <message>
+        <location/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+</context>
+<context>
+    <name>PreferencesDialog</name>
+    <message>
+        <location filename="../tools/designer/src/designer/preferencesdialog.ui"/>
+        <source>Preferences</source>
+        <translation>NastavenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>PreviewConfigurationWidget</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print/Preview Configuration</source>
+        <translation>NastavenÃ­ tisku/nÃ¡hledu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Style</source>
+        <translation>Styl</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Style sheet</source>
+        <translation>PÅedlohovÃœ list</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Device skin</source>
+        <translation>Vzhled pro zaÅÃ­zenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>PromotionModel</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+112"/>
+        <source>Not used</source>
+        <extracomment>Usage of promoted widgets</extracomment>
+        <translation>NepouÅŸÃ­vanÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>Q3WizardContainer</name>
+    <message>
+        <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="+172"/>
+        <location line="+5"/>
+        <source>Page</source>
+        <translation>Strana</translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractFormBuilder</name>
+    <message>
+        <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="+206"/>
+        <source>Unexpected element &lt;%1&gt;</source>
+        <translation>NeplatnÃœ prvek &lt;%1&gt;</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+        <translation>Chyba pÅi ÄtenÃ­ souboru s rozhranÃ­m, ÅÃ¡dek %1, sloupec %2: %3</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+        <translation>Chyba pÅi ÄtenÃ­ souboru s rozhranÃ­m: KoÅenovÃœ prvek &lt;ui&gt; chybÃ­.</translation>
+    </message>
+    <message>
+        <location line="+119"/>
+        <source>The creation of a widget of the class &apos;%1&apos; failed.</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ prvek tÅÃ­dy &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+296"/>
+        <source>Attempt to add child that is not of class QWizardPage to QWizard.</source>
+        <translation>Pokus o pÅidÃ¡nÃ­ strany pÅedmÄtu tÅÃ­dy QWizard, kterÃ¡ nenÃ­ typu QWizardPage.</translation>
+    </message>
+    <message>
+        <location line="+86"/>
+        <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has a layout of non-box type %3.
+This indicates an inconsistency in the ui-file.</source>
+        <translation>Pokus o pÅidÃ¡nÃ­ rozvrÅŸenÃ­ na prvek &apos;%1&apos; (%2), kterÃœ jiÅŸ mÃ¡ rozvrÅŸenÃ­ typu %3 hat. Ukazuje to na nesrovnalost v souboru s rozhranÃ­m.</translation>
+    </message>
+    <message>
+        <location line="+144"/>
+        <source>Empty widget item in %1 &apos;%2&apos;.</source>
+        <translation>PrÃ¡zdnÃ¡ poloÅŸka prvku v %1 &apos;%2&apos;.</translation>
+    </message>
+    <message>
+        <location line="+680"/>
+        <source>Flags property are not supported yet.</source>
+        <translation>Vlastnosti typu &quot;pÅÃ­znak&quot; nejsou podporovÃ¡ny.</translation>
+    </message>
+    <message>
+        <location line="+81"/>
+        <source>While applying tab stops: The widget &apos;%1&apos; could not be found.</source>
+        <translation>Chyba pÅi stanovenÃ­ poÅadÃ­ tabulÃ¡torÅ¯: NepodaÅilo se nalÃ©zt ÅŸÃ¡dnÃœ prvek s nÃ¡zvem &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+908"/>
+        <source>Invalid QButtonGroup reference &apos;%1&apos; referenced by &apos;%2&apos;.</source>
+        <translation>NeplatnÃœ odkaz na skupinu tlaÄÃ­tek &apos;%1&apos;, odkazovÃ¡no &apos;%2&apos;.</translation>
+    </message>
+    <message>
+        <location line="+511"/>
+        <source>This version of the uitools library is linked without script support.</source>
+        <translation>Tato verze knihovny uitools nepodporuje skripty.</translation>
+    </message>
+</context>
+<context>
+    <name>QAxWidgetPlugin</name>
+    <message>
+        <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="+75"/>
+        <source>ActiveX control</source>
+        <translation>OvlÃ¡dacÃ­ prvek ActiveX</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>ActiveX control widget</source>
+        <translation>OvlÃ¡dacÃ­ prvek ActiveX</translation>
+    </message>
+</context>
+<context>
+    <name>QAxWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="+119"/>
+        <source>Set Control</source>
+        <translation>Nastavit ovlÃ¡dacÃ­ prvek</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reset Control</source>
+        <translation>Nastavit znovu ovlÃ¡dacÃ­ prvek</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Licensed Control</source>
+        <translation>LicencovanÃœ ovlÃ¡dacÃ­ prvek</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The control requires a design-time license</source>
+        <translation>OvlÃ¡dacÃ­ prvek vyÅŸaduje licenci k Äasu nÃ¡vrhu</translation>
+    </message>
+</context>
+<context>
+    <name>QCoreApplication</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="+83"/>
+        <source>%1 is not a promoted class.</source>
+        <translation>%1 nenÃ­ zÃ¡stupnÃœm symbolem pro uÅŸivatelsky stanovenou tÅÃ­du.</translation>
+    </message>
+    <message>
+        <location line="+65"/>
+        <source>The base class %1 is invalid.</source>
+        <translation>%1 nenÃ­ platnou zÃ¡kladnÃ­ tÅÃ­dou.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>The class %1 already exists.</source>
+        <translation>JiÅŸ existuje tÅÃ­da s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Promoted Widgets</source>
+        <translation>ZÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+126"/>
+        <source>The class %1 cannot be removed</source>
+        <translation>TÅÃ­da %1 nemÅ¯ÅŸe bÃœt odstranÄna</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The class %1 cannot be removed because it is still referenced.</source>
+        <translation>TÅÃ­da %1 nemÅ¯ÅŸe bÃœt odstranÄna, protoÅŸe se stÃ¡le pouÅŸÃ­vÃ¡.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>The class %1 cannot be renamed</source>
+        <translation>TÅÃ­da %1 nemÅ¯ÅŸe bÃœt pÅejmenovÃ¡na</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>The class %1 cannot be renamed to an empty name.</source>
+        <translation>NÃ¡zev pro tÅÃ­du nemÅ¯ÅŸe zÅ¯stat prÃ¡zdnÃœ (%1).</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>There is already a class named %1.</source>
+        <translation>JiÅŸ existuje tÅÃ­da s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Cannot set an empty include file.</source>
+        <translation>NÃ¡zev pro hlaviÄkovÃœ soubor nemÅ¯ÅŸe zÅ¯stat prÃ¡zdnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="+88"/>
+        <source>Exception at line %1: %2</source>
+        <translation>Chyba vÃœjimky na ÅÃ¡dku %1: %2</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>An error occurred while running the script for %1: %2
+Script: %3</source>
+        <translation>PÅi provÃ¡dÄnÃ­ skriptu pro %1 se vyskytla chyba: %2Skript: %3</translation>
+    </message>
+</context>
+<context>
+    <name>QDesigner</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner.cpp" line="+141"/>
+        <source>%1 - warning</source>
+        <translation>%1 - UpozornÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+96"/>
+        <source>Qt Designer</source>
+        <translation>Qt Designer</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>This application cannot be used for the Console edition of Qt</source>
+        <translation>Tato aplikace se nedÃ¡ pouÅŸÃ­vat pro konzolovÃ© vydÃ¡nÃ­ Qt</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerActions</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+178"/>
+        <source>Edit Widgets</source>
+        <translation>Upravit prvky</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>&amp;Quit</source>
+        <translation>&amp;UkonÄit</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Minimize</source>
+        <translation>&amp;ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Bring All to Front</source>
+        <translation>UkÃ¡zat vÅ¡echny formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Preferences...</source>
+        <translation>NastavenÃ­...</translation>
+    </message>
+    <message>
+        <location line="+298"/>
+        <source>Clear &amp;Menu</source>
+        <translation>Smazat &amp;nabÃ­dku</translation>
+    </message>
+    <message>
+        <location line="-233"/>
+        <source>CTRL+SHIFT+S</source>
+        <translation>CTRL+SHIFT+S</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>CTRL+R</source>
+        <translation>CTRL+R</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>CTRL+M</source>
+        <translation>CTRL+M</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Qt Designer &amp;Help</source>
+        <translation>&amp;NÃ¡povÄda k programu Qt Designer</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Current Widget Help</source>
+        <translation>NÃ¡povÄda k vybranÃ©mu prvku</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>What&apos;s New in Qt Designer?</source>
+        <translation>Co je novÃ©ho v programu Qt Designer?</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>About Plugins</source>
+        <translation>PÅÃ­davnÃ© moduly</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+601"/>
+        <source>About Qt Designer</source>
+        <translation>O programu Qt Designer</translation>
+    </message>
+    <message>
+        <location line="-595"/>
+        <source>About Qt</source>
+        <translation>O Qt</translation>
+    </message>
+    <message>
+        <location line="+121"/>
+        <location line="+197"/>
+        <source>Open Form</source>
+        <translation>OtevÅÃ­t formulÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-196"/>
+        <location line="+37"/>
+        <location line="+160"/>
+        <source>Designer UI files (*.%1);;All Files (*)</source>
+        <translation>Soubory rozhranÃ­ programu Designer (*.%1);;VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location line="-620"/>
+        <source>%1 already exists.
+Do you want to replace it?</source>
+        <translation>Soubor %1 jiÅŸ existuje.
+Chcete jej nahradit?</translation>
+    </message>
+    <message>
+        <location line="-26"/>
+        <source>Saved %1.</source>
+        <translation>FormulÃ¡Å %1 byl uloÅŸen.</translation>
+    </message>
+    <message>
+        <location line="+371"/>
+        <source>&amp;Recent Forms</source>
+        <translation>&amp;Naposledy otevÅenÃ© formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+202"/>
+        <source>Designer</source>
+        <translation>Designer</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Feature not implemented yet!</source>
+        <translation>Tato funkce jeÅ¡tÄ nenÃ­ provedena!</translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Read error</source>
+        <translation>Chyba pÅi ÄtenÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>%1
+Do you want to update the file location or generate a new form?</source>
+        <translation>%1
+Chcete zadat jinÃœ nÃ¡zev pro soubor, nebo vytvoÅit novÃœ formulÃ¡Å?</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Update</source>
+        <translation>&amp;JinÃœ nÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;New Form</source>
+        <translation>&amp;NovÃœ formulÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+77"/>
+        <location line="+40"/>
+        <source>Save Form?</source>
+        <translation>UloÅŸit formulÃ¡Å?</translation>
+    </message>
+    <message>
+        <location line="-39"/>
+        <source>Could not open file</source>
+        <translation>Soubor se nepodaÅilo otevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+282"/>
+        <location line="+23"/>
+        <source>The backup file %1 could not be written.</source>
+        <translation>UklÃ¡dÃ¡nÃ­ na pozadÃ­: Soubor se zÃ¡lohou %1 se nepodaÅilo zapsat.</translation>
+    </message>
+    <message>
+        <location line="+107"/>
+        <source>The backup directory %1 could not be created.</source>
+        <translation>UklÃ¡dÃ¡nÃ­ na pozadÃ­: AdresÃ¡Å se zÃ¡lohou %1 se nepodaÅilo.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The temporary backup directory %1 could not be created.</source>
+        <translation>UklÃ¡dÃ¡nÃ­ na pozadÃ­: DoÄasnÃœ adresÃ¡Å se zÃ¡lohou %1 se nepodaÅilo.</translation>
+    </message>
+    <message>
+        <location line="+94"/>
+        <source>Please close all forms to enable the loading of additional fonts.</source>
+        <translation>ZavÅete, prosÃ­m, vÅ¡echny formulÃ¡Åe kvÅ¯li umoÅŸnÄnÃ­ nahrÃ¡nÃ­ dodateÄnÃœch pÃ­sem.</translation>
+    </message>
+    <message>
+        <location line="-502"/>
+        <source>Select New File</source>
+        <translation>Vybrat novÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Could not write file</source>
+        <translation>Soubor se nepodaÅilo zapsat</translation>
+    </message>
+    <message>
+        <location line="+201"/>
+        <source>&amp;Close Preview</source>
+        <translation>&amp;ZavÅÃ­t nÃ¡hled</translation>
+    </message>
+    <message>
+        <location line="-898"/>
+        <source>Save &amp;Image...</source>
+        <translation>&amp;UloÅŸit obraz...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Print...</source>
+        <translation>&amp;Tisk...</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Additional Fonts...</source>
+        <translation>DodateÄnÃ¡ pÃ­sma...</translation>
+    </message>
+    <message>
+        <location line="+651"/>
+        <source>The file %1 could not be opened.
+Reason: %2
+Would you like to retry or select a different file?</source>
+        <translation>Soubor %1 se nepodaÅilo otevÅÃ­t:
+%2
+Chcete to zkusit jeÅ¡tÄ jednou, nebo vybrat jinÃœ soubor?</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>It was not possible to write the entire file %1 to disk.
+Reason:%2
+Would you like to retry?</source>
+        <translation>Soubor %1 se nepodaÅilo ÃºplnÄ zapsat na disk:
+DÅ¯vod: %2
+Chcete to zkusit jeÅ¡tÄ jednou?</translation>
+    </message>
+    <message>
+        <location line="+429"/>
+        <source>Image files (*.%1)</source>
+        <translation>Soubory s obrazem (*.%1)</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <location line="+17"/>
+        <source>Save Image</source>
+        <translation>UloÅŸit obraz</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The file %1 could not be written.</source>
+        <translation>Soubor %1 se nepodaÅilo zapsat.</translation>
+    </message>
+    <message>
+        <location line="-1163"/>
+        <source>&amp;New...</source>
+        <translation>&amp;NovÃœ...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Open...</source>
+        <translation>&amp;OtevÅÃ­t...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Save &amp;As...</source>
+        <translation>UloÅŸit &amp;jako...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Save A&amp;ll</source>
+        <translation>&amp;UloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Save As &amp;Template...</source>
+        <translation>UloÅŸit jako &amp;pÅedlohu...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <location line="+901"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-896"/>
+        <source>View &amp;Code...</source>
+        <translation>UkÃ¡zat &amp;kÃ³d...</translation>
+    </message>
+    <message>
+        <location line="+424"/>
+        <location line="+248"/>
+        <source>Save Form As</source>
+        <translation>UloÅŸit formulÃ¡Å jako</translation>
+    </message>
+    <message>
+        <location line="+429"/>
+        <source>Preview failed</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ nÃ¡hled</translation>
+    </message>
+    <message>
+        <location line="-575"/>
+        <source>Code generation failed</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ kÃ³d</translation>
+    </message>
+    <message>
+        <location line="+328"/>
+        <location line="+34"/>
+        <source>Assistant</source>
+        <translation>Assistant</translation>
+    </message>
+    <message>
+        <location line="+259"/>
+        <source>Saved image %1.</source>
+        <translation>Obraz byl uloÅŸen pod %1.</translation>
+    </message>
+    <message>
+        <location line="+70"/>
+        <source>Printed %1.</source>
+        <translation>%1 byl vytiÅ¡tÄn.</translation>
+    </message>
+    <message>
+        <location line="-1149"/>
+        <source>ALT+CTRL+S</source>
+        <translation>ALT+CTRL+S</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerAppearanceOptionsPage</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="+138"/>
+        <source>Appearance</source>
+        <extracomment>Tab in preferences dialog</extracomment>
+        <translation>Vzhled</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerAppearanceOptionsWidget</name>
+    <message>
+        <location line="-53"/>
+        <source>Docked Window</source>
+        <translation>ReÅŸim ukotvenÃ©ho okna</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Multiple Top-Level Windows</source>
+        <translation>ReÅŸim vÃ­ce oken</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Toolwindow Font</source>
+        <translation>PÃ­smo pro okno s nÃ¡stroji</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerAxWidget</name>
+    <message>
+        <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/>
+        <source>Reset control</source>
+        <translation>Nastavit znovu ovlÃ¡dacÃ­ prvek</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Set control</source>
+        <translation>Nastavit ovlÃ¡dacÃ­ prvek</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="+179"/>
+        <source>Control loaded</source>
+        <translation>OvlÃ¡dacÃ­ prvek nahrÃ¡n</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>A COM exception occurred when executing a meta call of type %1, index %2 of &quot;%3&quot;.</source>
+        <translation>PÅi vyvolÃ¡nÃ­ postupu typu %1 se vyskytla vÃœjimka COM, rejstÅÃ­k %2 &quot;%3&quot;.</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerFormBuilder</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="+89"/>
+        <source>Script errors occurred:</source>
+        <translation>Vyskytly se chyby ve skriptech:</translation>
+    </message>
+    <message>
+        <location line="+307"/>
+        <source>The preview failed to build.</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ nÃ¡hled.</translation>
+    </message>
+    <message>
+        <location line="+65"/>
+        <source>Designer</source>
+        <translation>Designer</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerFormWindow</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="+217"/>
+        <source>%1 - %2[*]</source>
+        <translation>%1 - %2[*]</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Save Form?</source>
+        <translation>UloÅŸit formulÃ¡Å?</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Do you want to save the changes to this document before closing?</source>
+        <translation>Chcete v tomto formulÃ¡Åi uloÅŸit pÅed zavÅenÃ­m zmÄny?</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>If you don&apos;t save, your changes will be lost.</source>
+        <translation>Pokud neprovedete uloÅŸenÃ­, budou vaÅ¡e zmÄny ztraceny. </translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1181"/>
+        <source>Type Here</source>
+        <translation>Zadejte text</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Add Separator</source>
+        <translation>PÅidat oddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="+371"/>
+        <source>Insert separator</source>
+        <translation>VloÅŸit oddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Remove action &apos;%1&apos;</source>
+        <translation>Odstranit Äinnost &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Remove separator</source>
+        <translation>Odstranit oddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <location line="+650"/>
+        <source>Add separator</source>
+        <translation>PÅidat oddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="-348"/>
+        <source>Insert action</source>
+        <translation>VloÅŸit Äinnost</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerMenuBar</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-375"/>
+        <source>Type Here</source>
+        <translation>Zadejte text</translation>
+    </message>
+    <message>
+        <location line="+298"/>
+        <source>Remove Menu &apos;%1&apos;</source>
+        <translation>Odstranit nabÃ­dku &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Remove Menu Bar</source>
+        <translation>Odstranit pruh s nabÃ­dkou</translation>
+    </message>
+    <message>
+        <location line="+70"/>
+        <source>Menu</source>
+        <translation>NabÃ­dka</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerPluginManager</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="+271"/>
+        <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source>
+        <translation>Chyba pÅi vyhodnocovÃ¡nÃ­ XML uÅŸivatelsky stanovenÃ©ho prvku %1: %2</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>A required attribute (&apos;%1&apos;) is missing.</source>
+        <translation>U prvku chybÃ­ vyÅŸadovanÃ¡ vlastnost (&apos;%1&apos;).</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>An invalid property specification (&apos;%1&apos;) was encountered. Supported types: %2</source>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm vymezenÃ­m vlastnosti. Jsou podporovÃ¡ny nÃ¡sledujÃ­cÃ­ typy: %2</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>&apos;%1&apos; is not a valid string property specification.</source>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm vymezenÃ­m vlastnosti ÅetÄzce znakÅ¯.</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>The XML of the custom widget %1 does not contain any of the elements &lt;widget&gt; or &lt;ui&gt;.</source>
+        <translation>KÃ³d XML pro prvek %1 neobsahuje platnÃœ koÅenovÃœ prvek (&lt;widget&gt;, nebo &lt;ui&gt;).</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>The class attribute for the class %1 is missing.</source>
+        <translation>ChybÃ­ vlastnost tÅÃ­dy pro tÅÃ­du %1.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>The class attribute for the class %1 does not match the class name %2.</source>
+        <translation>Vlastnost tÅÃ­dy pro tÅÃ­du %1 neodpovÃ­dÃ¡ nÃ¡zvu tÅÃ­dy (%2).</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerPropertySheet</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+754"/>
+        <source>Dynamic Properties</source>
+        <translation>DynamickÃ© vlastnosti</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerResource</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+492"/>
+        <source>The layout type &apos;%1&apos; is not supported, defaulting to grid.</source>
+        <translation>Typ rozvrÅŸenÃ­ &apos;%1&apos; nenÃ­ podporovÃ¡n; bylo vytvoÅeno mÅÃ­ÅŸkovÃ© rozvrÅŸenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+243"/>
+        <source>The container extension of the widget &apos;%1&apos; (%2) returned a widget not managed by Designer &apos;%3&apos; (%4) when queried for page #%5.
+Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source>
+        <translation>KontejnerovÃ© rozÅ¡Ã­ÅenÃ­ prvku &apos;%1&apos; (%2) vrÃ¡tilo pro stranu %5 prvek &apos;%3&apos; (%4), kterÃœ nenÃ­ spravovÃ¡n programem Designer.
+KontejnerovÃ© strÃ¡nky by mÄly bÃœt zadÃ¡ny vÃœhradnÄ v XML vrÃ¡cenÃ©m postupu domXML() uÅŸivatelsky stanovenÃ©ho prvku.</translation>
+    </message>
+    <message>
+        <location line="+599"/>
+        <source>Unexpected element &lt;%1&gt;</source>
+        <extracomment>Parsing clipboard contents</extracomment>
+        <translation>NeplatnÃœ prvek &lt;%1&gt;</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+        <extracomment>Parsing clipboard contents</extracomment>
+        <translation>Chyba pÅi vloÅŸenÃ­ obsahu schrÃ¡nky, ÅÃ¡dek %1, sloupec %2: %3</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Error while pasting clipboard contents: The root element &lt;ui&gt; is missing.</source>
+        <extracomment>Parsing clipboard contents</extracomment>
+        <translation>Chyba pÅi vloÅŸenÃ­ obsahu schrÃ¡nky: KoÅenovÃœ prvek &lt;ui&gt; chybÃ­.</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerSharedSettings</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="+83"/>
+        <source>The template path %1 could not be created.</source>
+        <translation>AdresÃ¡Å s pÅedlohami %1 se nepodaÅilo zÅÃ­dit.</translation>
+    </message>
+    <message>
+        <location line="+184"/>
+        <source>An error has been encountered while parsing device profile XML: %1</source>
+        <translation>PÅi ÄtenÃ­ XML profilu zaÅÃ­zenÃ­ se vyskytla chyba: %1</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerToolWindow</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="+190"/>
+        <source>Property Editor</source>
+        <translation>Editor vlastnostÃ­</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Action Editor</source>
+        <translation>Editor ÄinnostÃ­</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Object Inspector</source>
+        <translation>Ukazatel pÅedmÄtÅ¯</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Resource Browser</source>
+        <translation>ProhlÃ­ÅŸeÄ zdrojÅ¯</translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>Signal/Slot Editor</source>
+        <translation>Editor signÃ¡lÅ¯ a zdÃ­Åek</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Widget Box</source>
+        <translation>Krabice s prvky</translation>
+    </message>
+</context>
+<context>
+    <name>QDesignerWorkbench</name>
+    <message>
+        <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="+199"/>
+        <source>&amp;File</source>
+        <translation>&amp;Soubor</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>F&amp;orm</source>
+        <translation>F&amp;ormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Preview in</source>
+        <translation>NÃ¡hled v</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&amp;Window</source>
+        <translation>&amp;Okno</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Help</source>
+        <translation>&amp;NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <source>Edit</source>
+        <translation>Ãpravy</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Toolbars</source>
+        <translation>NÃ¡strojovÃ© pruhy</translation>
+    </message>
+    <message>
+        <location line="+465"/>
+        <source>Save Forms?</source>
+        <translation>UloÅŸit formulÃ¡Åe?</translation>
+    </message>
+    <message>
+        <location line="-494"/>
+        <source>&amp;View</source>
+        <translation>&amp;Pohled</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;NastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+204"/>
+        <source>Widget Box</source>
+        <translation>Krabice s prvky</translation>
+    </message>
+    <message>
+        <location line="+292"/>
+        <source>If you do not review your documents, all your changes will be lost.</source>
+        <translation>ZmÄny budou ztraceny, pokud se na formulÃ¡Åe jeÅ¡tÄ jednou nepodÃ­vÃ¡te.</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Discard Changes</source>
+        <translation>Zahodit zmÄny</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Review Changes</source>
+        <translation>PodÃ­vat se na zmÄny</translation>
+    </message>
+    <message>
+        <location line="+95"/>
+        <source>Backup Information</source>
+        <translation>Informace o uklÃ¡dÃ¡nÃ­ na pozadÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source>
+        <translation>Designer zÅejmÄ nebyl ÅÃ¡dnÄ ukonÄen; existujÃ­ soubory z uklÃ¡dÃ¡nÃ­ na pozadÃ­. Chcete je nahrÃ¡t?</translation>
+    </message>
+    <message>
+        <location line="+111"/>
+        <source>The file &lt;b&gt;%1&lt;/b&gt; could not be opened.</source>
+        <translation>Soubor &lt;b&gt;%1&lt;/b&gt; se nepodaÅilo otevÅÃ­t.</translation>
+    </message>
+    <message>
+        <location line="+46"/>
+        <source>The file &lt;b&gt;%1&lt;/b&gt; is not a valid Designer UI file.</source>
+        <translation>Soubor &lt;b&gt;%1&lt;/b&gt; nenÃ­ platnÃœm souborem rozhranÃ­ programu Designer.</translation>
+    </message>
+    <message numerus="yes">
+        <location line="-259"/>
+        <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source>
+        <translation>
+            <numerusform>FormulÃ¡Å byl zmÄnÄn, ale zmÄny nebyl uloÅŸeny. Chcete se na tyto zmÄny podÃ­vat pÅedtÃ­m, neÅŸ program ukonÄÃ­te?</numerusform>
+            <numerusform>%n formulÃ¡Åe byly zmÄnÄny, ale zmÄny nebyl uloÅŸeny. Chcete se na tyto zmÄny podÃ­vat pÅedtÃ­m, neÅŸ program ukonÄÃ­te?</numerusform>
+            <numerusform>%n formulÃ¡Åe byly zmÄnÄny, ale zmÄny nebyl uloÅŸeny. Chcete se na tyto zmÄny podÃ­vat pÅedtÃ­m, neÅŸ program ukonÄÃ­te?</numerusform>
+        </translation>
+    </message>
+</context>
+<context>
+    <name>QFormBuilder</name>
+    <message>
+        <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+163"/>
+        <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>Postupu %1 byl pÅedÃ¡n prÃ¡zdnÃœ nÃ¡zev tÅÃ­dy (nÃ¡zev pÅedmÄtu &apos;%2&apos;).</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>QFormBuilder was unable to create a custom widget of the class &apos;%1&apos;; defaulting to base class &apos;%2&apos;.</source>
+        <translation>QFormBuilderu se nepodaÅilo vytvoÅit uÅŸivatelsky stanovenÃœ prvek tÅÃ­dy &apos;%1&apos;; byl vytvoÅen prvek zÃ¡kladnÃ­ tÅÃ­dy &apos;%2&apos;.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>QFormBuilder was unable to create a widget of the class &apos;%1&apos;.</source>
+        <translation>QFormBuilderu se nepodaÅilo vytvoÅit pÅedmÄt tÅÃ­dy &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+61"/>
+        <source>The layout type `%1&apos; is not supported.</source>
+        <translation>RozvrÅŸenÃ­ typu `%1&apos; nejsou podporovÃ¡na.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="+106"/>
+        <source>The set-type property %1 could not be read.</source>
+        <translation>Vlastnost %1 se nepodaÅilo pÅeÄÃ­st (typ: mnoÅŸstvÃ­).</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>The enumeration-type property %1 could not be read.</source>
+        <translation>Vlastnost %1 se nepodaÅilo pÅeÄÃ­st (typ: vÃœÄet).</translation>
+    </message>
+    <message>
+        <location line="+190"/>
+        <source>Reading properties of the type %1 is not supported yet.</source>
+        <translation>ÄtenÃ­ vlastnostÃ­ typu %1 nenÃ­ podporovÃ¡no.</translation>
+    </message>
+    <message>
+        <location line="+266"/>
+        <source>The property %1 could not be written. The type %2 is not supported yet.</source>
+        <translation>Vlastnost %1 se nepodaÅilo zapsat, protoÅŸe typ %2 nenÃ­ podporovÃ¡n.</translation>
+    </message>
+</context>
+<context>
+    <name>QStackedWidgetEventFilter</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="+194"/>
+        <source>Previous Page</source>
+        <translation>PÅedchozÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Next Page</source>
+        <translation>DalÅ¡Ã­ strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Before Current Page</source>
+        <translation>PÅed nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>After Current Page</source>
+        <translation>Po nynÄjÅ¡Ã­ stranÄ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Page Order...</source>
+        <translation>ZmÄnit poÅadÃ­ stran...</translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <source>Change Page Order</source>
+        <translation>ZmÄnit poÅadÃ­ stran</translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>Page %1 of %2</source>
+        <translation>Strana %1 z %2</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+4"/>
+        <source>Insert Page</source>
+        <translation>VloÅŸit stranu</translation>
+    </message>
+</context>
+<context>
+    <name>QStackedWidgetPreviewEventFilter</name>
+    <message>
+        <location line="-153"/>
+        <source>Go to previous page of %1 &apos;%2&apos; (%3/%4).</source>
+        <translation>JÃ­t na pÅedchozÃ­ stranu %1 &apos;%2&apos; (%3/%4).</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Go to next page of %1 &apos;%2&apos; (%3/%4).</source>
+        <translation>JÃ­t na dalÅ¡Ã­ stranu %1 &apos;%2&apos; (%3/%4).</translation>
+    </message>
+</context>
+<context>
+    <name>QTabWidgetEventFilter</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="+89"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Before Current Page</source>
+        <translation>PÅed nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>After Current Page</source>
+        <translation>Po nynÄjÅ¡Ã­ stranÄ</translation>
+    </message>
+    <message>
+        <location line="+283"/>
+        <source>Page %1 of %2</source>
+        <translation>Strana %1 z %2</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+4"/>
+        <source>Insert Page</source>
+        <translation>VloÅŸit stranu</translation>
+    </message>
+</context>
+<context>
+    <name>QToolBoxHelper</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="+64"/>
+        <source>Delete Page</source>
+        <translation>Smazat stranu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Before Current Page</source>
+        <translation>PÅed nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>After Current Page</source>
+        <translation>Po nynÄjÅ¡Ã­ stranÄ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Page Order...</source>
+        <translation>ZmÄnit poÅadÃ­ stran...</translation>
+    </message>
+    <message>
+        <location line="+116"/>
+        <source>Change Page Order</source>
+        <translation>ZmÄnit poÅadÃ­ stran</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Page %1 of %2</source>
+        <translation>Strana %1 z %2</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Insert Page</source>
+        <translation>VloÅŸit stranu</translation>
+    </message>
+</context>
+<context>
+    <name>QtBoolEdit</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+226"/>
+        <location line="+10"/>
+        <location line="+25"/>
+        <source>True</source>
+        <translation>PravdivÃœ</translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <location line="+25"/>
+        <source>False</source>
+        <translation>NepravdivÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>QtBoolPropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1469"/>
+        <source>True</source>
+        <translation>PravdivÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>False</source>
+        <translation>NepravdivÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>QtCharEdit</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1581"/>
+        <source>Clear Char</source>
+        <translation>Smazat znak</translation>
+    </message>
+</context>
+<context>
+    <name>QtColorEditWidget</name>
+    <message>
+        <location line="+605"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+</context>
+<context>
+    <name>QtColorPropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4743"/>
+        <source>Red</source>
+        <translation>ÄervenÃ¡</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Green</source>
+        <translation>ZelenÃ¡</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Blue</source>
+        <translation>ModrÃ¡</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Alpha</source>
+        <translation>Alfa</translation>
+    </message>
+</context>
+<context>
+    <name>QtCursorDatabase</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-206"/>
+        <source>Arrow</source>
+        <translation>Å ipka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Up Arrow</source>
+        <translation>Å ipka nahoru</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Cross</source>
+        <translation>KÅÃ­ÅŸÃ­cÃ­ se ÄÃ¡ry</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Wait</source>
+        <translation>PÅesÃœpacÃ­ hodiny</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>IBeam</source>
+        <translation>I trÃ¡mec</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size Vertical</source>
+        <translation>ZvÄtÅ¡it svisle</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size Horizontal</source>
+        <translation>ZvÄtÅ¡it vodorovnÄ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size Backslash</source>
+        <translation>ZvÄtÅ¡it zpÄtnÃ©/obrÃ¡cenÃ© lomÃ­tko</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size Slash</source>
+        <translation>ZvÄtÅ¡it lomÃ­tko</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size All</source>
+        <translation>ZvÄtÅ¡it vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Blank</source>
+        <translation>PrÃ¡zdnÃœ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Split Vertical</source>
+        <translation>RozdÄlit svisle</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Split Horizontal</source>
+        <translation>RozdÄlit vodorovnÄ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Pointing Hand</source>
+        <translation>UkazujÃ­cÃ­ ruka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Forbidden</source>
+        <translation>ZakÃ¡zÃ¡no</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Open Hand</source>
+        <translation>OtevÅenÃ¡ ruka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Closed Hand</source>
+        <translation>ZavÅenÃ¡ ruka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>What&apos;s This</source>
+        <translation>A co je toto</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Busy</source>
+        <translation>ZaneprÃ¡zdnÄn</translation>
+    </message>
+</context>
+<context>
+    <name>QtFontEditWidget</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+198"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Select Font</source>
+        <translation>Vybrat pÃ­smo</translation>
+    </message>
+</context>
+<context>
+    <name>QtFontPropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-351"/>
+        <source>Family</source>
+        <translation>PÃ­smovÃ¡ rodina</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Point Size</source>
+        <translation>BodovÃ¡ velikost</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Bold</source>
+        <translation>TuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Italic</source>
+        <translation>KurzÃ­va</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Underline</source>
+        <translation>PodtrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Strikeout</source>
+        <translation>PÅeÅ¡krtnutÃ©</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Kerning</source>
+        <translation>PodÅezÃ¡vÃ¡nÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>QtGradientDialog</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/>
+        <source>Edit Gradient</source>
+        <translation>Upravit pÅechod</translation>
+    </message>
+</context>
+<context>
+    <name>QtGradientEditor</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="+431"/>
+        <source>Start X</source>
+        <translation>ZaÄÃ¡teÄnÃ­ hodnota x</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Start Y</source>
+        <translation>ZaÄÃ¡teÄnÃ­ hodnota y</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Final X</source>
+        <translation>KoncovÃ¡ hodnota x</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Final Y</source>
+        <translation>KoncovÃ¡ hodnota y</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location line="+24"/>
+        <source>Central X</source>
+        <translation>StÅed x</translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <location line="+24"/>
+        <source>Central Y</source>
+        <translation>StÅed y</translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <source>Focal X</source>
+        <translation>Ohnisko x</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Focal Y</source>
+        <translation>Ohnisko y</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Radius</source>
+        <translation>PolomÄr</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Angle</source>
+        <translation>Ãhel</translation>
+    </message>
+    <message>
+        <location line="+288"/>
+        <source>Linear</source>
+        <translation>PÅÃ­moÄarÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Radial</source>
+        <translation>PaprskovitÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Conical</source>
+        <translation>KuÅŸelovitÃœ</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Pad</source>
+        <translation>Doplnit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Repeat</source>
+        <translation>Opakovat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reflect</source>
+        <translation>Zrcadlit</translation>
+    </message>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Gradient Editor</source>
+        <translation>Ãpravy pÅechodÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>2</source>
+        <translation>2</translation>
+    </message>
+    <message>
+        <location/>
+        <source>3</source>
+        <translation>3</translation>
+    </message>
+    <message>
+        <location/>
+        <source>4</source>
+        <translation>4</translation>
+    </message>
+    <message>
+        <location/>
+        <source>5</source>
+        <translation>5</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Gradient Stops Editor</source>
+        <translation>Editor bodÅ¯ zastavenÃ­ pÅechodu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag &amp; drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source>
+        <translation>Tato oblast slouÅŸÃ­ pro Ãºpravy bodÅ¯ zastavenÃ­ pÅechodu. DvakrÃ¡t klepnÄte na orientaÄnÃ­ bod kvÅ¯li jeho zdvojenÃ­. DvakrÃ¡t klepnÄte na plochu kvÅ¯li vytvoÅenÃ­ novÃ©ho orientaÄnÃ­ho bodu. PouÅŸijte taÅŸenÃ­ &amp; upuÅ¡tÄnÃ­ pro posunutÃ­ bodu. PravÃœm tlaÄÃ­tkem myÅ¡i se vyvolÃ¡vÃ¡ nabÃ­dka s dalÅ¡Ã­mi souvisejÃ­cÃ­mi volbami.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Zoom</source>
+        <translation>ZvÄtÅ¡enÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Position</source>
+        <translation>Poloha</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Hue</source>
+        <translation>BarevnÃœ odstÃ­n</translation>
+    </message>
+    <message>
+        <location/>
+        <source>H</source>
+        <translation>H</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Saturation</source>
+        <translation>Sytost</translation>
+    </message>
+    <message>
+        <location/>
+        <source>S</source>
+        <translation>S</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Sat</source>
+        <translation>Sytost</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Value</source>
+        <translation>Hodnota</translation>
+    </message>
+    <message>
+        <location/>
+        <source>V</source>
+        <translation>V</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Val</source>
+        <translation>Hodnota</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Alpha</source>
+        <translation>Alfa</translation>
+    </message>
+    <message>
+        <location/>
+        <source>A</source>
+        <translation>A</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Type</source>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Spread</source>
+        <translation>RozÅ¡iÅovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Color</source>
+        <translation>Barva</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Current stop&apos;s color</source>
+        <translation>Barva nynÄjÅ¡Ã­ho zastavenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>HSV</source>
+        <translation>HSV</translation>
+    </message>
+    <message>
+        <location/>
+        <source>RGB</source>
+        <translation>RGB</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Current stop&apos;s position</source>
+        <translation>Poloha nynÄjÅ¡Ã­ho zastavenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>%</source>
+        <translation>%</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Zoom In</source>
+        <translation>PÅiblÃ­ÅŸit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Zoom Out</source>
+        <translation>OddÃ¡lit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle details extension</source>
+        <translation>ZaÅadit dalÅ¡Ã­ volby</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&gt;</source>
+        <translation>&gt;</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Linear Type</source>
+        <translation>PÅÃ­moÄarÃœ typ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Radial Type</source>
+        <translation>PaprskovitÃœ typ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Conical Type</source>
+        <translation>KuÅŸelovitÃœ typ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Pad Spread</source>
+        <translation>Doplnit rozÅ¡iÅovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Repeat Spread</source>
+        <translation>Opakovat rozÅ¡iÅovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reflect Spread</source>
+        <translation>Zrcadlit rozÅ¡iÅovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient&apos;s type such as start and final point, radius, etc. by drag &amp; drop.</source>
+        <translation>tato oblast ukazuje nÃ¡hled prÃ¡vÄ upravovanÃ©ho pÅechodu. Zde mÅ¯ÅŸete upravovat promÄnnÃ© pÅÃ­znaÄnÃ© pro pÅechod, jako zaÄÃ¡teÄnÃ­ a koncovÃœ bod, polomÄr etd. pomocÃ­ taÅŸenÃ­ a pouÅ¡tÄnÃ­.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show HSV specification</source>
+        <translation>UkÃ¡zat pÅesnÃ© vymezenÃ­ HSV</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show RGB specification</source>
+        <translation>UkÃ¡zat pÅesnÃ© vymezenÃ­ RGB</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reset Zoom</source>
+        <translation>Nastavit znovu zvÄtÅ¡enÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>QtGradientStopsWidget</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="+947"/>
+        <source>New Stop</source>
+        <translation>NovÃ© zastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Flip All</source>
+        <translation>ObrÃ¡tit vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zoom In</source>
+        <translation>ZvÄtÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zoom Out</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reset Zoom</source>
+        <translation>Nastavit znovu zvÄtÅ¡enÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>QtGradientView</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/>
+        <source>Grad</source>
+        <translation>PÅechod</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Remove Gradient</source>
+        <translation>Odstranit pÅechod</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Are you sure you want to remove the selected gradient?</source>
+        <translation>Opravdu chcete odstranit vybranÃœ pÅechod?</translation>
+    </message>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+74"/>
+        <source>New...</source>
+        <translation>NovÃœ...</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
+        <source>Edit...</source>
+        <translation>Upravit...</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
+        <source>Rename</source>
+        <translation>PÅejmenovat</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Gradient View</source>
+        <translation>Pohled na pÅechod</translation>
+    </message>
+</context>
+<context>
+    <name>QtGradientViewDialog</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/>
+        <source>Select Gradient</source>
+        <translation>Vybrat pÅechod</translation>
+    </message>
+</context>
+<context>
+    <name>QtKeySequenceEdit</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+221"/>
+        <source>Clear Shortcut</source>
+        <translation>Smazat klÃ¡vesovÃ© zkratky</translation>
+    </message>
+</context>
+<context>
+    <name>QtLocalePropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-3541"/>
+        <source>%1, %2</source>
+        <translation>%1, %2</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Language</source>
+        <translation>Jazyk</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Country</source>
+        <translation>ZemÄ</translation>
+    </message>
+</context>
+<context>
+    <name>QtPointFPropertyManager</name>
+    <message>
+        <location line="+411"/>
+        <source>(%1, %2)</source>
+        <translation>(%1, %2)</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+</context>
+<context>
+    <name>QtPointPropertyManager</name>
+    <message>
+        <location line="-320"/>
+        <source>(%1, %2)</source>
+        <translation>(%1, %2)</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+</context>
+<context>
+    <name>QtPropertyBrowserUtils</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-136"/>
+        <source>[%1, %2, %3] (%4)</source>
+        <translation>[%1, %2, %3] (%4)</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>[%1, %2]</source>
+        <translation>[%1, %2]</translation>
+    </message>
+</context>
+<context>
+    <name>QtRectFPropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1706"/>
+        <source>[(%1, %2), %3 x %4]</source>
+        <translation>[(%1, %2), %3 x %4]</translation>
+    </message>
+    <message>
+        <location line="+156"/>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Width</source>
+        <translation>Å Ã­Åka</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Height</source>
+        <translation>VÃœÅ¡ka</translation>
+    </message>
+</context>
+<context>
+    <name>QtRectPropertyManager</name>
+    <message>
+        <location line="-612"/>
+        <source>[(%1, %2), %3 x %4]</source>
+        <translation>[(%1, %2), %3 x %4]</translation>
+    </message>
+    <message>
+        <location line="+120"/>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Width</source>
+        <translation>Å Ã­Åka</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Height</source>
+        <translation>VÃœÅ¡ka</translation>
+    </message>
+</context>
+<context>
+    <name>QtResourceEditorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="+1961"/>
+        <source>Edit Resources</source>
+        <translation>Upravit zdroje</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>New...</source>
+        <translation>NovÃœ...</translation>
+    </message>
+    <message>
+        <location line="-565"/>
+        <location line="+566"/>
+        <source>New Resource File</source>
+        <translation>NovÃœ zdrojovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="-413"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; The file&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s parent directory.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;&lt;b&gt;UpozornÄnÃ­:&lt;/b&gt;&lt;p&gt;ZvolenÃœ soubor: &lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;se nachÃ¡zÃ­ mimo adresÃ¡Å se nynÄjÅ¡Ã­m zdrojovÃœm souborem:&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&lt;p&gt;To resolve the issue, press:&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy&lt;/th&gt;&lt;td&gt;to copy the file to the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy As...&lt;/th&gt;&lt;td&gt;to copy the file into a subdirectory of the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Keep&lt;/th&gt;&lt;td&gt;to use its current location.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;p&gt;Zvolte, prosÃ­m:&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;KopÃ­rovat&lt;/th&gt;&lt;td&gt;pro zkopÃ­rovÃ¡nÃ­ souboru do adresÃ¡Åe se zdrojovÃœm souborem.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;KopÃ­rovat jako...&lt;/th&gt;&lt;td&gt;pro zkopÃ­rovÃ¡nÃ­ souboru do podadresÃ¡Åe se zdrojovÃœm souborem.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Zachovat&lt;/th&gt;&lt;td&gt;, aby se soubor pouÅŸÃ­val ve svÃ©m nynÄjÅ¡Ã­m adresÃ¡Åi.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+        <location line="+288"/>
+        <source>Could not copy
+%1
+to
+%2</source>
+        <translation>KopÃ­rovÃ¡nÃ­ se nezdaÅilo:
+%1
+zu:
+%2</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>A parse error occurred at line %1, column %2 of %3:
+%4</source>
+        <translation>V souboru %3 se na ÅÃ¡dku %1, v sloupci %2 vyskytla chyba:
+ %4</translation>
+    </message>
+    <message>
+        <location line="+83"/>
+        <source>Open...</source>
+        <translation>OtevÅÃ­t...</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location line="+11"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <location line="+11"/>
+        <source>Move Up</source>
+        <translation>Posunout nahoru</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <location line="+11"/>
+        <source>Move Down</source>
+        <translation>Posunout dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <location line="+1"/>
+        <source>Add Prefix</source>
+        <translation>PÅidat pÅedponu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Files...</source>
+        <translation>PÅidat soubory...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Prefix</source>
+        <translation>ZmÄnit pÅedponu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Language</source>
+        <translation>ZmÄnit jazyk</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Alias</source>
+        <translation>ZmÄnit pÅezdÃ­vku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Clone Prefix...</source>
+        <translation>Zdvojit pÅedponu...</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Prefix / Path</source>
+        <translation>PÅedpona/Cesta</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Language / Alias</source>
+        <translation>Jazyk/PÅezdÃ­vka</translation>
+    </message>
+    <message>
+        <location line="+117"/>
+        <source>&lt;html&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; There have been problems while reloading the resources:&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</source>
+        <translation>&lt;html&gt;&lt;p&gt;&lt;b&gt;VarovÃ¡nÃ­:&lt;/b&gt; PÅi opÄtovnÃ©m nahrÃ¡nÃ­ souboru se vyskytly chyby:&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Resource Warning</source>
+        <translation>Zdroje - VarovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New File</source>
+        <translation>NovÃœ soubor</translation>
+    </message>
+    <message>
+        <location/>
+        <source>N</source>
+        <translation>N</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove File</source>
+        <translation>Odstranit soubor</translation>
+    </message>
+    <message>
+        <location/>
+        <source>R</source>
+        <translation>L</translation>
+    </message>
+    <message>
+        <location/>
+        <source>I</source>
+        <translation>I</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New Resource</source>
+        <translation>NovÃœ zdroj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>A</source>
+        <translation>A</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove Resource or File</source>
+        <translation>Odstranit zdroj nebo soubor</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="-2091"/>
+        <source>%1 already exists.
+Do you want to replace it?</source>
+        <translation>Soubor %1 jiÅŸ existuje.
+Chcete jej nahradit?</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>The file does not appear to be a resource file; element &apos;%1&apos; was found where &apos;%2&apos; was expected.</source>
+        <translation>Soubor zÅejmÄ nenÃ­ zdrojovÃœm souborem; Na mÃ­stÄ, kde byl oÄekÃ¡vÃ¡n prvek &apos;%2&apos; byl nalezen prvek &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+902"/>
+        <source>%1 [read-only]</source>
+        <translation>%1 [pouze pro ÄtenÃ­]</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location line="+198"/>
+        <source>%1 [missing]</source>
+        <translation>%1 [chybÃ­]</translation>
+    </message>
+    <message>
+        <location line="-72"/>
+        <source>&lt;no prefix&gt;</source>
+        <translation>&lt;ÅŸÃ¡dnÃ¡ pÅedpona&gt;</translation>
+    </message>
+    <message>
+        <location line="+322"/>
+        <location line="+25"/>
+        <source>Resource files (*.qrc)</source>
+        <translation>ZdrojovÃ© soubory (*.qrc)</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Import Resource File</source>
+        <translation>ZavÃ©st zdrojovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+112"/>
+        <source>newPrefix</source>
+        <translation>novÃ¡PÅedpona</translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>Add Files</source>
+        <translation>PÅidat soubory</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Incorrect Path</source>
+        <translation>NesprÃ¡vnÃœ Ãºdaj o cestÄ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location line="+19"/>
+        <location line="+212"/>
+        <location line="+7"/>
+        <source>Copy</source>
+        <translation>KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="-236"/>
+        <source>Copy As...</source>
+        <translation>KopÃ­rovat jako...</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Keep</source>
+        <translation>Zachovat</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Skip</source>
+        <translation>PÅeskoÄit</translation>
+    </message>
+    <message>
+        <location line="+87"/>
+        <source>Clone Prefix</source>
+        <translation>Zdvojit pÅedponu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Enter the suffix which you want to add to the names of the cloned files.
+This could for example be a language extension like &quot;_de&quot;.</source>
+        <translation>Zadejte, prosÃ­m, pÅÃ­ponu, kterou chcete pÅidat k nÃ¡zvÅ¯m zdvojenÃœch souborÅ¯.
+MÅ¯ÅŸe to bÃœt napÅÃ­klad jazykovÃ© rozÅ¡Ã­ÅenÃ­ &quot;_cs&quot;.</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <location line="+4"/>
+        <source>Copy As</source>
+        <translation>KopÃ­rovat jako</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;p&gt;The selected file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s directory:&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Please select another path within this directory.&lt;p&gt;</source>
+        <translation>&lt;p&gt;VybranÃœ soubor: &lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;se nachÃ¡zÃ­ mimo adresÃ¡Å se zdrojovÃœm souborem:&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Zvolte, prosÃ­m, jinou cestu, kterÃ¡ je obsaÅŸena v tomto adresÃ¡Åi.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Could not overwrite %1.</source>
+        <translation>%1 se nepodaÅilo pÅepsat.</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Save Resource File</source>
+        <translation>UloÅŸit zdrojovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Could not write %1: %2</source>
+        <translation>Soubor %1 se nepodaÅilo zapsat: %2</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>Open Resource File</source>
+        <translation>OtevÅÃ­t zdrojovÃœ soubor</translation>
+    </message>
+</context>
+<context>
+    <name>QtResourceView</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+566"/>
+        <source>Size: %1 x %2
+%3</source>
+        <translation>Velikost: %1 x %2
+%3</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Edit Resources...</source>
+        <translation>Upravit zdroje...</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Reload</source>
+        <translation>NahrÃ¡t znovu</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy Path</source>
+        <translation>KopÃ­rovat cestu</translation>
+    </message>
+</context>
+<context>
+    <name>QtResourceViewDialog</name>
+    <message>
+        <location line="+250"/>
+        <source>Select Resource</source>
+        <translation>Vybrat zdroj</translation>
+    </message>
+</context>
+<context>
+    <name>QtSizeFPropertyManager</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-535"/>
+        <source>%1 x %2</source>
+        <translation>%1 x %2</translation>
+    </message>
+    <message>
+        <location line="+130"/>
+        <source>Width</source>
+        <translation>Å Ã­Åka</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Height</source>
+        <translation>VÃœÅ¡ka</translation>
+    </message>
+</context>
+<context>
+    <name>QtSizePolicyPropertyManager</name>
+    <message>
+        <location line="+1709"/>
+        <location line="+1"/>
+        <source>&lt;Invalid&gt;</source>
+        <translation>&lt;NeplatnÃœ&gt;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>[%1, %2, %3, %4]</source>
+        <translation>[%1, %2, %3, %4]</translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Horizontal Policy</source>
+        <translation>VodorovnÃ© nastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Vertical Policy</source>
+        <translation>SvislÃ© nastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Horizontal Stretch</source>
+        <translation>VodorovnÃ© protaÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Vertical Stretch</source>
+        <translation>SvislÃ© protaÅŸenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>QtSizePropertyManager</name>
+    <message>
+        <location line="-2286"/>
+        <source>%1 x %2</source>
+        <translation>%1 x %2</translation>
+    </message>
+    <message>
+        <location line="+96"/>
+        <source>Width</source>
+        <translation>Å Ã­Åka</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Height</source>
+        <translation>VÃœÅ¡ka</translation>
+    </message>
+</context>
+<context>
+    <name>QtToolBarDialog</name>
+    <message>
+        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="+1784"/>
+        <source>&lt; S E P A R A T O R &gt;</source>
+        <translation>&lt; O D D Ä L O V A Ä &gt;</translation>
+    </message>
+    <message>
+        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/>
+        <source>Customize Toolbars</source>
+        <translation>PÅizpÅ¯sobit nÃ¡strojovÃ© pruhy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Actions</source>
+        <translation>Äinnosti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toolbars</source>
+        <translation>NÃ¡strojovÃ© pruhy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New</source>
+        <translation>NovÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Rename</source>
+        <translation>PÅejmenovat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Up</source>
+        <translation>Nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&lt;-</source>
+        <translation>&lt;-</translation>
+    </message>
+    <message>
+        <location/>
+        <source>-&gt;</source>
+        <translation>-&gt;</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Down</source>
+        <translation>DolÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Current Toolbar Actions</source>
+        <translation>Äinnosti souÄasnÃ©ho nÃ¡strojovÃ©ho pruhu</translation>
+    </message>
+    <message>
+        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="-544"/>
+        <source>Custom Toolbar</source>
+        <translation>UÅŸivatelsky stanovenÃ© nÃ¡strojovÃ© pruhy</translation>
+    </message>
+    <message>
+        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/>
+        <source>Add new toolbar</source>
+        <translation>PÅidat novÃœ nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove selected toolbar</source>
+        <translation>Odstranit vybranÃœ nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Rename toolbar</source>
+        <translation>PÅejmenovat nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move action up</source>
+        <translation>Posunout Äinnost nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Remove action from toolbar</source>
+        <translation>Odstranit Äinnost z nÃ¡strojovÃ©ho pruhu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Add action to toolbar</source>
+        <translation>PÅidat Äinnost do nÃ¡strojovÃ©ho pruhu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move action down</source>
+        <translation>Posunout Äinnost dolÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>QtTreePropertyBrowser</name>
+    <message>
+        <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="+442"/>
+        <source>Property</source>
+        <translation>Vlastnost</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Value</source>
+        <translation>Hodnota</translation>
+    </message>
+</context>
+<context>
+    <name>SaveFormAsTemplate</name>
+    <message>
+        <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="+72"/>
+        <source>Add path...</source>
+        <translation>PÅidat cestu...</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Template Exists</source>
+        <translation>PÅedloha jiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A template with the name %1 already exists.
+Do you want overwrite the template?</source>
+        <translation>JiÅŸ existuje pÅedloha s nÃ¡zvem %1.
+Chcete tuto pÅedlohu pÅepsat?</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Overwrite Template</source>
+        <translation>PÅepsat pÅedlohu</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Open Error</source>
+        <translation>Chyba pÅi otevÃ­rÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>There was an error opening template %1 for writing. Reason: %2</source>
+        <translation>PÅedlohu %1 se nepodaÅilo otevÅÃ­t pro zÃ¡pis. DÅ¯vod: %2</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Write Error</source>
+        <translation>Chyba pÅi zÃ¡pisu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>There was an error writing the template %1 to disk. Reason: %2</source>
+        <translation>PÅedlohu %1 se nepodaÅilo zapsat do souboru na disku. DÅ¯vod: %2</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Pick a directory to save templates in</source>
+        <translation>Vyberte adresÃ¡Å pro uklÃ¡dÃ¡nÃ­ pÅedloh</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/designer/saveformastemplate.ui"/>
+        <source>Save Form As Template</source>
+        <translation>UloÅŸit formulÃ¡Å jako pÅedlohu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Category:</source>
+        <translation>&amp;Skupina:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Name:</source>
+        <translation>&amp;NÃ¡zev:</translation>
+    </message>
+</context>
+<context>
+    <name>ScriptErrorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+59"/>
+        <source>An error occurred while running the scripts for &quot;%1&quot;:
+</source>
+        <translation>PÅi provÃ¡dÄnÃ­ skriptu &quot;%1&quot; se vyskytly chyby:
+</translation>
+    </message>
+</context>
+<context>
+    <name>SelectSignalDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/>
+        <source>Go to slot</source>
+        <translation>JÃ­t na zdÃ­Åku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Select signal</source>
+        <translation>Vybrat signÃ¡l</translation>
+    </message>
+    <message>
+        <location/>
+        <source>signal</source>
+        <translation>SignÃ¡l</translation>
+    </message>
+    <message>
+        <location/>
+        <source>class</source>
+        <translation>TÅÃ­da</translation>
+    </message>
+</context>
+<context>
+    <name>SignalSlotConnection</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="-358"/>
+        <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source>
+        <translation>VYSÃLAÄ(%1), SIGNÃL(%2), PÅIJÃMAÄ(%3), ZDÃÅKA(%4)</translation>
+    </message>
+</context>
+<context>
+    <name>SignalSlotDialogClass</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/>
+        <source>Signals and slots</source>
+        <translation>SignÃ¡ly a zdÃ­Åky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Slots</source>
+        <translation>ZdÃ­Åky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Signals</source>
+        <translation>SignÃ¡ly</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Add</source>
+        <translation>PÅidat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+</context>
+<context>
+    <name>Spacer</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="+275"/>
+        <source>Horizontal Spacer &apos;%1&apos;, %2 x %3</source>
+        <translation>VodorovnÃœ vymezovaÄ &apos;%1&apos;, %2 x %3</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Vertical Spacer &apos;%1&apos;, %2 x %3</source>
+        <translation>SvislÃœ vymezovaÄ &apos;%1&apos;, %2 x %3</translation>
+    </message>
+</context>
+<context>
+    <name>TemplateOptionsPage</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="+156"/>
+        <source>Template Paths</source>
+        <extracomment>Tab in preferences dialog</extracomment>
+        <translation>AdresÃ¡Åe pro pÅedlohy</translation>
+    </message>
+</context>
+<context>
+    <name>ToolBarManager</name>
+    <message>
+        <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+89"/>
+        <source>Configure Toolbars...</source>
+        <translation>Nastavit nÃ¡strojovÃ© pruhy...</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Window</source>
+        <translation>Okno</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Style</source>
+        <translation>Styl</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Dock views</source>
+        <translation>KotvÃ­cÃ­ okno</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Toolbars</source>
+        <translation>NÃ¡strojovÃ© pruhy</translation>
+    </message>
+</context>
+<context>
+    <name>VersionDialog</name>
+    <message>
+        <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+171"/>
+        <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;Verze %2</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Qt Designer</source>
+        <translation>Qt Designer</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;br/&gt;Qt Designer is a graphical user interface designer for Qt applications.&lt;br/&gt;</source>
+        <translation>&lt;br/&gt;Qt Designer je obrazovÃœ nÃ¡vrhÃ¡Å uÅŸivatelskÃ©ho rozhranÃ­ pro programy Qt.&lt;br/&gt;</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1&lt;br/&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source>
+        <translation>%1&lt;br/&gt;AutorskÃ© prÃ¡vo (C) 2009 Nokia Corporation a/nebo jejÃ­ dceÅinnÃ¡ spoleÄnost(i).</translation>
+    </message>
+</context>
+<context>
+    <name>WidgetDataBase</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="+814"/>
+        <source>The file contains a custom widget &apos;%1&apos; whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source>
+        <translation>Soubor obsahuje uÅŸivatelsky stanovenÃœ prvek &apos;%1&apos;, jehoÅŸ zÃ¡kladnÃ­ tÅÃ­da (%2) se neshoduje se souÄasnÃœm zÃ¡znamem v databÃ¡zi prvkÅ¯ (%3). databÃ¡ze prvkÅ¯ se nemÄnÃ­.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ActionEditor</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="+139"/>
+        <source>Actions</source>
+        <translation>Äinnosti</translation>
+    </message>
+    <message>
+        <location line="-16"/>
+        <source>New...</source>
+        <translation>NovÃœ...</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+313"/>
+        <source>New action</source>
+        <translation>NovÃ¡ Äinnost</translation>
+    </message>
+    <message>
+        <location line="+98"/>
+        <source>Edit action</source>
+        <translation>Upravit Äinnost</translation>
+    </message>
+    <message>
+        <location line="-417"/>
+        <source>Edit...</source>
+        <translation>Upravit...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Go to slot...</source>
+        <translation>JÃ­t na zdÃ­Åku...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Copy</source>
+        <translation>KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cut</source>
+        <translation>Vyjmout</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Paste</source>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Select all</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>Icon View</source>
+        <translation>Pohled s ikonami</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Detailed View</source>
+        <translation>PodrobnÃœ pohled</translation>
+    </message>
+    <message>
+        <location line="+413"/>
+        <source>Remove actions</source>
+        <translation>Odstranit Äinnosti</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Remove action &apos;%1&apos;</source>
+        <translation>Odstranit Äinnost &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+186"/>
+        <source>Used In</source>
+        <translation>PouÅŸÃ­vanÃœ v</translation>
+    </message>
+    <message>
+        <location line="-608"/>
+        <source>Configure Action Editor</source>
+        <translation>Nastavit editor ÄinnostÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ActionModel</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+95"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Used</source>
+        <translation>PouÅŸÃ­vanÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Text</source>
+        <translation>Text</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Shortcut</source>
+        <translation>KlÃ¡vesovÃ¡ zkratka</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Checkable</source>
+        <translation>ZaÅ¡krtnutelnÃ¡</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ToolTip</source>
+        <translation>Rada k nÃ¡stroji</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::BrushManagerProxy</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="+219"/>
+        <source>The element &apos;%1&apos; is missing the required attribute &apos;%2&apos;.</source>
+        <translation>U prvku &apos;%1&apos; chybÃ­ vyÅŸadovanÃ¡ vlastnost &apos;%2&apos;..</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Empty brush name encountered.</source>
+        <translation>ChybÄjÃ­cÃ­ nÃ¡zev u vymezenÃ­ Å¡tÄtce.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>An unexpected element &apos;%1&apos; was encountered.</source>
+        <translation>Byl zjiÅ¡tÄn neplatnÃœ prvek &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>An error occurred when reading the brush definition file &apos;%1&apos; at line line %2, column %3: %4</source>
+        <translation>Chyba pÅi ÄtenÃ­ souboru s vymezenÃ­m Å¡tÄtce &apos;%1&apos; na ÅÃ¡dku %2, sloupec %3: %4</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>An error occurred when reading the resource file &apos;%1&apos; at line %2, column %3: %4</source>
+        <translation>Chyba pÅi ÄtenÃ­ zdrojovÃ©ho souboru &apos;%1&apos; na ÅÃ¡dku %2, sloupec %3: %4</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::BuddyEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="+261"/>
+        <source>Add buddy</source>
+        <translation>PÅidat kamarÃ¡da</translation>
+    </message>
+    <message>
+        <location line="+52"/>
+        <source>Remove buddies</source>
+        <translation>Odstranit kamarÃ¡dy</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+24"/>
+        <source>Remove %n buddies</source>
+        <translation>
+            <numerusform>Odstranit jednoho kamarÃ¡da</numerusform>
+            <numerusform>Odstranit %n kamarÃ¡dy</numerusform>
+            <numerusform>Odstranit %n kamarÃ¡dy</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location line="+51"/>
+        <source>Add %n buddies</source>
+        <translation>
+            <numerusform>PÅidat jednoho kamarÃ¡da</numerusform>
+            <numerusform>PÅidat %n kamarÃ¡dy</numerusform>
+            <numerusform>PÅidat %n kamarÃ¡dy</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+47"/>
+        <source>Set automatically</source>
+        <translation>Nastavit automaticky</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::BuddyEditorPlugin</name>
+    <message>
+        <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="+73"/>
+        <source>Edit Buddies</source>
+        <translation>Upravit kamarÃ¡dy</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::BuddyEditorTool</name>
+    <message>
+        <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="+56"/>
+        <source>Edit Buddies</source>
+        <translation>Upravit kamarÃ¡dy</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ButtonGroupMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+7"/>
+        <source>Select members</source>
+        <translation>Vybrat Äleny</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Break</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ButtonTaskMenu</name>
+    <message>
+        <location line="+121"/>
+        <source>Assign to button group</source>
+        <translation>PÅiÅadit ke skupinÄ tlaÄÃ­tek</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Button group</source>
+        <translation>Skupina tlaÄÃ­tek</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>New button group</source>
+        <translation>NovÃ¡ skupina tlaÄÃ­tek</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change text...</source>
+        <translation>ZmÄnit text...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location line="+101"/>
+        <source>Button group &apos;%1&apos;</source>
+        <translation>Skupina tlaÄÃ­tek &apos;%1&apos;</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::CodeDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="+95"/>
+        <source>Save...</source>
+        <translation>UloÅŸit...</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Copy All</source>
+        <translation>KopÃ­rovat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Find in Text...</source>
+        <translation>&amp;NajÃ­t v textu...</translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>A temporary form file could not be created in %1.</source>
+        <translation>V adresÃ¡Åi %1 se nepodaÅilo vytvoÅit doÄasnÃœ soubor s formulÃ¡Åem.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The temporary form file %1 could not be written.</source>
+        <translation>DoÄasnÃœ soubor s formulÃ¡Åem %1 se nepodaÅilo zapsat.</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>%1 - [Code]</source>
+        <translation>%1 - [KÃ³d]</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Save Code</source>
+        <translation>UloÅŸit kÃ³d</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Header Files (*.%1)</source>
+        <translation>HlaviÄkovÃ© soubory (*.%1)</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The file %1 could not be opened: %2</source>
+        <translation>Soubor %1 se nepodaÅilo otevÅÃ­t: %2</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>The file %1 could not be written: %2</source>
+        <translation>Soubor %1 se nepodaÅilo zapsat: %2</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>%1 - Error</source>
+        <translation>%1 - Chyba</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ColorAction</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+246"/>
+        <source>Text Color</source>
+        <translation>Barva textu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ComboBoxTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="+68"/>
+        <source>Edit Items...</source>
+        <translation>Upravit zÃ¡znamy...</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Change Combobox Contents</source>
+        <translation>ZmÄnit obsah skupinovÃ© krabice</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::CommandLinkButtonTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+156"/>
+        <source>Change description...</source>
+        <translation>ZmÄnit popis...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ConnectionEdit</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+1313"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Deselect All</source>
+        <translation>ZruÅ¡it vÃœbÄr vÅ¡eho</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ConnectionModel</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="-465"/>
+        <source>Sender</source>
+        <translation>VysÃ­laÄ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Signal</source>
+        <translation>SignÃ¡l</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Receiver</source>
+        <translation>PÅijÃ­maÄ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Slot</source>
+        <translation>ZdÃ­Åka</translation>
+    </message>
+    <message>
+        <location line="+90"/>
+        <source>&lt;sender&gt;</source>
+        <translation>&lt;VysÃ­laÄ&gt;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;signal&gt;</source>
+        <translation>&lt;SignÃ¡l&gt;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;receiver&gt;</source>
+        <translation>&lt;PÅijÃ­maÄ&gt;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;slot&gt;</source>
+        <translation>&lt;ZdÃ­Åka&gt;</translation>
+    </message>
+    <message>
+        <location line="+110"/>
+        <source>Signal and Slot Editor</source>
+        <translation>Editor signÃ¡lÅ¯ a zdÃ­Åek</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>The connection already exists!&lt;br&gt;%1</source>
+        <translation>Toto spojenÃ­ jiÅŸ existuje!&lt;br&gt;%1&lt;/br&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ContainerWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+107"/>
+        <source>Insert Page Before Current Page</source>
+        <translation>VloÅŸit stranu pÅed nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Insert Page After Current Page</source>
+        <translation>VloÅŸit stranu po nynÄjÅ¡Ã­ stranÄ</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Add Subwindow</source>
+        <translation>PÅidat podokno</translation>
+    </message>
+    <message>
+        <location line="-40"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Insert</source>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Subwindow</source>
+        <translation>Podokno</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Page</source>
+        <translation>Strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page %1 of %2</source>
+        <translation>Strana %1 z %2</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::DPI_Chooser</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+52"/>
+        <source> x </source>
+        <extracomment>DPI X/Y separator</extracomment>
+        <translation> x </translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>System (%1 x %2)</source>
+        <extracomment>System resolution</extracomment>
+        <translation>SystÃ©movÃ© rozliÅ¡enÃ­ (%1 x %2)</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>User defined</source>
+        <translation>Stanoveno uÅŸivatelem</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::DesignerPropertyManager</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="+647"/>
+        <location line="+6"/>
+        <source>AlignLeft</source>
+        <translation>Zarovnat k levÃ©mu okraji</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>AlignHCenter</source>
+        <translation>Zarovnat vodorovnÄ na stÅed</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>AlignRight</source>
+        <translation>Zarovnat k pravÃ©mu okraji</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>AlignJustify</source>
+        <translation>Zarovnat do bloku</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>AlignTop</source>
+        <translation>Zarovnat k hornÃ­mu okraji</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <location line="+4"/>
+        <source>AlignVCenter</source>
+        <translation>Zarovnat svisle na stÅed</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>AlignBottom</source>
+        <translation>Zarovnat k dolnÃ­mu okraji</translation>
+    </message>
+    <message>
+        <location line="+565"/>
+        <source>%1, %2</source>
+        <translation>%1, %2</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+6"/>
+        <source>Customized (%n roles)</source>
+        <translation>
+            <numerusform>PÅizpÅ¯sobeno (role)</numerusform>
+            <numerusform>PÅizpÅ¯sobeno (%n role)</numerusform>
+            <numerusform>PÅizpÅ¯sobeno (%n role)</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Inherited</source>
+        <translation>ZdÄdÄno</translation>
+    </message>
+    <message>
+        <location line="+566"/>
+        <source>Horizontal</source>
+        <translation>VodorovnÃœ</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Vertical</source>
+        <translation>SvislÃœ</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Normal Off</source>
+        <translation>ObvyklÃ©, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Normal On</source>
+        <translation>ObvyklÃ©, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Disabled Off</source>
+        <translation>ZakÃ¡zÃ¡no, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Disabled On</source>
+        <translation>ZakÃ¡zÃ¡no, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Active Off</source>
+        <translation>V Äinnosti, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Active On</source>
+        <translation>V Äinnosti, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Selected Off</source>
+        <translation>VybrÃ¡no, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Selected On</source>
+        <translation>VybrÃ¡no, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location line="+21"/>
+        <source>translatable</source>
+        <translation>PÅeklad</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <location line="+21"/>
+        <source>disambiguation</source>
+        <translation>ZabrÃ¡nÄnÃ­ dvojznaÄnosti</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <location line="+21"/>
+        <source>comment</source>
+        <translation>PoznÃ¡mka</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::DeviceProfileDialog</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="+63"/>
+        <source>Device Profiles (*.%1)</source>
+        <translation>Profily zaÅÃ­zenÃ­ (*.%1)</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Default</source>
+        <translation>VÃœchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>Save Profile</source>
+        <translation>UloÅŸit profil</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Save Profile - Error</source>
+        <translation>Chyba pÅi uklÃ¡dÃ¡nÃ­ profilu</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Unable to open the file &apos;%1&apos; for writing: %2</source>
+        <translation>Soubor &apos;%1&apos; se nepodaÅilo otevÅÃ­t pro zÃ¡pis: %2</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Unable to open the file &apos;%1&apos; for reading: %2</source>
+        <translation>Soubor &apos;%1&apos; se nepodaÅilo otevÅÃ­t pro ÄtenÃ­: %2</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>&apos;%1&apos; is not a valid profile: %2</source>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm profilem: %2</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Open profile</source>
+        <translation>OtevÅÃ­t profil</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+6"/>
+        <source>Open Profile - Error</source>
+        <translation>Chyba pÅi otevÃ­rÃ¡nÃ­ profilu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::Dialog</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location/>
+        <source>StringList</source>
+        <translation>Seznam ÅetÄzcÅ¯ znakÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New String</source>
+        <translation>NovÃœ ÅetÄzec znakÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;New</source>
+        <translation>&amp;NovÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Delete String</source>
+        <translation>Smazat ÅetÄzec znakÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Value:</source>
+        <translation>&amp;Hodnota:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move String Up</source>
+        <translation>Posunout ÅetÄzec znakÅ¯ nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Up</source>
+        <translation>Nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move String Down</source>
+        <translation>Posunout ÅetÄzec znakÅ¯ dolÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Down</source>
+        <translation>DolÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::EmbeddedOptionsControl</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="-260"/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Add a profile</source>
+        <translation>PÅidat profil</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Edit the selected profile</source>
+        <translation>Upravit vybranÃœ profil</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Delete the selected profile</source>
+        <translation>Smazat vybranÃœ profil</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Add Profile</source>
+        <translation>PÅidat profil</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>New profile</source>
+        <translation>NovÃœ profil</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Edit Profile</source>
+        <translation>Upravit profil</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Delete Profile</source>
+        <translation>Smazat profil</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Would you like to delete the profile &apos;%1&apos;?</source>
+        <translation>Chcete smazat profil &apos;%1&apos;?</translation>
+    </message>
+    <message>
+        <location line="+55"/>
+        <source>Default</source>
+        <translation>VÃœchozÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FilterWidget</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/>
+        <source>&lt;Filter&gt;</source>
+        <translation>&lt;FIltr&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="+190"/>
+        <source>Resource File Changed</source>
+        <translation>ZdrojovÃœ soubor byl zmÄnÄn</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The file &quot;%1&quot; has changed outside Designer. Do you want to reload it?</source>
+        <translation>ZdrojovÃœ soubor &quot;%1&quot; byl zmÄnÄn mimo program Designer. Chcete jej znovu nahrÃ¡t?</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormLayoutMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+24"/>
+        <source>Add form layout row...</source>
+        <translation>PÅidat ÅÃ¡dek s rozvrÅŸenÃ­m formulÃ¡Åe...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormWindow</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1267"/>
+        <source>Edit contents</source>
+        <translation>Upravit obsah</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>F2</source>
+        <translation>F2</translation>
+    </message>
+    <message>
+        <location line="+841"/>
+        <source>Resize</source>
+        <translation>ZmÄnit velikost</translation>
+    </message>
+    <message>
+        <location line="+218"/>
+        <location line="+15"/>
+        <source>Key Move</source>
+        <translation>Posunout s pomocÃ­ klÃ¡vesnice</translation>
+    </message>
+    <message>
+        <location line="+276"/>
+        <source>Paste error</source>
+        <translation>Chyba pÅi vloÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+445"/>
+        <source>Lay out</source>
+        <translation>RozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+493"/>
+        <location line="+55"/>
+        <source>Drop widget</source>
+        <translation>VloÅŸit prvek</translation>
+    </message>
+    <message numerus="yes">
+        <location line="-1058"/>
+        <source>Paste %n action(s)</source>
+        <translation>
+            <numerusform>VloÅŸit jednu Äinnost</numerusform>
+            <numerusform>VloÅŸit %n Äinnosti</numerusform>
+            <numerusform>VloÅŸit %n Äinnosti</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="-511"/>
+        <source>Insert widget &apos;%1&apos;</source>
+        <translation>VloÅŸit prvek &apos;%1&apos;</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+513"/>
+        <source>Paste %n widget(s)</source>
+        <translation>
+            <numerusform>VloÅŸit jeden prvek</numerusform>
+            <numerusform>VloÅŸit %n prvky</numerusform>
+            <numerusform>VloÅŸit %n prvky</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Paste (%1 widgets, %2 actions)</source>
+        <translation>VloÅŸit (%1 prvky, %2 Äinnosti)</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source>
+        <translation>Prvky nelze vloÅŸit, protoÅŸe se nepodaÅilo nalÃ©zt kontejner, kterÃœ jiÅŸ nemÃ¡ rozvrÅŸenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Break the layout of the container you want to paste into, select this container and then paste again.</source>
+        <translation>ZruÅ¡te, prosÃ­m, rozvrÅŸenÃ­ kontejneru, do kterÃ©ho chcete vklÃ¡dat. Vyberte jej znovu a proveÄte vloÅŸenÃ­ znovu.</translation>
+    </message>
+    <message>
+        <location line="+408"/>
+        <source>Select Ancestor</source>
+        <translation>Vybrat nadÅazenÃœ prvek</translation>
+    </message>
+    <message>
+        <location line="+576"/>
+        <source>A QMainWindow-based form does not contain a central widget.</source>
+        <translation>FormulÃ¡Å zaloÅŸenÃœ na QMainWindow neobsahuje ÃºstÅednÃ­ prvek.</translation>
+    </message>
+    <message>
+        <location line="-797"/>
+        <source>Raise widgets</source>
+        <translation>PÅenÃ©st prvky do popÅedÃ­</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Lower widgets</source>
+        <translation>PÅenÃ©st prvky do pozadÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormWindowBase</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+393"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Delete &apos;%1&apos;</source>
+        <translation>Smazat &apos;%1&apos;</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormWindowManager</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+364"/>
+        <source>Cu&amp;t</source>
+        <translation>Vyj&amp;mout</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cuts the selected widgets and puts them on the clipboard</source>
+        <translation>Vyjme vybranÃ© prvky a odloÅŸÃ­ je do schrÃ¡nky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Copies the selected widgets to the clipboard</source>
+        <translation>ZkopÃ­ruje vybranÃ© prvky do schrÃ¡nky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Pastes the clipboard&apos;s contents</source>
+        <translation>VloÅŸÃ­ obsah schrÃ¡nky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Deletes the selected widgets</source>
+        <translation>SmaÅŸe vybranÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Select &amp;All</source>
+        <translation>Vybrat &amp;vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Selects all widgets</source>
+        <translation>Vybere vÅ¡echny prvky</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Bring to &amp;Front</source>
+        <translation>PÅenÃ©st do &amp;popÅedÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location line="+1"/>
+        <source>Raises the selected widgets</source>
+        <translation>PÅenese vybranÃ© prvky do popÅedÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Send to &amp;Back</source>
+        <translation>PÅenÃ©st do po&amp;zadÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location line="+1"/>
+        <source>Lowers the selected widgets</source>
+        <translation>PÅenese vybranÃ© prvky do pozadÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Adjust &amp;Size</source>
+        <translation>PÅizpÅ¯sobit &amp;velikost</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Adjusts the size of the selected widget</source>
+        <translation>SpoÄÃ­tÃ¡ velikost vybranÃ©ho prvku z rozvrÅŸenÃ­ a pÅizpÅ¯sobÃ­ velikost prvku</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Lay Out &amp;Horizontally</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty &amp;vodorovnÄ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets horizontally</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty vodorovnÄ</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Lay Out &amp;Vertically</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty &amp;svisle</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets vertically</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty svisle</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Lay Out in a &amp;Grid</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty &amp;tabulkovÄ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets in a grid</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty tabulkovÄ</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Lay Out Horizontally in S&amp;plitter</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty vodorovnÄ okolo &amp;dÄlÃ­cÃ­ pÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets horizontally in a splitter</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty vodorovnÄ okolo dÄlÃ­cÃ­ pÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Lay Out Vertically in Sp&amp;litter</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty svisle okolo dÄ&amp;lÃ­cÃ­ pÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets vertically in a splitter</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty svisle okolo dÄlÃ­cÃ­ pÅÃ­Äky</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>&amp;Break Layout</source>
+        <translation>&amp;ZruÅ¡it rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Breaks the selected layout</source>
+        <translation>ZruÅ¡Ã­ vybranÃ© rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>&amp;Preview...</source>
+        <translation>&amp;NÃ¡hled...</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Preview current form</source>
+        <translation>NÃ¡hled nynÄjÅ¡Ã­ho formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Form &amp;Settings...</source>
+        <translation>&amp;NastavenÃ­ formulÃ¡Åe...</translation>
+    </message>
+    <message>
+        <location line="+92"/>
+        <source>Break Layout</source>
+        <translation>ZruÅ¡it rozvrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Adjust Size</source>
+        <translation>PÅizpÅ¯sobit velikost</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Could not create form preview</source>
+        <comment>Title of warning message box</comment>
+        <translation>NepodaÅilo se vytvoÅit nÃ¡hled formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+341"/>
+        <source>Form Settings - %1</source>
+        <translation>NastavenÃ­ formulÃ¡Åe - %1</translation>
+    </message>
+    <message>
+        <location line="-525"/>
+        <source>Removes empty columns and rows</source>
+        <translation>OdstranÃ­ prÃ¡zdnÃ© ÅÃ¡dky a sloupce</translation>
+    </message>
+    <message>
+        <location line="-50"/>
+        <source>Lay Out in a &amp;Form Layout</source>
+        <translation>UspoÅÃ¡dat pÅedmÄty v &amp;rozvrÅŸenÃ­ formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lays out the selected widgets in a form layout</source>
+        <translation>UspoÅÃ¡dÃ¡ vybranÃ© pÅedmÄty v dvousloupcovÃ©m rozvrÅŸenÃ­ formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Si&amp;mplify Grid Layout</source>
+        <translation>Z&amp;jednoduÅ¡it tabulkovÃ© rozvrÅŸenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::FormWindowSettings</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="+193"/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Device Profile: %1</source>
+        <translation>Profil zaÅÃ­zenÃ­: %1</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::GridPanel</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/>
+        <source>Visible</source>
+        <translation>ViditelnÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Snap</source>
+        <translation>Zapadnout</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reset</source>
+        <translation>Nastavit znovu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grid</source>
+        <translation>MÅÃ­ÅŸka</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grid &amp;X</source>
+        <translation>MÅÃ­ÅŸka &amp;x</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grid &amp;Y</source>
+        <translation>MÅÃ­ÅŸka &amp;y</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::GroupBoxTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="+82"/>
+        <source>Change title...</source>
+        <translation>ZmÄnit nÃ¡zev...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::HtmlTextEdit</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="-58"/>
+        <source>Insert HTML entity</source>
+        <translation>VloÅŸit HTML znak</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::IconSelector</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-24"/>
+        <source>The pixmap file &apos;%1&apos; cannot be read.</source>
+        <translation>Soubor s pixmapou &apos;%1&apos; nelze pÅeÄÃ­st.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The file &apos;%1&apos; does not appear to be a valid pixmap file: %2</source>
+        <translation>Soubor &apos;%1&apos; nenÃ­ platnÃœm souborem s pixmapou: %2</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The file &apos;%1&apos; could not be read: %2</source>
+        <translation>Soubor %1 se nepodaÅilo pÅeÄÃ­t: %2</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>Pixmap Read Error</source>
+        <translation>Chyba pÅi ÄtenÃ­ pixmapy</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Normal Off</source>
+        <translation>ObvyklÃ©, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Normal On</source>
+        <translation>ObvyklÃ©, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Disabled Off</source>
+        <translation>ZakÃ¡zÃ¡no, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Disabled On</source>
+        <translation>ZakÃ¡zÃ¡no, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Active Off</source>
+        <translation>V Äinnosti, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Active On</source>
+        <translation>V Äinnosti, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Selected Off</source>
+        <translation>VybrÃ¡no, vypnuto</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Selected On</source>
+        <translation>VybrÃ¡no, zapnuto</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Choose Resource...</source>
+        <translation>Vybrat zdroj...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Choose File...</source>
+        <translation>Vybrat soubor...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reset</source>
+        <translation>Nastavit znovu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reset All</source>
+        <translation>Nastavit znovu vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="-85"/>
+        <source>Choose a Pixmap</source>
+        <translation>Vybrat pixmapu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ItemListEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+358"/>
+        <source>Properties &amp;&lt;&lt;</source>
+        <translation>Vlastnosti &amp;&lt;&lt;</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/>
+        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+2"/>
+        <source>Properties &amp;&gt;&gt;</source>
+        <translation>Vlastnosti &amp;&gt;&gt;</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Items List</source>
+        <translation>Seznam prvkÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New Item</source>
+        <translation>NovÃœ prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;New</source>
+        <translation>&amp;NovÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Delete Item</source>
+        <translation>Smazat prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Up</source>
+        <translation>Posunout prvek nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>U</source>
+        <translation>U</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Down</source>
+        <translation>Posunout prvek dolÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>D</source>
+        <translation>D</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::LabelTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="+85"/>
+        <source>Change rich text...</source>
+        <translation>ZmÄnit upravovatelnÃœ text...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change plain text...</source>
+        <translation>ZmÄnit prostÃœ text...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::LanguageResourceDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-258"/>
+        <source>Choose Resource</source>
+        <translation>Vybrat zdroj</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::LineEditTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="+80"/>
+        <source>Change text...</source>
+        <translation>ZmÄnit text...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ListWidgetEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="+101"/>
+        <source>Edit List Widget</source>
+        <translation>Upravit seznam prvkÅ¯</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Edit Combobox</source>
+        <translation>Upravit skupinovou krabici</translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <source>New Item</source>
+        <translation>NovÃœ prvek</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ListWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="+67"/>
+        <source>Edit Items...</source>
+        <translation>Upravit prvky...</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Change List Contents</source>
+        <translation>ZmÄnit obsah seznamu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+118"/>
+        <source>Next Subwindow</source>
+        <translation>DalÅ¡Ã­ podokno</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Previous Subwindow</source>
+        <translation>PÅedchozÃ­ podokno</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tile</source>
+        <translation>UspoÅÃ¡dat jedno vedle druhÃ©ho</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cascade</source>
+        <translation>PÅekrÃœvat</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::MenuTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="+56"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::MorphMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+264"/>
+        <source>Morph into</source>
+        <translation>PÅemÄnit prvek na</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::NewActionDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/>
+        <source>New Action...</source>
+        <translation>NovÃ¡ Äinnost...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Text:</source>
+        <translation>&amp;Text:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Shortcut:</source>
+        <translation>KlÃ¡vesovÃ¡ zkratka:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Checkable:</source>
+        <translation>ZaÅ¡krtnutelnÃ¡:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>ToolTip:</source>
+        <translation>Rada k nÃ¡stroji:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Icon:</source>
+        <translation>&amp;Ikona:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Object &amp;name:</source>
+        <translation>&amp;NÃ¡zev pÅedmÄtu:</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::NewDynamicPropertyDialog</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+134"/>
+        <source>Set Property Name</source>
+        <translation>Nastavit nÃ¡zev vlastnosti</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>The current object already has a property named &apos;%1&apos;.
+Please select another, unique one.</source>
+        <translation>nynÄjÅ¡Ã­ pÅedmÄt jiÅŸ mÃ¡ vlastnost s nÃ¡zvem &apos;%1&apos;.
+Zvolte, prosÃ­m, jinÃœ, jedineÄnÃœ nÃ¡zev.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/>
+        <source>Create Dynamic Property</source>
+        <translation>VytvoÅit dynamickou vlastnost</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Property Name</source>
+        <translation>NÃ¡zev vlastnosti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Property Type</source>
+        <translation>typ vlastnosti</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+4"/>
+        <source>The &apos;_q_&apos; prefix is reserved for the Qt library.
+Please select another name.</source>
+        <translation>PÅedpona &apos;_q_&apos; je pouÅŸÃ­vÃ¡na knihovnou Qt pro vnitÅnÃ­ ÃºÄely.
+Zvolte, prosÃ­m, jinÃœ nÃ¡zev.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/>
+        <source>horizontalSpacer</source>
+        <translation>VodorovnÃœ vymezovaÄ</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::NewFormWidget</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="+104"/>
+        <source>Default size</source>
+        <translation>VÃœchozÃ­ velikost</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>QVGA portrait (240x320)</source>
+        <translation>QVGA formÃ¡t na vÃœÅ¡ku (240x320)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>QVGA landscape (320x240)</source>
+        <translation>QVGA formÃ¡t na Å¡Ã­Åku (320x240)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>VGA portrait (480x640)</source>
+        <translation>VGA formÃ¡t na vÃœÅ¡ku (480x640)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>VGA landscape (640x480)</source>
+        <translation>VGA formÃ¡t na Å¡Ã­Åku (640x480)</translation>
+    </message>
+    <message>
+        <location line="+66"/>
+        <source>Widgets</source>
+        <extracomment>New Form Dialog Categories</extracomment>
+        <translation>Prvky</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Custom Widgets</source>
+        <translation>UÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Error loading form</source>
+        <translation>FormulÃ¡Å se nepodaÅilo nahrÃ¡t</translation>
+    </message>
+    <message>
+        <location line="+244"/>
+        <source>Unable to open the form template file &apos;%1&apos;: %2</source>
+        <translation>NepodaÅilo se otevÅÃ­t pÅedlohu s formulÃ¡Åem &apos;%1&apos;: %2</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>Internal error: No template selected.</source>
+        <translation>VnitÅnÃ­ chyba: NenÃ­ vybrÃ¡na ÅŸÃ¡dnÃ¡ pÅedloha.</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Choose a template for a preview</source>
+        <translation>Vyberte pÅedlohu pro nÃ¡hled</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Embedded Design</source>
+        <translation>VloÅŸenÃœ nÃ¡vrh</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Device:</source>
+        <translation>ZaÅÃ­zenÃ­:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Screen Size:</source>
+        <translation>Velikost obrazovky:</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::NewPromotedClassPanel</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+92"/>
+        <source>Add</source>
+        <translation>PÅidat</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>New Promoted Class</source>
+        <translation>NovÃ¡ uÅŸivatelsky stanovenÃ¡ tÅÃ­da</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Base class name:</source>
+        <translation>NÃ¡zev zÃ¡kladnÃ­ tÅÃ­dy:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Promoted class name:</source>
+        <translation>NÃ¡zev uÅŸivatelsky stanovenÃ© tÅÃ­dy:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Header file:</source>
+        <translation>HlaviÄkovÃœ soubor:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Global include</source>
+        <translation>CelkovÃœ hlaviÄkovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Reset</source>
+        <translation>Nastavit znovu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ObjectInspector</name>
+    <message>
+        <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+316"/>
+        <source>Change Current Page</source>
+        <translation>ZmÄnit nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+    <message>
+        <location line="+438"/>
+        <source>&amp;Find in Text...</source>
+        <translation>&amp;NajÃ­t v textu...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name>
+    <message>
+        <source>Change Current Page</source>
+        <translation type="obsolete">ZmÄnit nynÄjÅ¡Ã­ stranu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::OrderDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+109"/>
+        <source>Index %1 (%2)</source>
+        <translation>Poloha %1 (%2)</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/>
+        <source>Change Page Order</source>
+        <translation>ZmÄnit poÅadÃ­ stran</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Page Order</source>
+        <translation>PoÅadÃ­ stran</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move page up</source>
+        <translation>Posunout stranu nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move page down</source>
+        <translation>Posunout stranu dolÅ¯</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+3"/>
+        <source>%1 %2</source>
+        <translation>%1 %2</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PaletteEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/>
+        <source>Edit Palette</source>
+        <translation>Upravit paletu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Tune Palette</source>
+        <translation>Vyladit paletu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Show Details</source>
+        <translation>UkÃ¡zat podrobnosti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Compute Details</source>
+        <translation>SpoÄÃ­tat podrobnosti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Quick</source>
+        <translation>JednoduchÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Preview</source>
+        <translation>NÃ¡hled</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Disabled</source>
+        <translation>ZakÃ¡zÃ¡no</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Inactive</source>
+        <translation>NeÄinnÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Active</source>
+        <translation>V Äinnosti</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PaletteEditorButton</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="+57"/>
+        <source>Change Palette</source>
+        <translation>ZmÄnit paletu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PaletteModel</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="+374"/>
+        <source>Color Role</source>
+        <translation>BarevnÃ© kolo</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Active</source>
+        <translation>V Äinnosti</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Inactive</source>
+        <translation>NeÄinnÃœ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disabled</source>
+        <translation>ZakÃ¡zÃ¡no</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PixmapEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-1539"/>
+        <source>Copy Path</source>
+        <translation>KopÃ­rovat cestu</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Paste Path</source>
+        <translation>VloÅŸit cestu</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Choose Resource...</source>
+        <translation>Vybrat zdroj...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Choose File...</source>
+        <translation>Vybrat soubor...</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <location line="+16"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PlainTextEditorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="+65"/>
+        <source>Edit text</source>
+        <translation>Upravit text</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PluginDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="+72"/>
+        <source>Components</source>
+        <translation>SouÄÃ¡sti</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Plugin Information</source>
+        <translation>Informace o pÅÃ­davnÃœch modulech</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Refresh</source>
+        <translation>Obnovit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Scan for newly installed custom widget plugins.</source>
+        <translation>Prohledat kvÅ¯li novÄ nainstalovanÃœm pÅÃ­davnÃœm modulÅ¯m s uÅŸivatelsky stanovenÃœmi prvky.</translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>Qt Designer couldn&apos;t find any plugins</source>
+        <translation>Programu Qt Designer se nepodaÅilo najÃ­t jakÃ©koli pÅÃ­davnÃ© moduly</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Qt Designer found the following plugins</source>
+        <translation>Programu Qt Designer se podaÅilo najÃ­t nÃ¡sledujÃ­cÃ­ pÅÃ­davnÃ© moduly</translation>
+    </message>
+    <message>
+        <location line="+55"/>
+        <source>New custom widget plugins have been found.</source>
+        <translation>Byly nalezeny novÃ© pÅÃ­davnÃ© moduly s uÅŸivatelsky stanovenÃœmi prvky.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewActionGroup</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="+95"/>
+        <source>%1 Style</source>
+        <translation>%1-Styl</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewConfigurationWidget</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="+139"/>
+        <source>Default</source>
+        <translation>VÃœchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Browse...</source>
+        <translation>ProchÃ¡zet...</translation>
+    </message>
+    <message>
+        <location line="+118"/>
+        <source>Load Custom Device Skin</source>
+        <translation>NahrÃ¡t uÅŸivatelsky stanovenÃœ vzhled zaÅÃ­zenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>All QVFB Skins (*.%1)</source>
+        <translation>VÅ¡echny vzhledy QVFB (*.%1)</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>%1 - Duplicate Skin</source>
+        <translation>%1 - Zdvojit vzhled</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The skin &apos;%1&apos; already exists.</source>
+        <translation>Vzhled &apos;%1&apos; jiÅŸ existuje.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>%1 - Error</source>
+        <translation>%1 - Chyba</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>%1 is not a valid skin directory:
+%2</source>
+        <translation>%1 nenÃ­ platnÃœm adresÃ¡Åem pro vzhled:
+%2</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name>
+    <message>
+        <source>Load Custom Device Skin</source>
+        <translation type="obsolete">NahrÃ¡t uÅŸivatelsky stanovenÃœ vzhled zaÅÃ­zenÃ­</translation>
+    </message>
+    <message>
+        <source>All QVFB Skins (*.%1)</source>
+        <translation type="obsolete">VÅ¡echny vzhledy QVFB (*.%1)</translation>
+    </message>
+    <message>
+        <source>%1 - Duplicate Skin</source>
+        <translation type="obsolete">%1 - Vzhled jiÅŸ existuje</translation>
+    </message>
+    <message>
+        <source>The skin &apos;%1&apos; already exists.</source>
+        <translation type="obsolete">Vzhled &apos;%1&apos; jiÅŸ existuje.</translation>
+    </message>
+    <message>
+        <source>%1 - Error</source>
+        <translation type="obsolete">%1 - Chyba</translation>
+    </message>
+    <message>
+        <source>%1 is not a valid skin directory:
+%2</source>
+        <translation type="obsolete">%1 nenÃ­ platnÃœm adresÃ¡Åem vzhledu:
+%2</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewDeviceSkin</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="+259"/>
+        <source>&amp;Portrait</source>
+        <translation>FormÃ¡t na &amp;vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Landscape (&amp;CCW)</source>
+        <extracomment>Rotate form preview counter-clockwise</extracomment>
+        <translation>FormÃ¡t na Å¡Ã­Åku (&amp;proti smÄru otÃ¡ÄenÃ­ hodinovÃœch ruÄiÄek)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Landscape (CW)</source>
+        <extracomment>Rotate form preview clockwise</extracomment>
+        <translation>FormÃ¡t na Å¡Ã­Åku (po smÄru &amp;otÃ¡ÄenÃ­ hodinovÃœch ruÄiÄek)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewManager</name>
+    <message>
+        <location line="+426"/>
+        <source>%1 - [Preview]</source>
+        <translation>%1 - [NÃ¡hled]</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewMdiArea</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="+72"/>
+        <source>The moose in the noose
+ate the goose who was loose.</source>
+        <extracomment>Palette editor background</extracomment>
+        <translation>Los v chomoutu snÄdl husu,
+kterÃ¡ byla volnÄ puÅ¡tÄnÃ¡.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PreviewWidget</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/>
+        <source>Preview Window</source>
+        <translation>NÃ¡hledovÃ© okno</translation>
+    </message>
+    <message>
+        <location/>
+        <source>LineEdit</source>
+        <translation>Ãprava ÄÃ¡ry</translation>
+    </message>
+    <message>
+        <location/>
+        <source>ComboBox</source>
+        <translation>SkupinovÃ¡ krabice</translation>
+    </message>
+    <message>
+        <location/>
+        <source>PushButton</source>
+        <translation>TlaÄÃ­tko na postrÄenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>ButtonGroup2</source>
+        <translation>Skupina tlaÄÃ­tek 2</translation>
+    </message>
+    <message>
+        <location/>
+        <source>CheckBox1</source>
+        <translation>ZaÅ¡krtnutelnÃ© polÃ­Äko 1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>CheckBox2</source>
+        <translation>ZaÅ¡krtnutelnÃ© polÃ­Äko 2</translation>
+    </message>
+    <message>
+        <location/>
+        <source>ButtonGroup</source>
+        <translation>Skupina tlaÄÃ­tek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>RadioButton1</source>
+        <translation>RozhlasovÃ© tlaÄÃ­tko 1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>RadioButton2</source>
+        <translation>RozhlasovÃ© tlaÄÃ­tko 2</translation>
+    </message>
+    <message>
+        <location/>
+        <source>RadioButton3</source>
+        <translation>RozhlasovÃ© tlaÄÃ­tko 3</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PromotionModel</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+17"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Header file</source>
+        <translation>HlaviÄkovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Global include</source>
+        <translation>CelkovÃœ hlaviÄkovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Usage</source>
+        <translation>PouÅŸitÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PromotionTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="+85"/>
+        <source>Promoted widgets...</source>
+        <translation>UÅŸivatelsky stanovenÃ© prvky...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Promote to ...</source>
+        <translation>Stanovit jako zÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenou tÅÃ­du...</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Promote to</source>
+        <translation>Stanovit jako zÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenou tÅÃ­du</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Demote to %1</source>
+        <translation>Odstranit zÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenou tÅÃ­du a pÅemÄnit na %1</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Change signals/slots...</source>
+        <translation>ZmÄnit signÃ¡ly/zdÃ­Åky...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PropertyEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+183"/>
+        <source>Add Dynamic Property...</source>
+        <translation>PÅidat dynamickou vlastnost...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Remove Dynamic Property</source>
+        <translation>Odstranit dynamickou vlastnost</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Tree View</source>
+        <translation>StromovÃœ pohled</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Drop Down Button View</source>
+        <translation>PodrobnÃœ pohled</translation>
+    </message>
+    <message>
+        <location line="+597"/>
+        <source>Object: %1
+Class: %2</source>
+        <translation>PÅedmÄt: %1
+TÅÃ­da: %2</translation>
+    </message>
+    <message>
+        <location line="-600"/>
+        <source>Sorting</source>
+        <translation>TÅÃ­dÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Color Groups</source>
+        <translation>BarevnÃ© zdÅ¯raznÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+66"/>
+        <source>Configure Property Editor</source>
+        <translation>Nastavit editor vlastnostÃ­</translation>
+    </message>
+    <message>
+        <location line="-14"/>
+        <source>String...</source>
+        <translation>ÅetÄzec znakÅ¯...</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Bool...</source>
+        <translation>BooleÃ¡nskÃ¡ hodnota...</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Other...</source>
+        <translation>JinÃœ typ...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::PropertyLineEdit</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="+88"/>
+        <source>Insert line break</source>
+        <translation>VloÅŸit zalomenÃ­ ÅÃ¡dku</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::QDesignerPromotionDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+85"/>
+        <source>Promoted Widgets</source>
+        <translation>ZÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Promoted Classes</source>
+        <translation>ZÃ¡stupnÃœ symbol pro uÅŸivatelsky stanovenÃ© tÅÃ­dy</translation>
+    </message>
+    <message>
+        <location line="+60"/>
+        <source>Promote</source>
+        <translation>PouÅŸÃ­vat</translation>
+    </message>
+    <message>
+        <location line="+169"/>
+        <source>%1 - Error</source>
+        <translation>%1 - Chyba</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <source>Change signals/slots...</source>
+        <translation>ZmÄnit signÃ¡ly/zdÃ­Åky...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::QDesignerResource</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+277"/>
+        <source>Loading qrc file</source>
+        <translation>NahrÃ¡vÃ¡ se zdrojovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The specified qrc file &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;could not be found. Do you want to update the file location?&lt;/p&gt;</source>
+        <translation>ZadanÃœ zdrojovÃœ soubor &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt; se nepodaÅilo najÃ­t. Chcete zadat novou cestu k umÃ­stÄnÃ­ souboru?&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>New location for %1</source>
+        <translation>NovÃ© umÃ­stÄnÃ­ %1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Resource files (*.qrc)</source>
+        <translation>ZdrojovÃ© soubory (*.qrc)</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::QDesignerTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+68"/>
+        <source>Change objectName...</source>
+        <translation>ZmÄnit nÃ¡zev pÅedmÄtu...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change toolTip...</source>
+        <translation>ZmÄnit radu k nÃ¡stroji...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change whatsThis...</source>
+        <translation>ZmÄnit &quot;A co je toto&quot;...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change styleSheet...</source>
+        <translation>ZmÄnit pÅedlohovÃœ list...</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Create Menu Bar</source>
+        <translation>VytvoÅit nabÃ­dkovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Tool Bar</source>
+        <translation>PÅidat nÃ¡strojovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Create Status Bar</source>
+        <translation>VytvoÅit stavovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Remove Status Bar</source>
+        <translation>Odstranit stavovÃœ pruh</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change script...</source>
+        <translation>ZmÄnit skript...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change signals/slots...</source>
+        <translation>ZmÄnit signÃ¡ly/zdÃ­Åky...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Go to slot...</source>
+        <translation>JÃ­t na zdÃ­Åku...</translation>
+    </message>
+    <message>
+        <location line="+413"/>
+        <source>no signals available</source>
+        <translation>Nejsou dostupnÃ© ÅŸÃ¡dnÃ© signÃ¡ly</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+67"/>
+        <source>Set size constraint on %n widget(s)</source>
+        <translation>
+            <numerusform>Nastavit omezenÃ­ velikosti u jednoho prvku</numerusform>
+            <numerusform>Nastavit omezenÃ­ velikosti u %n prvkÅ¯</numerusform>
+            <numerusform>Nastavit omezenÃ­ velikosti u %n prvkÅ¯</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="-477"/>
+        <source>Size Constraints</source>
+        <translation>OmezenÃ­ velikosti</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Set Minimum Width</source>
+        <translation>Nastavit nejmenÅ¡Ã­ Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Set Minimum Height</source>
+        <translation>Nastavit nejmenÅ¡Ã­ vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Set Minimum Size</source>
+        <translation>Nastavit nejmenÅ¡Ã­ velikost</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Set Maximum Width</source>
+        <translation>Nastavit nejvÄtÅ¡Ã­ Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Set Maximum Height</source>
+        <translation>Nastavit nejvÄtÅ¡Ã­ vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Set Maximum Size</source>
+        <translation>Nastavit nejvÄtÅ¡Ã­ velikost</translation>
+    </message>
+    <message>
+        <location line="+235"/>
+        <source>Edit ToolTip</source>
+        <translation>Upravit radu k nÃ¡stroji</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Edit WhatsThis</source>
+        <translation>Upravit &quot;A co je toto&quot;</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::QDesignerWidgetBox</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="+123"/>
+        <location line="+13"/>
+        <source>Unexpected element &lt;%1&gt;</source>
+        <translation>NeplatnÃœ prvek &lt;%1&gt;</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4
+%5</source>
+        <translation>KÃ³d XML pro prvek %3 obsahuje chybu na ÅÃ¡dku %1, sloupec %2:%4:
+%5</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The XML code specified for the widget %1 does not contain any widget elements.
+%2</source>
+        <translation>KÃ³d XML pro prvek %1 neobsahuje prvky.
+%2</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="+349"/>
+        <source>An error has been encountered at line %1 of %2: %3</source>
+        <translation>Chyba na ÅÃ¡dku %1 z %2: %3</translation>
+    </message>
+    <message>
+        <location line="+139"/>
+        <source>Unexpected element &lt;%1&gt; encountered when parsing for &lt;widget&gt; or &lt;ui&gt;</source>
+        <translation>Na mÃ­stÄ oÄekÃ¡vanÃ©ho &lt;prvek&gt;- nebo prvku &lt;ui&gt; byl nalezen &lt;%1&gt;</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unexpected end of file encountered when parsing widgets.</source>
+        <translation>PÅi ÄtenÃ­ nastavenÃ­ krabice s prvky se vyskytl pÅedÄasnÃœ konec souboru.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>A widget element could not be found.</source>
+        <translation>NepodaÅilo se najÃ­t prvek.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::QtGradientStopsController</name>
+    <message>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="+173"/>
+        <source>H</source>
+        <translation>H</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>S</source>
+        <translation>S</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>V</source>
+        <translation>V</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+4"/>
+        <source>Hue</source>
+        <translation>BarevnÃœ odstÃ­n</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Sat</source>
+        <translation>Sytost</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Val</source>
+        <translation>Hodnota</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Saturation</source>
+        <translation>Sytost</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Value</source>
+        <translation>Hodnota</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>R</source>
+        <translation>R</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>G</source>
+        <translation>G</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B</source>
+        <translation>B</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Red</source>
+        <translation>ÄervenÃ¡</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Green</source>
+        <translation>ZelenÃ¡</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Blue</source>
+        <translation>ModrÃ¡</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::RichTextEditorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+436"/>
+        <source>Edit text</source>
+        <translation>Upravit text</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>&amp;OK</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Rich Text</source>
+        <translation>UpravovatelnÃœ text</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Source</source>
+        <translation>Zdroj</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::RichTextEditorToolBar</name>
+    <message>
+        <location line="-294"/>
+        <source>Bold</source>
+        <translation>TuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>CTRL+B</source>
+        <translation>CTRL+F</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Italic</source>
+        <translation>KurzÃ­va</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>CTRL+I</source>
+        <translation>CTRL+K</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Underline</source>
+        <translation>PodtrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>CTRL+U</source>
+        <translation>CTRL+U</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Left Align</source>
+        <translation>Zarovnat k levÃ©mu okraji</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Center</source>
+        <translation>Zarovnat na stÅed</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Right Align</source>
+        <translation>Zarovnat k pravÃ©mu okraji</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Justify</source>
+        <translation>Zarovnat do bloku</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Superscript</source>
+        <translation>HornÃ­ index</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Subscript</source>
+        <translation>DolnÃ­ index</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Insert &amp;Link</source>
+        <translation>VloÅŸit &amp;odkaz</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Insert &amp;Image</source>
+        <translation>VloÅŸit &amp;obrÃ¡zek</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ScriptDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="+66"/>
+        <source>Edit script</source>
+        <translation>Upravit skript</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>Syntax error</source>
+        <translation>Chyba ve skladbÄ</translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <source>&lt;html&gt;Enter a Qt Script snippet to be executed while loading the form.&lt;br&gt;The widget and its children are accessible via the variables &lt;i&gt;widget&lt;/i&gt; and &lt;i&gt;childWidgets&lt;/i&gt;, respectively.</source>
+        <translation>&lt;html&gt;Zadejte kousek Qt skriptu k provedenÃ­ v prÅ¯bÄhu nahrÃ¡vÃ¡nÃ­ formulÃ¡Åe.&lt;br&gt;Prvek a jemu podÅÃ­zenÃ© prvky jsou pÅÃ­stupnÃ© prostÅednictvÃ­m promÄnnÃœch &lt;i&gt;widget&lt;/i&gt; und &lt;i&gt;childWidgets&lt;/i&gt;.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ScriptErrorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+27"/>
+        <source>Script errors</source>
+        <translation>Chyby ve skriptu</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::SignalSlotDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+199"/>
+        <source>There is already a slot with the signature &apos;%1&apos;.</source>
+        <translation>JiÅŸ existuje zdÃ­Åka s podpisem &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>There is already a signal with the signature &apos;%1&apos;.</source>
+        <translation>JiÅŸ existuje signÃ¡l s podpisem &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>%1 - Duplicate Signature</source>
+        <translation>%1 - Podpis jiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <location line="+76"/>
+        <source>Signals/Slots of %1</source>
+        <translation>SignÃ¡ly/ZdÃ­Åky od %1</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::SignalSlotEditorPlugin</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="+72"/>
+        <source>Edit Signals/Slots</source>
+        <translation>Upravit signÃ¡ly/zdÃ­Åky</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>F4</source>
+        <translation>F4</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::SignalSlotEditorTool</name>
+    <message>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="+58"/>
+        <source>Edit Signals/Slots</source>
+        <translation>Upravit signÃ¡ly/zdÃ­Åky</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::StatusBarTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="+81"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::StringListEditorButton</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="+56"/>
+        <source>Change String List</source>
+        <translation>ZmÄnit seznamy s ÅetÄzci znakÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::StyleSheetEditorDialog</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="+97"/>
+        <source>Edit Style Sheet</source>
+        <translation>Upravit pÅedlohovÃœ list</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <location line="+280"/>
+        <source>Valid Style Sheet</source>
+        <translation>PlatnÃœ pÅedlohovÃœ list</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid Style Sheet</source>
+        <translation>NeplatnÃœ pÅedlohovÃœ list</translation>
+    </message>
+    <message>
+        <location line="-281"/>
+        <source>Add Resource...</source>
+        <translation>PÅidat zdroj...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Gradient...</source>
+        <translation>PÅidat pÅechod...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Color...</source>
+        <translation>PÅidat barvu...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Font...</source>
+        <translation>PÅidat pÃ­smo...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TabOrderEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="+363"/>
+        <source>Start from Here</source>
+        <translation>ZaÄÃ­t znovu odtud</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Restart</source>
+        <translation>ZaÄÃ­t znovu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Tab Order List...</source>
+        <translation>Seznam s poÅadÃ­m tabulÃ¡torÅ¯...</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Tab Order List</source>
+        <translation>Seznam s poÅadÃ­m tabulÃ¡torÅ¯</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tab Order</source>
+        <translation>PoÅadÃ­ tabulÃ¡torÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TabOrderEditorPlugin</name>
+    <message>
+        <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="+73"/>
+        <source>Edit Tab Order</source>
+        <translation>Upravit poÅadÃ­ tabulÃ¡torÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TabOrderEditorTool</name>
+    <message>
+        <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="+57"/>
+        <source>Edit Tab Order</source>
+        <translation>Upravit poÅadÃ­ tabulÃ¡torÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TableWidgetEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+67"/>
+        <source>New Column</source>
+        <translation>NovÃœ sloupec</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>New Row</source>
+        <translation>NovÃœ ÅÃ¡dek</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&amp;Columns</source>
+        <translation>&amp;Sloupce</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Rows</source>
+        <translation>&amp;ÅÃ¡dky</translation>
+    </message>
+    <message>
+        <location line="+137"/>
+        <source>Properties &amp;&lt;&lt;</source>
+        <translation>Vlastnosti &amp;&lt;&lt;</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/>
+        <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+2"/>
+        <source>Properties &amp;&gt;&gt;</source>
+        <translation>Vlastnosti &amp;&gt;&gt;</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Edit Table Widget</source>
+        <translation>Upravit prvek s tabulkou</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Items</source>
+        <translation>&amp;Prvky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Table Items</source>
+        <translation>Prvky tabulek</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TableWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="+64"/>
+        <source>Edit Items...</source>
+        <translation>Upravit prvky...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TemplateOptionsWidget</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="-18"/>
+        <source>Pick a directory to save templates in</source>
+        <translation>Vyberte adresÃ¡Å pro uklÃ¡dÃ¡nÃ­ pÅedloh</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Additional Template Paths</source>
+        <translation>DodateÄnÃ© adresÃ¡Åe pro pÅedlohy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TextEditTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="+59"/>
+        <source>Change HTML...</source>
+        <translation>ZmÄnit HTML...</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>Edit HTML</source>
+        <translation>Upravit HTML</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Edit Text</source>
+        <translation>Upravit text</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Change Plain Text...</source>
+        <translation>ZmÄnit prostÃœ text...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TextEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-204"/>
+        <source>Choose Resource...</source>
+        <translation>Vybrat zdroj...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Choose File...</source>
+        <translation>Vybrat soubor...</translation>
+    </message>
+    <message>
+        <location line="+123"/>
+        <source>Choose a File</source>
+        <translation>Vybrat soubor</translation>
+    </message>
+    <message>
+        <location line="-118"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ToolBarEventFilter</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="+234"/>
+        <source>Insert Separator</source>
+        <translation>VloÅŸit oddÄlovaÄ</translation>
+    </message>
+    <message>
+        <location line="-65"/>
+        <source>Remove action &apos;%1&apos;</source>
+        <translation>Odstranit Äinnost &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Remove Toolbar &apos;%1&apos;</source>
+        <translation>Odstranit nÃ¡strojovÃœ pruh &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="-28"/>
+        <source>Insert Separator before &apos;%1&apos;</source>
+        <translation>VloÅŸit oddÄlovaÄ pÅed &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Append Separator</source>
+        <translation>PÅipojit oddÄlovaÄ</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TreeWidgetEditor</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+76"/>
+        <source>&amp;Columns</source>
+        <translation>&amp;Sloupce</translation>
+    </message>
+    <message>
+        <location line="+69"/>
+        <source>Per column properties</source>
+        <translation>Vlastnosti sloupcÅ¯</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Common properties</source>
+        <translation>SpoleÄnÃ© vlastnosti</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+53"/>
+        <source>New Item</source>
+        <translation>NovÃœ prvek</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+194"/>
+        <source>Properties &amp;&lt;&lt;</source>
+        <translation>Vlastnosti &amp;&lt;&lt;</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+2"/>
+        <source>Properties &amp;&gt;&gt;</source>
+        <translation>Vlastnosti &amp;&gt;&gt;</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="-327"/>
+        <source>New Column</source>
+        <translation>NovÃœ sloupec</translation>
+    </message>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/>
+        <source>Edit Tree Widget</source>
+        <translation>Upravit stromovÃœ prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Items</source>
+        <translation>&amp;Prvky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Tree Items</source>
+        <translation>StromovÃ© prvky</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+150"/>
+        <source>New Subitem</source>
+        <translation>NovÃœ podÅÃ­zenÃœ prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>New &amp;Subitem</source>
+        <translation>NovÃœ po&amp;dÅÃ­zenÃœ prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Delete Item</source>
+        <translation>Smazat prvek</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Left (before Parent Item)</source>
+        <translation>Posunout prvek doleva (pÅed nadÅÃ­zenÃœ prvek)</translation>
+    </message>
+    <message>
+        <location/>
+        <source>L</source>
+        <translation>L</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source>
+        <translation>Posunout prvek doprava (jako prvnÃ­ podÅÃ­zenÃœ prvek dalÅ¡Ã­ho rovnocennÃ©ho prvku)</translation>
+    </message>
+    <message>
+        <location/>
+        <source>R</source>
+        <translation>R</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Up</source>
+        <translation>Posunout prvek nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>U</source>
+        <translation>U</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move Item Down</source>
+        <translation>Posunout prvek dolÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>D</source>
+        <translation>D</translation>
+    </message>
+    <message>
+        <location/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;New</source>
+        <translation>&amp;NovÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::TreeWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="+63"/>
+        <source>Edit Items...</source>
+        <translation>Upravit prvky...</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WidgetBox</name>
+    <message>
+        <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="+115"/>
+        <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source>
+        <translation>UpozornÄnÃ­: VytvoÅenÃ­ prvku v krabici s prvky se nezdaÅilo. Mohlo by to bÃœt zapÅÃ­ÄinÄno chybnÃœm XML kÃ³dem uÅŸivatelsky stanovenÃ©ho prvku.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WidgetBoxTreeWidget</name>
+    <message>
+        <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="-268"/>
+        <source>Scratchpad</source>
+        <translation>SkladovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+370"/>
+        <source>Custom Widgets</source>
+        <translation>UÅŸivatelsky stanovenÃ© prvky</translation>
+    </message>
+    <message>
+        <location line="+263"/>
+        <source>Expand all</source>
+        <translation>RozdÄlat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Collapse all</source>
+        <translation>SloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>List View</source>
+        <translation>Pohled se seznamem</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Icon View</source>
+        <translation>Pohled s ikonami</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Edit name</source>
+        <translation>Upravit nÃ¡zev</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WidgetDataBase</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="-411"/>
+        <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source>
+        <translation>Byl nalezen pÅÃ­davnÃœ modul, kterÃœ obsahuje uÅŸivatelsky stanovenÃœ prvek, jehoÅŸ nÃ¡zev pro tÅÃ­du (%1) odpovÃ­dÃ¡ stÃ¡vajÃ­cÃ­ tÅÃ­dÄ.</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WidgetEditorTool</name>
+    <message>
+        <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="+67"/>
+        <source>Edit Widgets</source>
+        <translation>Upravit prvky</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WidgetFactory</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="+263"/>
+        <source>The custom widget factory registered for widgets of class %1 returned 0.</source>
+        <translation>ZÃ¡vod pro uÅŸivatelsky stanovenÃ© prvky tÅÃ­dy %1 vrÃ¡til zpÄt 0.</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source>
+        <translation>PÅi vytvÃ¡ÅenÃ­ prvku byly zjiÅ¡tÄny odporujÃ­cÃ­ si nÃ¡zvy tÅÃ­d: ZÃ¡vod pro uÅŸivatelsky stanovenÃ© prvky tÅÃ­dy %1 vrÃ¡til zpÄt prvek tÅÃ­dy %2.</translation>
+    </message>
+    <message>
+        <location line="+189"/>
+        <source>The current page of the container &apos;%1&apos; (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source>
+        <translation>PÅi vytvÃ¡ÅenÃ­ rozvrÅŸenÃ­ se nepodaÅilo urÄit nynÄjÅ¡Ã­ strÃ¡nku kontejneru &apos;%1&apos; (%2). To naznaÄuje jistou nesrovnalost v souboru s rozhranÃ­m; pravdÄpodobnÄ bylo rozvrÅŸenÃ­ postaveno pÅÃ­mo na prvku kontejneru.</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has an unmanaged layout of type %3.
+This indicates an inconsistency in the ui-file.</source>
+        <translation>Pokus o pÅidÃ¡nÃ­ rozvrÅŸenÃ­ na prvek &apos;%1&apos; (%2), kterÃœ jiÅŸ mÃ¡ nespravovanÃ© rozvrÅŸenÃ­ typu %3. To naznaÄuje jistou nesrovnalost v souboru s rozhranÃ­m.</translation>
+    </message>
+    <message>
+        <location line="+211"/>
+        <source>Cannot create style &apos;%1&apos;.</source>
+        <translation>NepodaÅilo se vytvoÅit styl &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="-354"/>
+        <source>%1 Widget</source>
+        <translation>%1 prvek</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name>
+    <message>
+        <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="-49"/>
+        <source>Next</source>
+        <translation>DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Back</source>
+        <translation>ZpÄt</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ZoomMenu</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="+84"/>
+        <source>%1 %</source>
+        <extracomment>Zoom factor</extracomment>
+        <translation>%1 %</translation>
+    </message>
+</context>
+<context>
+    <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name>
+    <message>
+        <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="-270"/>
+        <source>&amp;Zoom</source>
+        <translation>&amp;ZvÄtÅ¡it</translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/designer_fr.ts
===================================================================
--- /trunk/translations/designer_fr.ts	(revision 768)
+++ /trunk/translations/designer_fr.ts	(revision 769)
@@ -1167,5 +1167,5 @@
         <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="166"/>
         <source>&amp;Pixmap Function</source>
-        <translation>Function de &amp;pixmap</translation>
+        <translation>Fonction de &amp;pixmap</translation>
     </message>
     <message>
Index: /trunk/translations/designer_ru.ts
===================================================================
--- /trunk/translations/designer_ru.ts	(revision 768)
+++ /trunk/translations/designer_ru.ts	(revision 769)
@@ -33,15 +33,15 @@
     <name>AddLinkDialog</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="+5"/>
+        <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/>
         <source>Insert Link</source>
         <translation>ÐÑÑÐ°Ð²ÐžÑÑ ÑÑÑÐ»ÐºÑ</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Title:</source>
         <translation>ÐÐ°Ð³ÐŸÐ»ÐŸÐ²ÐŸÐº:</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>URL:</source>
         <translation>URL:</translation>
@@ -150,10 +150,10 @@
     <name>AppearanceOptionsWidget</name>
     <message>
-        <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="+14"/>
+        <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/>
         <source>Form</source>
         <translation>Ð€ÐŸÑÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>User Interface Mode</source>
         <translation>Ð ÐµÐ¶ÐžÐŒ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»ÑÑÐºÐŸÐ³ÐŸ ÐžÐœÑÐµÑÑÐµÐ¹ÑÐ°</translation>
@@ -586,5 +586,5 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1195"/>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1194"/>
         <source>Set action text</source>
         <translation>Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÐµÐºÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÑ</translation>
@@ -597,10 +597,10 @@
     <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>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ</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>ÐÐ·ÐŒÐµÐœÐžÑÑ Ð·Ð°Ð³ÐŸÐ»ÐŸÐ²ÐŸÐº</translation>
@@ -681,22 +681,20 @@
     <name>ConnectDialog</name>
     <message>
-        <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="+13"/>
+        <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/>
         <source>Configure Connection</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
-        <location line="+40"/>
+        <location/>
         <source>GroupBox</source>
         <translation>GroupBox</translation>
     </message>
     <message>
-        <location line="-25"/>
-        <location line="+40"/>
+        <location/>
         <source>Edit...</source>
         <translation>ÐÐ·ÐŒÐµÐœÐžÑÑ...</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location/>
         <source>Show signals and slots inherited from QWidget</source>
         <translation>ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ ÑÐžÐ³ÐœÐ°Ð»Ñ Ðž ÑÐ»ÐŸÑÑ, ÑÐœÐ°ÑÐ»ÐµÐŽÐŸÐ²Ð°ÐœÐœÑÐµ ÐŸÑ QWidget</translation>
@@ -706,5 +704,5 @@
     <name>ConnectionDelegate</name>
     <message>
-        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/>
+        <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+644"/>
         <source>&lt;object&gt;</source>
         <translation>&lt;ÐŸÐ±ÑÐµÐºÑ&gt;</translation>
@@ -764,10 +762,10 @@
         <location line="+173"/>
         <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
-        <translation type="unfinished">ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐ°Ð¹Ð» UI: ÐÑÑÑÑÑÑÐ²ÑÐµÑ ÐºÐŸÑÐœÐµÐ²ÐŸÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ &lt;ui&gt;.</translation>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐ°Ð¹Ð» UI: ÐÑÑÑÑÑÑÐ²ÑÐµÑ ÐºÐŸÑÐœÐµÐ²ÐŸÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ &lt;ui&gt;.</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
-        <translation type="unfinished">ÐÑÐž ÑÑÐµÐœÐžÐž ÑÐ°Ð¹Ð»Ð° UI Ð² ÑÑÑÐŸÐºÐµ %1 Ð¿ÐŸÐ·ÐžÑÐžÐž %2 Ð²ÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ°: %3</translation>
+        <translation>ÐÑÐž ÑÑÐµÐœÐžÐž ÑÐ°Ð¹Ð»Ð° UI Ð² ÑÑÑÐŸÐºÐµ %1 Ð¿ÐŸÐ·ÐžÑÐžÐž %2 Ð²ÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ°: %3</translation>
     </message>
     <message>
@@ -812,5 +810,5 @@
         <location line="+31"/>
         <source>This file cannot be read because the extra info extension failed to load.</source>
-        <translation type="unfinished">ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÑ ÑÐ°Ð¹Ð», ÑÐ°Ðº ÐºÐ°Ðº Ð²ÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ° Ð¿ÑÐž Ð·Ð°Ð³ÑÑÐ·ÐºÐµ ÑÐ°ÑÑÐžÑÐµÐœÐžÑ ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÐŸÐ¹ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÐž.</translation>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÑ ÑÐ°Ð¹Ð», ÑÐ°Ðº ÐºÐ°Ðº Ð²ÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ° Ð¿ÑÐž Ð·Ð°Ð³ÑÑÐ·ÐºÐµ ÑÐ°ÑÑÐžÑÐµÐœÐžÑ ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÐŸÐ¹ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÐž.</translation>
     </message>
     <message>
@@ -873,25 +871,25 @@
     <name>DeviceProfileDialog</name>
     <message>
-        <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="+20"/>
+        <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/>
         <source>&amp;Family</source>
         <translation>&amp;ÐšÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&amp;Point Size</source>
         <translation>&amp;Ð Ð°Ð·ÐŒÐµÑ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Style</source>
         <translation>ÐÐ°ÑÐµÑÑÐ°ÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Device DPI</source>
         <translation>DPI ÑÑÑÑÐŸÐ¹ÑÑÐ²Ð°</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Name</source>
         <translation>ÐÐ°Ð·Ð²Ð°ÐœÐžÐµ</translation>
@@ -1035,5 +1033,5 @@
     <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>
@@ -1079,5 +1077,5 @@
     <name>FormLayoutRowDialog</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="+6"/>
+        <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/>
         <source>Add Form Layout Row</source>
         <translatorcomment>ÐœÐµÐ»ÐµÐ¿ÐžÑÐ° ÐºÐ°ÐºÐ°Ñ-ÑÐŸ</translatorcomment>
@@ -1085,30 +1083,30 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Label text:</source>
         <translation>Ð¢ÐµÐºÑÑ &amp;ÐŒÐµÑÐºÐž:</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location/>
         <source>Field &amp;type:</source>
         <translation>&amp;Ð¢ÐžÐ¿ Ð¿ÐŸÐ»Ñ:</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>&amp;Field name:</source>
         <translation>ÐÐŒÑ Ð¿&amp;ÐŸÐ»Ñ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;Buddy:</source>
         <translation>Ð&amp;Ð°ÑÑÐœÑÑ:</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>&amp;Row:</source>
         <translation>&amp;Ð¡ÑÑÐŸÐºÐ°:</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>Label &amp;name:</source>
         <translation>ÐÐŒÑ ÐŒ&amp;ÐµÑÐºÐž:</translation>
@@ -1131,60 +1129,60 @@
     <name>FormWindowSettings</name>
     <message>
-        <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="+54"/>
+        <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/>
         <source>Form Settings</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž ÑÐŸÑÐŒÑ</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Layout &amp;Default</source>
         <translation>ÐÐŸÐŒÐ¿ÐŸÐœÐŸÐ²ÐºÐ° Ð¿ÐŸ &amp;ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location/>
         <source>&amp;Spacing:</source>
         <translation>&amp;ÐÑÑÑÑÐ¿:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;Margin:</source>
         <translation>&amp;ÐÑÐ°ÐœÐžÑÑ:</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>&amp;Layout Function</source>
         <translation>&amp;Ð€ÑÐœÐºÑÐžÑ ÐºÐŸÐŒÐ¿ÐŸÐœÐŸÐ²ÐºÐž</translation>
     </message>
     <message>
-        <location line="+21"/>
+        <location/>
         <source>Ma&amp;rgin:</source>
         <translation>Ð&amp;ÑÐ°ÐœÐžÑÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Spa&amp;cing:</source>
         <translation>Ð&amp;ÑÑÑÑÐ¿:</translation>
     </message>
     <message>
-        <location line="+117"/>
+        <location/>
         <source>&amp;Author</source>
         <translation>&amp;ÐÐ²ÑÐŸÑ</translation>
     </message>
     <message>
-        <location line="-41"/>
+        <location/>
         <source>&amp;Include Hints</source>
         <translation>&amp;ÐÐŸÐŽÐºÐ»ÑÑÐžÑÑ Ð¿ÐŸÐŽÑÐºÐ°Ð·ÐºÐž</translation>
     </message>
     <message>
-        <location line="-53"/>
+        <location/>
         <source>&amp;Pixmap Function</source>
         <translation type="unfinished">&amp;ÐÐ°Ð³ÑÑÐ·ÑÐžÐº ÐžÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐ¹</translation>
     </message>
     <message>
-        <location line="+71"/>
+        <location/>
         <source>Grid</source>
         <translation>Ð¡ÐµÑÐºÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Embedded Design</source>
         <translation type="unfinished">ÐÑÐŸÑÐŒÐ»ÐµÐœÐžÐµ Ð¿ÐŸÑÑÐ°ÑÐžÐ²ÐœÑÑ
@@ -1335,10 +1333,10 @@
     <name>PluginDialog</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="+54"/>
+        <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/>
         <source>Plugin Information</source>
         <translation>ÐÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ ÐŒÐŸÐŽÑÐ»Ðµ</translation>
     </message>
     <message>
-        <location line="+26"/>
+        <location/>
         <source>1</source>
         <translation>1</translation>
@@ -1348,5 +1346,5 @@
     <name>PreferencesDialog</name>
     <message>
-        <location filename="../tools/designer/src/designer/preferencesdialog.ui" line="+20"/>
+        <location filename="../tools/designer/src/designer/preferencesdialog.ui"/>
         <source>Preferences</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž</translation>
@@ -1356,32 +1354,30 @@
     <name>PreviewConfigurationWidget</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="+5"/>
+        <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/>
         <source>Form</source>
         <translation>Ð€ÐŸÑÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Print/Preview Configuration</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° Ð¿ÐµÑÐ°ÑÐž/Ð¿ÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>Style</source>
         <translation>Ð¡ÑÐžÐ»Ñ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Style sheet</source>
         <translation>Ð¢Ð°Ð±Ð»ÐžÑÐ° ÑÑÐžÐ»ÐµÐ¹</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+7"/>
-        <location line="+21"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location line="-12"/>
+        <location/>
         <source>Device skin</source>
         <translation>ÐÐ±Ð»ÐŸÐ¶ÐºÐ° ÑÑÑÑÐŸÐ¹ÑÑÐ²Ð°</translation>
@@ -1416,13 +1412,13 @@
         <location line="+5"/>
         <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
-        <translation type="unfinished">ÐÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ° Ð¿ÑÐž ÑÑÐµÐœÐžÐž ÑÐ°Ð¹Ð»Ð° UI Ð² ÑÑÑÐŸÐºÐµ %1 Ð¿ÐŸÐ·ÐžÑÐžÐž %2: %3</translation>
+        <translation>ÐÐŸÐ·ÐœÐžÐºÐ»Ð° ÐŸÑÐžÐ±ÐºÐ° Ð¿ÑÐž ÑÑÐµÐœÐžÐž ÑÐ°Ð¹Ð»Ð° UI Ð² ÑÑÑÐŸÐºÐµ %1 Ð¿ÐŸÐ·ÐžÑÐžÐž %2: %3</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
-        <translation type="unfinished">ÐÐµÐ²ÐµÑÐœÑÐ¹ ÑÐ°Ð¹Ð» UI: ÐÑÑÑÑÑÑÐ²ÑÐµÑ ÐºÐŸÑÐœÐµÐ²ÐŸÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ &lt;ui&gt;.</translation>
-    </message>
-    <message>
-        <location line="+119"/>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐ°Ð¹Ð» UI: ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ ÐºÐŸÑÐœÐµÐ²ÐŸÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ &lt;ui&gt;.</translation>
+    </message>
+    <message>
+        <location line="+104"/>
         <source>The creation of a widget of the class &apos;%1&apos; failed.</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÐ·ÐŽÐ°ÐœÐžÐµ Ð²ÐžÐŽÐ¶ÐµÑÐ° ÐºÐ»Ð°ÑÑÐ° &apos;%1&apos;.</translation>
@@ -1957,5 +1953,5 @@
         <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/>
         <source>Reset control</source>
-        <translation>Ð¡Ð±ÑÐŸÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ</translation>
+        <translation type="unfinished">Ð¡Ð±ÑÐŸÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ</translation>
     </message>
     <message>
@@ -2023,5 +2019,5 @@
     <name>QDesignerMenu</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1181"/>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1179"/>
         <source>Type Here</source>
         <translation>ÐÐžÑÐžÑÐµ Ð·ÐŽÐµÑÑ</translation>
@@ -2049,5 +2045,5 @@
     <message>
         <location line="+25"/>
-        <location line="+650"/>
+        <location line="+648"/>
         <source>Add separator</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÑÐ°Ð·ÐŽÐµÐ»ÐžÑÐµÐ»Ñ</translation>
@@ -2322,5 +2318,5 @@
     <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>
@@ -2361,4 +2357,14 @@
         <source>The property %1 could not be written. The type %2 is not supported yet.</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°Ð¿ÐžÑÐ°ÑÑ ÑÐ²ÐŸÐ¹ÑÑÐ²ÐŸ %1. Ð¢ÐžÐ¿ %2 ÐµÑÑ ÐœÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ.</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>ÐÐœÐ°ÑÐµÐœÐžÐµ &apos;%1&apos; Ð¿ÐµÑÐµÑÐžÑÐ»ÑÐµÐŒÐŸÐ³ÐŸ ÑÐžÐ¿Ð° ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸ. ÐÑÐŽÐµÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ &apos;%2&apos;.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>The flag-value &apos;%1&apos; is invalid. Zero will be used instead.</source>
+        <translation>ÐÐœÐ°ÑÐµÐœÐžÐµ ÑÐ»Ð°Ð³Ð° &apos;%1&apos; Ð¿ÐµÑÐµÑÐžÑÐ»ÑÐµÐŒÐŸÐ³ÐŸ ÑÐžÐ¿Ð° ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸ. ÐÑÐŽÐµÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐŸ Ð·ÐœÐ°ÑÐµÐœÐžÐµ &apos;0&apos; (ÐœÑÐ»Ñ).</translation>
     </message>
 </context>
@@ -2495,9 +2501,9 @@
     <name>QtBoolEdit</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+226"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+255"/>
         <location line="+10"/>
         <location line="+25"/>
         <source>True</source>
-        <translation>ÐÐºÐ».</translation>
+        <translation type="unfinished">ÐÐºÐ».</translation>
     </message>
     <message>
@@ -2505,5 +2511,5 @@
         <location line="+25"/>
         <source>False</source>
-        <translation>ÐÑÐºÐ».</translation>
+        <translation type="unfinished">ÐÑÐºÐ».</translation>
     </message>
 </context>
@@ -2511,12 +2517,12 @@
     <name>QtBoolPropertyManager</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1469"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/>
         <source>True</source>
-        <translation type="unfinished">ÐÐ°</translation>
+        <translation type="unfinished">ÐÐºÐ».</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>False</source>
-        <translation type="unfinished">ÐÐµÑ</translation>
+        <translation type="unfinished">ÐÑÐºÐ».</translation>
     </message>
 </context>
@@ -2524,5 +2530,5 @@
     <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>Ð¡ÑÐµÑÐµÑÑ ÑÐžÐŒÐ²ÐŸÐ»</translation>
@@ -2540,5 +2546,5 @@
     <name>QtColorPropertyManager</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4743"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4718"/>
         <source>Red</source>
         <translation>ÐÑÐ°ÑÐœÑÐ¹</translation>
@@ -2563,5 +2569,5 @@
     <name>QtCursorDatabase</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-206"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-234"/>
         <source>Arrow</source>
         <translation>Arrow</translation>
@@ -2712,5 +2718,5 @@
     <name>QtGradientDialog</name>
     <message>
-        <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui" line="+53"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/>
         <source>Edit Gradient</source>
         <translation>ÐÑÐ°Ð²ÐºÐ° Ð³ÑÐ°ÐŽÐžÐµÐœÑÐ°</translation>
@@ -2802,15 +2808,15 @@
     </message>
     <message>
-        <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="+53"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/>
         <source>Form</source>
         <translation>Ð€ÐŸÑÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+48"/>
+        <location/>
         <source>Gradient Editor</source>
         <translation>Ð ÐµÐŽÐ°ÐºÑÐŸÑ Ð³ÑÐ°ÐŽÐžÐµÐœÑÐ°</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient&apos;s type such as start and final point, radius, etc. by drag &amp; drop.</source>
         <translation>Ð­ÑÐ° ÐŸÐ±Ð»Ð°ÑÑÑ ÐŸÑÐŸÐ±ÑÐ°Ð¶Ð°ÐµÑ Ð¿ÑÐµÐŽÐ²Ð°ÑÐžÑÐµÐ»ÑÐœÑÐ¹ Ð²Ð°ÑÐžÐ°ÐœÑ ÐœÐ°ÑÑÑÐ°ÐžÐ²Ð°ÐµÐŒÐŸÐ³ÐŸ Ð³ÑÐ°ÐŽÐžÐµÐœÑÐ°. Ð¢Ð°ÐºÐ¶Ðµ ÐŸÐœÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŒÐµÐœÑÑÑ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Ð¿ÐµÑÐµÑÐ°ÑÐºÐžÐ²Ð°ÐœÐžÑ Ñ
@@ -2818,30 +2824,30 @@
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>2</source>
         <translation>2</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>4</source>
         <translation>4</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>5</source>
         <translation>5</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>Gradient Stops Editor</source>
         <translation>Ð ÐµÐŽÐ°ÐºÑÐŸÑ ÐŸÐ¿ÐŸÑÐœÑÑ
@@ -2849,5 +2855,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag &amp; drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source>
         <translation>Ð­ÑÐ° ÐŸÐ±Ð»Ð°ÑÑÑ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ ÐŸÐ¿ÐŸÑÐœÑÐµ ÑÐŸÑÐºÐž Ð³ÑÐ°ÐŽÐžÐµÐœÑÐ°. ÐÐ²ÐŸÐ¹ÐœÐŸÐ¹ ÑÐµÐ»ÑÐŸÐº ÐœÐ° ÑÑÑÐµÑÑÐ²ÑÑÑÐµÐ¹ ÑÐŸÑÐºÐµ ÑÐŸÐ·ÐŽÐ°ÑÑ ÐµÑ ÐºÐŸÐ¿ÐžÑ. ÐÐ²ÐŸÐ¹ÐœÐŸÐ¹ ÐºÐ»ÐžÐº Ð²ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÑÑÐµÐ¹ ÑÐŸÑÐºÐž ÑÐŸÐ·ÐŽÐ°ÑÑ ÐœÐŸÐ²ÑÑ. Ð¢ÐŸÑÐºÐž ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÐµÑÐµÐŒÐµÑÐ°ÑÑ Ð¿ÑÑÐµÐŒ ÑÐŽÐµÑÐ¶ÐžÐ²Ð°ÐœÐžÑ Ð»ÐµÐ²ÐŸÐ¹ ÐºÐœÐŸÐ¿ÐºÐž. ÐÐŸ Ð¿ÑÐ°Ð²ÐŸÐ¹ ÐºÐœÐŸÐ¿ÐºÐµ ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÐŸÐ»ÑÑÐžÑÑ ÐºÐŸÐœÑÐµÐºÑÑÐœÐŸÐµ ÐŒÐµÐœÑ ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÑÑ
@@ -2855,182 +2861,170 @@
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Zoom</source>
         <translation>ÐÐ°ÑÑÑÐ°Ð±</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+3"/>
+        <location/>
         <source>Reset Zoom</source>
         <translation>100%</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Position</source>
         <translation>ÐÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+49"/>
-        <location line="+22"/>
+        <location/>
         <source>Hue</source>
         <translation>ÐÑÑÐµÐœÐŸÐº</translation>
     </message>
     <message>
-        <location line="-68"/>
+        <location/>
         <source>H</source>
         <translation>H</translation>
     </message>
     <message>
-        <location line="+87"/>
-        <location line="+49"/>
+        <location/>
         <source>Saturation</source>
         <translation>ÐÐ°ÑÑÑÐµÐœÐœÐŸÑÑÑ</translation>
     </message>
     <message>
-        <location line="-46"/>
+        <location/>
         <source>S</source>
         <translation>S</translation>
     </message>
     <message>
-        <location line="+68"/>
+        <location/>
         <source>Sat</source>
         <translation>ÐÐ°ÑÑÑÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+49"/>
+        <location/>
         <source>Value</source>
         <translation>ÐÐœÐ°ÑÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="-46"/>
+        <location/>
         <source>V</source>
         <translation>V</translation>
     </message>
     <message>
-        <location line="+68"/>
+        <location/>
         <source>Val</source>
         <translation>ÐÐœÐ°ÑÐµÐœÐžÐµ</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+49"/>
-        <location line="+22"/>
+        <location/>
         <source>Alpha</source>
         <translation>ÐÐ»ÑÑÐ°</translation>
     </message>
     <message>
-        <location line="-68"/>
+        <location/>
         <source>A</source>
         <translation>A</translation>
     </message>
     <message>
-        <location line="+81"/>
+        <location/>
         <source>Type</source>
         <translation>Ð¢ÐžÐ¿</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Spread</source>
         <translation>ÐÐ°Ð»ÐžÐ²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>Color</source>
         <translation>ÐŠÐ²ÐµÑ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Current stop&apos;s color</source>
         <translation>ÐŠÐ²ÐµÑ ÑÐµÐºÑÑÐµÐ¹ ÑÐŸÑÐºÐž</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Show HSV specification</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž Ð² Ð²ÐžÐŽÐµ HSV</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>HSV</source>
         <translation>HSV</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Show RGB specification</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž Ð² Ð²ÐžÐŽÐµ RGB</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>RGB</source>
         <translation>RGB</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>Current stop&apos;s position</source>
         <translation>ÐÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ ÑÐµÐºÑÑÐµÐ¹ ÑÐŸÑÐºÐž</translation>
     </message>
     <message>
-        <location line="+188"/>
+        <location/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location line="+111"/>
+        <location/>
         <source>Zoom In</source>
         <translation>Ð£Ð²ÐµÐ»ÐžÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Zoom Out</source>
         <translation>Ð£ÐŒÐµÐœÑÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>Toggle details extension</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ/ÑÐºÑÑÑÑ ÐŽÐµÑÐ°Ð»ÑÐœÑÐµ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&gt;</source>
         <translation>&gt;</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>Linear Type</source>
         <translation>ÐÐžÐœÐµÐ¹ÐœÑÐ¹ ÑÐžÐ¿</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+22"/>
-        <location line="+22"/>
-        <location line="+22"/>
-        <location line="+22"/>
-        <location line="+22"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location line="-91"/>
+        <location/>
         <source>Radial Type</source>
         <translation>Ð Ð°ÐŽÐžÐ°Ð»ÑÐœÑÐ¹ ÑÐžÐ¿</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Conical Type</source>
         <translation>ÐÐŸÐœÐžÑÐµÑÐºÐžÐ¹ ÑÐžÐ¿</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Pad Spread</source>
         <translation>Ð Ð°Ð²ÐœÐŸÐŒÐµÑÐœÐ°Ñ Ð·Ð°Ð»ÐžÐ²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Repeat Spread</source>
         <translation>ÐŠÐžÐºÐ»ÐžÑÐœÐ°Ñ Ð·Ð°Ð»ÐžÐ²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Reflect Spread</source>
         <translation>ÐÐµÑÐºÐ°Ð»ÑÐœÐ°Ñ Ð·Ð°Ð»ÐžÐ²ÐºÐ°</translation>
@@ -3057,5 +3051,5 @@
         <location line="+1"/>
         <source>Select All</source>
-        <translation>ÐÑÐŽÐµÐ»ÐžÑÑ Ð²ÑÐµ</translation>
+        <translation>ÐÑÐŽÐµÐ»ÐžÑÑ Ð²ÑÑ</translation>
     </message>
     <message>
@@ -3080,5 +3074,5 @@
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/>
         <source>Grad</source>
-        <translation type="unfinished">ÐÑÐ°ÐŽÐžÐµÐœÑ</translation>
+        <translation>ÐÑÐ°ÐŽÐžÐµÐœÑ</translation>
     </message>
     <message>
@@ -3093,5 +3087,5 @@
     </message>
     <message>
-        <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="+39"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+74"/>
         <source>New...</source>
@@ -3099,5 +3093,5 @@
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Edit...</source>
@@ -3105,5 +3099,5 @@
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Rename</source>
@@ -3111,5 +3105,5 @@
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Remove</source>
@@ -3117,5 +3111,5 @@
     </message>
     <message>
-        <location line="-83"/>
+        <location/>
         <source>Gradient View</source>
         <translation>ÐÑÐŸÑÐŒÐŸÑÑ Ð³ÑÐ°ÐŽÐžÐµÐœÑÐ°</translation>
@@ -3125,5 +3119,6 @@
     <name>QtGradientViewDialog</name>
     <message>
-        <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui" line="+53"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/>
+        <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.h" line="+62"/>
         <source>Select Gradient</source>
         <translation>ÐÑÐ±ÑÐ°ÑÑ Ð³ÑÐ°ÐŽÐžÐµÐœÑ</translation>
@@ -3133,5 +3128,5 @@
     <name>QtKeySequenceEdit</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+221"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+249"/>
         <source>Clear Shortcut</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÐºÐŸÐŒÐ±ÐžÐœÐ°ÑÐžÑ Ð³ÐŸÑÑÑÐžÑ
@@ -3196,5 +3191,5 @@
     <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>
@@ -3313,5 +3308,5 @@
         <location line="+112"/>
         <source>newPrefix</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">newPrefix</translation>
     </message>
     <message>
@@ -3508,47 +3503,45 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="+13"/>
+        <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/>
         <source>Dialog</source>
         <translation>ÐÐžÐ°Ð»ÐŸÐ³</translation>
     </message>
     <message>
-        <location line="+26"/>
+        <location/>
         <source>New File</source>
         <translation>ÐÐŸÐ²ÑÐ¹ ÑÐ°Ð¹Ð»</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+50"/>
+        <location/>
         <source>N</source>
         <translation>N</translation>
     </message>
     <message>
-        <location line="-43"/>
+        <location/>
         <source>Remove File</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÐ°Ð¹Ð»</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+57"/>
+        <location/>
         <source>R</source>
         <translation>R</translation>
     </message>
     <message>
-        <location line="-34"/>
+        <location/>
         <source>I</source>
         <translation>I</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>New Resource</source>
         <translation>ÐÐŸÐ²ÑÐ¹ ÑÐµÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>A</source>
         <translation>A</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Remove Resource or File</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÐµÑÑÑÑ ÐžÐ»Ðž ÑÐ°Ð¹Ð»</translation>
@@ -3671,55 +3664,55 @@
     </message>
     <message>
-        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="+13"/>
+        <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/>
         <source>Customize Toolbars</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° Ð¿Ð°ÐœÐµÐ»ÐµÐ¹ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Actions</source>
         <translation>ÐÐµÐ¹ÑÑÐ²ÐžÑ</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location/>
         <source>Toolbars</source>
         <translation>ÐÐ°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Add new toolbar</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÐœÐŸÐ²ÑÑ Ð¿Ð°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>New</source>
         <translation>ÐÐŸÐ²Ð°Ñ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Remove selected toolbar</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ Ð²ÑÐ±ÑÐ°ÐœÐœÑÑ Ð¿Ð°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Remove</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Rename toolbar</source>
         <translation>ÐÐµÑÐµÐžÐŒÐµÐœÐŸÐ²Ð°ÑÑ Ð¿Ð°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Rename</source>
         <translation>ÐÐµÑÐµÐžÐŒÐµÐœÐŸÐ²Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location/>
         <source>Move action up</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ Ð²Ð²ÐµÑÑ
@@ -3727,5 +3720,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Up</source>
         <translation>ÐÐ²ÐµÑÑ
@@ -3733,35 +3726,35 @@
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Remove action from toolbar</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ ÐžÐ· Ð¿Ð°ÐœÐµÐ»Ðž ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&lt;-</source>
         <translation>&lt;-</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Add action to toolbar</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ ÐœÐ° Ð¿Ð°ÐœÐµÐ»Ñ ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>-&gt;</source>
         <translation>-&gt;</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Move action down</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ Ð²ÐœÐžÐ·</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Down</source>
         <translation>ÐÐœÐžÐ·</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location/>
         <source>Current Toolbar Actions</source>
         <translation>Ð¢ÐµÐºÑÑÐžÐµ ÐŽÐµÐ¹ÑÑÐ²ÐžÑ Ð¿Ð°ÐœÐµÐ»Ðž ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
@@ -3832,5 +3825,5 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="+45"/>
+        <location filename="../tools/designer/src/designer/saveformastemplate.ui"/>
         <source>Save Form As Template</source>
         <translation>Ð¡ÐŸÑ
@@ -3838,10 +3831,10 @@
     </message>
     <message>
-        <location line="+49"/>
+        <location/>
         <source>&amp;Category:</source>
         <translation>&amp;ÐÐ°ÑÐµÐ³ÐŸÑÐžÑ:</translation>
     </message>
     <message>
-        <location line="-35"/>
+        <location/>
         <source>&amp;Name:</source>
         <translation>&amp;ÐÐŒÑ:</translation>
@@ -3861,5 +3854,5 @@
     <name>SelectSignalDialog</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="+14"/>
+        <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/>
         <source>Go to slot</source>
         <translation>ÐÐµÑÐµÑ
@@ -3867,15 +3860,15 @@
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Select signal</source>
         <translation>ÐÑÐ±ÐŸÑ ÑÐžÐ³ÐœÐ°Ð»Ð°</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>signal</source>
         <translation>ÑÐžÐ³ÐœÐ°Ð»</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>class</source>
         <translation>ÐºÐ»Ð°ÑÑ</translation>
@@ -3893,35 +3886,30 @@
     <name>SignalSlotDialogClass</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="+13"/>
+        <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/>
         <source>Signals and slots</source>
         <translation>Ð¡ÐžÐ³ÐœÐ°Ð»Ñ Ðž ÑÐ»ÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Slots</source>
         <translation>Ð¡Ð»ÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+11"/>
-        <location line="+49"/>
+        <location/>
         <source>Add</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-46"/>
-        <location line="+10"/>
-        <location line="+39"/>
-        <location line="+10"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location line="-52"/>
-        <location line="+49"/>
+        <location/>
         <source>Delete</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-21"/>
+        <location/>
         <source>Signals</source>
         <translation>Ð¡ÐžÐ³ÐœÐ°Ð»Ñ</translation>
@@ -3987,5 +3975,5 @@
     <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;ÐÐµÑÑÐžÑ %2</translation>
@@ -4106,5 +4094,5 @@
     <name>qdesigner_internal::ActionModel</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+95"/>
+        <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+89"/>
         <source>Name</source>
         <translation>ÐÐŒÑ</translation>
@@ -4667,40 +4655,40 @@
     <name>qdesigner_internal::Dialog</name>
     <message>
-        <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="+53"/>
+        <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/>
         <source>Dialog</source>
         <translation>ÐÐžÐ°Ð»ÐŸÐ³</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>StringList</source>
         <translation>Ð¡Ð¿ÐžÑÐŸÐº ÑÑÑÐŸÐº</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>New String</source>
         <translation>ÐÐŸÐ²Ð°Ñ ÑÑÑÐŸÐºÐ°</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;New</source>
         <translation>&amp;ÐÐŸÐ²Ð°Ñ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Delete String</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÑÑÐŸÐºÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Delete</source>
         <translation>&amp;Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+33"/>
+        <location/>
         <source>&amp;Value:</source>
         <translation>&amp;ÐÐœÐ°ÑÐµÐœÐžÐµ:</translation>
     </message>
     <message>
-        <location line="+38"/>
+        <location/>
         <source>Move String Up</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÑÑÐŸÐºÑ Ð²Ð²ÐµÑÑ
@@ -4708,5 +4696,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Up</source>
         <translation>ÐÐ²ÐµÑÑ
@@ -4714,10 +4702,10 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move String Down</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÑÑÐŸÐºÑ Ð²ÐœÐžÐ·</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Down</source>
         <translation> ÐÐœÐžÐ· </translation>
@@ -4888,5 +4876,5 @@
     </message>
     <message>
-        <location line="+41"/>
+        <location line="+46"/>
         <source>Lay out</source>
         <translation>ÐÐŸÐŒÐ¿ÐŸÐœÐŸÐ²ÐºÐ°</translation>
@@ -4920,5 +4908,5 @@
     <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;ÐÑÑÐµÐ·Ð°ÑÑ</translation>
@@ -5135,36 +5123,35 @@
     <name>qdesigner_internal::GridPanel</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="+13"/>
+        <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/>
         <source>Form</source>
         <translation>Ð€ÐŸÑÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Grid</source>
         <translation>Ð¡ÐµÑÐºÐ°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Visible</source>
         <translation>ÐÐžÐŽÐžÐŒÐ°Ñ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Grid &amp;X</source>
         <translation>Ð¡ÐµÑÐºÐ° &amp;X</translation>
     </message>
     <message>
-        <location line="+26"/>
-        <location line="+57"/>
+        <location/>
         <source>Snap</source>
         <translation>ÐÑÐžÐ»ÐžÐ¿Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="-48"/>
+        <location/>
         <source>Reset</source>
         <translation>Ð¡Ð±ÑÐŸÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>Grid &amp;Y</source>
         <translation>Ð¡ÐµÑÐºÐ° &amp;Y</translation>
@@ -5289,5 +5276,5 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="+143"/>
+        <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/>
         <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+2"/>
         <source>Properties &amp;&gt;&gt;</source>
@@ -5295,30 +5282,30 @@
     </message>
     <message>
-        <location line="-75"/>
+        <location/>
         <source>Items List</source>
         <translation>Ð¡Ð¿ÐžÑÐŸÐº ÑÐ»ÐµÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>New Item</source>
         <translation>ÐÐŸÐ²ÑÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;New</source>
         <translation>&amp;ÐÐŸÐ²ÑÐ¹</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Delete Item</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Delete</source>
         <translation>&amp;Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Move Item Up</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²Ð²ÐµÑÑ
@@ -5326,15 +5313,15 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move Item Down</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²ÐœÐžÐ·</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>D</source>
         <translation>D</translation>
@@ -5443,41 +5430,40 @@
     <name>qdesigner_internal::NewActionDialog</name>
     <message>
-        <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="+46"/>
+        <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/>
         <source>New Action...</source>
         <translation>ÐÐŸÐ²ÐŸÐµ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ...</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Text:</source>
         <translation>&amp;Ð¢ÐµÐºÑÑ:</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Object &amp;name:</source>
         <translation>&amp;ÐÐŒÑ ÐŸÐ±ÑÐµÐºÑÐ°:</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&amp;Icon:</source>
         <translation>&amp;ÐÐœÐ°ÑÐŸÐº:</translation>
     </message>
     <message>
-        <location line="+30"/>
+        <location/>
         <source>Shortcut:</source>
         <translation>ÐÐŸÑÑÑÐ°Ñ ÐºÐ»Ð°Ð²ÐžÑÐ°:</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Checkable:</source>
         <translation>Ð¢ÑÐžÐ³Ð³ÐµÑÐœÐŸÐµ:</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>ToolTip:</source>
         <translation>ÐÐŸÐŽÑÐºÐ°Ð·ÐºÐ°:</translation>
     </message>
     <message>
-        <location line="+19"/>
-        <location line="+21"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
@@ -5506,20 +5492,20 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="+13"/>
+        <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/>
         <source>Create Dynamic Property</source>
         <translation>Ð¡ÐŸÐ·ÐŽÐ°ÐœÐžÐµ ÐŽÐžÐœÐ°ÐŒÐžÑÐµÑÐºÐŸÐ³ÐŸ ÑÐ²ÐŸÐ¹ÑÑÐ²Ð°</translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location/>
         <source>Property Name</source>
         <translation>ÐÐŒÑ ÑÐ²ÐŸÐ¹ÑÑÐ²Ð°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>horizontalSpacer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location/>
         <source>Property Type</source>
         <translation>Ð¢ÐžÐ¿ ÑÐ²ÐŸÐ¹ÑÑÐ²Ð°</translation>
@@ -5585,15 +5571,15 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="+82"/>
+        <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>Choose a template for a preview</source>
         <translation>ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ°Ð±Ð»ÐŸÐœ ÐŽÐ»Ñ Ð¿ÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+44"/>
+        <location/>
         <source>Embedded Design</source>
         <translation type="unfinished">ÐÑÐŸÑÐŒÐ»ÐµÐœÐžÐµ Ð¿ÐŸÑÑÐ°ÑÐžÐ²ÐœÑÑ
@@ -5601,10 +5587,10 @@
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Device:</source>
         <translation>Ð£ÑÑÑÐŸÐ¹ÑÑÐ²ÐŸ:</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Screen Size:</source>
         <translation>Ð Ð°Ð·ÐŒÐµÑ ÑÐºÑÐ°ÐœÐ°:</translation>
@@ -5656,7 +5642,4 @@
         <translation>&amp;ÐÐ°Ð¹ÑÐž Ð² ÑÐµÐºÑÑÐµ...</translation>
     </message>
-</context>
-<context>
-    <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name>
     <message>
         <location line="-438"/>
@@ -5678,20 +5661,20 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="+53"/>
+        <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/>
         <source>Change Page Order</source>
         <translation>ÐÐ·ÐŒÐµÐœÐµÐœÐžÐµ Ð¿ÐŸÑÑÐŽÐºÐ° ÑÑÑÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Page Order</source>
         <translation>ÐÐŸÑÑÐŽÐŸÐº ÑÑÑÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location/>
         <source>Move page up</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÑÑÐ°ÐœÐžÑÑ Ð²ÑÑÐµ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move page down</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÑÑÐ°ÐœÐžÑÑ ÐœÐžÐ¶Ðµ</translation>
@@ -5701,45 +5684,45 @@
     <name>qdesigner_internal::PaletteEditor</name>
     <message>
-        <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="+61"/>
+        <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/>
         <source>Edit Palette</source>
         <translation>ÐÑÐ°Ð²ÐºÐ° Ð¿Ð°Ð»ÐžÑÑÑ</translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location/>
         <source>Tune Palette</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° Ð¿Ð°Ð»ÐžÑÑÑ</translation>
     </message>
     <message>
-        <location line="+37"/>
+        <location/>
         <source>Show Details</source>
         <translation type="unfinished">ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ ÐŽÐµÑÐ°Ð»Ðž</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Compute Details</source>
         <translation type="unfinished">Ð Ð°ÑÑÐžÑÑÐ²Ð°ÑÑ ÐŽÐµÑÐ°Ð»Ðž</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Quick</source>
         <translation type="unfinished">ÐÑÑÑÑÑÐ¹</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Preview</source>
         <translation>ÐÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Disabled</source>
         <translation>ÐÑÐºÐ»ÑÑÐµÐœÐœÐ°Ñ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Inactive</source>
         <translation>ÐÐµÐ°ÐºÑÐžÐ²ÐœÐ°Ñ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Active</source>
         <translation>ÐÐºÑÐžÐ²ÐœÐ°Ñ</translation>
@@ -5880,7 +5863,4 @@
         <translation>ÐÐ±Ð·ÐŸÑ...</translation>
     </message>
-</context>
-<context>
-    <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name>
     <message>
         <location line="+118"/>
@@ -5962,55 +5942,55 @@
     <name>qdesigner_internal::PreviewWidget</name>
     <message>
-        <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="+61"/>
+        <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/>
         <source>Preview Window</source>
         <translation>ÐÐºÐœÐŸ Ð¿ÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>LineEdit</source>
         <translation>LineEdit</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>ComboBox</source>
         <translation>ComboBox</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>PushButton</source>
         <translation>PushButton</translation>
     </message>
     <message>
-        <location line="+58"/>
+        <location/>
         <source>ButtonGroup2</source>
         <translation>ButtonGroup2</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>CheckBox1</source>
         <translation>CheckBox1</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>CheckBox2</source>
         <translation>CheckBox2</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>ButtonGroup</source>
         <translation>ButtonGroup</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>RadioButton1</source>
         <translation>RadioButton1</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>RadioButton2</source>
         <translation>RadioButton2</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>RadioButton3</source>
         <translation>RadioButton3</translation>
@@ -6699,5 +6679,5 @@
     <name>qdesigner_internal::TableWidgetEditor</name>
     <message>
-        <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="+97"/>
+        <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/>
         <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+218"/>
         <source>Properties &amp;&gt;&gt;</source>
@@ -6705,15 +6685,15 @@
     </message>
     <message>
-        <location line="-44"/>
+        <location/>
         <source>Edit Table Widget</source>
         <translation>ÐÑÐ°Ð²ÐºÐ° ÑÐ°Ð±Ð»ÐžÑÐœÐŸÐ³ÐŸ Ð²ÐžÐŽÐ¶ÐµÑÐ°</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;Items</source>
         <translation>&amp;Ð­Ð»ÐµÐŒÐµÐœÑÑ</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Table Items</source>
         <translation>Ð­Ð»ÐµÐŒÐµÐœÑÑ ÑÐ°Ð±Ð»ÐžÑÑ</translation>
@@ -6762,16 +6742,15 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="+13"/>
+        <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/>
         <source>Form</source>
         <translation>Ð€ÐŸÑÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Additional Template Paths</source>
         <translation>ÐÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÑÐµ Ð¿ÑÑÐž Ðº ÑÐ°Ð±Ð»ÐŸÐœÐ°ÐŒ</translation>
     </message>
     <message>
-        <location line="+9"/>
-        <location line="+7"/>
+        <location/>
         <source>...</source>
         <translation>...</translation>
@@ -6875,5 +6854,5 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="+101"/>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/>
         <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+53"/>
         <source>New Item</source>
@@ -6881,5 +6860,5 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+19"/>
         <source>New Subitem</source>
@@ -6892,5 +6871,5 @@
     </message>
     <message>
-        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="+86"/>
+        <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/>
         <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+2"/>
         <source>Properties &amp;&gt;&gt;</source>
@@ -6898,65 +6877,65 @@
     </message>
     <message>
-        <location line="-144"/>
+        <location/>
         <source>Edit Tree Widget</source>
-        <translation type="unfinished">ÐÐ·ÐŒÐµÐœÐµÐœÐžÐµ Ð²ÐžÐŽÐ¶ÐµÑÐ° Tree</translation>
-    </message>
-    <message>
-        <location line="+10"/>
+        <translation type="unfinished">ÐÐ·ÐŒÐµÐœÐµÐœÐžÐµ Ð²ÐžÐŽÐ¶ÐµÑÐ° ÐÐµÑÐµÐ²ÐŸ</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;Items</source>
         <translation>&amp;Ð­Ð»ÐµÐŒÐµÐœÑÑ</translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location/>
         <source>Tree Items</source>
         <translation>Ð­Ð»ÐµÐŒÐµÐœÑÑ ÐŽÐµÑÐµÐ²Ð°</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&amp;New</source>
         <translation>&amp;ÐÐŸÐ²ÑÐ¹</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>New &amp;Subitem</source>
         <translation>ÐÐŸÐ²ÑÐ¹ &amp;ÐŽÐŸÑÐµÑÐœÐžÐ¹ ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Delete Item</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Delete</source>
         <translation>&amp;Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Move Item Left (before Parent Item)</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²Ð»ÐµÐ²ÐŸ (Ð¿ÐµÑÐµÐŽ ÑÐŸÐŽÐžÑÐµÐ»ÑÑÐºÐžÐŒ)</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>L</source>
         <translation>L</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²Ð¿ÑÐ°Ð²ÐŸ (ÑÐŽÐµÐ»Ð°ÑÑ Ð¿ÐµÑÐ²ÑÐŒ ÐŽÐŸÑÐµÑÐœÐžÐŒ ÑÐ»ÐµÐŒÐµÐœÑÐŸÐŒ ÑÐŸÑÐµÐŽÐœÐµÐ³ÐŸ ÑÐ»ÐµÐŒÐµÐœÑÐ°)</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>R</source>
         <translation></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move Item Up</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²Ð²ÐµÑÑ
@@ -6964,15 +6943,15 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move Item Down</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑ Ð²ÐœÐžÐ·</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>D</source>
         <translation>D</translation>
Index: /trunk/translations/linguist_cs.ts
===================================================================
--- /trunk/translations/linguist_cs.ts	(revision 769)
+++ /trunk/translations/linguist_cs.ts	(revision 769)
@@ -0,0 +1,2023 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs_CZ">
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/>
+        <source>Qt Linguist</source>
+        <translation>Qt Linguist</translation>
+    </message>
+</context>
+<context>
+    <name>BatchTranslationDialog</name>
+    <message>
+        <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/>
+        <source>Batch Translation of &apos;%1&apos; - Qt Linguist</source>
+        <translation>AutomatickÃœ pÅeklad &apos;%1&apos; - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Searching, please wait...</source>
+        <translation>HledÃ¡ se, Äekejte, prosÃ­m...</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Linguist batch translator</source>
+        <translation>AutomatickÃœ pÅekladatel (Linguist)</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+1"/>
+        <source>Batch translated %n entries</source>
+        <translation>
+            <numerusform>1 zÃ¡znam byl automaticky pÅeloÅŸen</numerusform>
+            <numerusform>%n zÃ¡znamy byly automaticky pÅeloÅŸeny</numerusform>
+            <numerusform>%n zÃ¡znamÅ¯ bylo automaticky pÅeloÅŸeno</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/batchtranslation.ui"/>
+        <source>Qt Linguist - Batch Translation</source>
+        <translation>Qt Linguist - AutomatickÃœ pÅeklad</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Options</source>
+        <translation>Volby</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Set translated entries to finished</source>
+        <translation>OznaÄit pÅeloÅŸenÃ© zÃ¡znamy jako hotovÃ©</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Retranslate entries with existing translation</source>
+        <translation>Znovu pÅeloÅŸit zÃ¡znamy s jiÅŸ existujÃ­cÃ­m pÅekladem</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Translate also finished entries</source>
+        <translation>PÅeloÅŸit i hotovÃ© zÃ¡znamy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Phrase book preference</source>
+        <translation>SlovnÃ­ky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move up</source>
+        <translation>Posunout nahoru</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move down</source>
+        <translation>Posunout dolÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Run</source>
+        <translation>&amp;ProvÃ©st</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked</source>
+        <translation>VÅ¡imnÄte si, ÅŸe zmÄnÄnÃ© zÃ¡znamy budou znovu nastaveny na nevyÅÃ­zenÃ©, pokud nenÃ­ zapnuto nahoÅe zmÃ­nÄnÃ© nastavenÃ­ &apos;OznaÄit pÅeloÅŸenÃ© zÃ¡znamy jako hotovÃ©&apos;</translation>
+    </message>
+    <message>
+        <location/>
+        <source>The batch translator will search through the selected phrase books in the order given above</source>
+        <translation>AutomatickÃœ pÅekladatel bude prohledÃ¡vat vybranÃ© slovnÃ­ky v poÅadÃ­ uvedenÃ©m vÃœÅ¡e</translation>
+    </message>
+</context>
+<context>
+    <name>DataModel</name>
+    <message>
+        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/>
+        <source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
+        <translation>&lt;qt&gt;VÃ­cekrÃ¡t existujÃ­cÃ­ hlÃ¡Å¡enÃ­ v &apos;%1&apos;:</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&lt;p&gt;[more duplicates omitted]</source>
+        <translation>&lt;p&gt;[vypuÅ¡tÄny dalÅ¡Ã­ vÃ­cekrÃ¡t existujÃ­cÃ­ zprÃ¡vy]</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
+        <translation>&lt;p&gt;* Souvislosti: %1&lt;br&gt;* Zdroj: %2</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&lt;br&gt;* Comment: %3</source>
+        <translation>&lt;br&gt;* PoznÃ¡mka: %3</translation>
+    </message>
+    <message>
+        <location line="+70"/>
+        <source>Linguist does not know the plural rules for &apos;%1&apos;.
+Will assume a single universal form.</source>
+        <translation>Pravidla pro tvoÅenÃ­ mnoÅŸnÃ©ho ÄÃ­sla (plurÃ¡lu) jazyka &apos;%1&apos; nejsou v Linguistu stanovena.
+Pracuje se s jednoduchÃœm vÅ¡eobecnÃœm tvarem.</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>Cannot create &apos;%2&apos;: %1</source>
+        <translation>&apos;%2&apos; nemÅ¯ÅŸe bÃœt vytvoÅen: %1</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>Universal Form</source>
+        <translation>VÅ¡eobecnÃœ tvar</translation>
+    </message>
+</context>
+<context>
+    <name>ErrorsView</name>
+    <message>
+        <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/>
+        <source>Accelerator possibly superfluous in translation.</source>
+        <translation>V textu pÅekladu je moÅŸnÃ¡ pÅebyteÄnÃœ akcelerÃ¡tor.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Accelerator possibly missing in translation.</source>
+        <translation>V textu pÅekladu moÅŸnÃ¡ chybÃ­ akcelerÃ¡tor.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Translation does not end with the same punctuation as the source text.</source>
+        <translation>InterpunkÄnÃ­ znamÃ©nko na konci textu pÅekladu se liÅ¡Ã­ od interpunkce zdrojovÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>A phrase book suggestion for &apos;%1&apos; was ignored.</source>
+        <translation>Na nÃ¡vrh slovnÃ­ku pro &apos;%1&apos; nebyl brÃ¡n zÅetel.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Translation does not refer to the same place markers as in the source text.</source>
+        <translation>DrÅŸitelÃ© mÃ­sta v textu pÅekladu a ve zdrojovÃ©m textu se liÅ¡Ã­.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Translation does not contain the necessary %n place marker.</source>
+        <translation>PotÅebnÃœ drÅŸitel mÃ­sta (%n) v pÅekladu chybÃ­.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+</context>
+<context>
+    <name>FindDialog</name>
+    <message>
+        <location filename="../tools/linguist/linguist/finddialog.ui"/>
+        <source>This window allows you to search for some text in the translation source file.</source>
+        <translation>Toto okno vÃ¡m umoÅŸÅuje hledÃ¡nÃ­ textu ve zdrojovÃ©m souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Type in the text to search for.</source>
+        <translation>Zadejte text, kterÃœ se mÃ¡ hledat.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Options</source>
+        <translation>Volby</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Source texts are searched when checked.</source>
+        <translation>KdyÅŸ je zapnuto, hledÃ¡ se ve zdrojovÃœch textech.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Translations are searched when checked.</source>
+        <translation>KdyÅŸ je zapnuto, hledÃ¡ se v pÅekladech.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+        <translation>KdyÅŸ je zapnuto, texty jako &apos;TeX&apos; a &apos;tex&apos; se povaÅŸujÃ­ za rozdÃ­lnÃ©.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Comments and contexts are searched when checked.</source>
+        <translation>KdyÅŸ je zapnuto, prohledÃ¡vajÃ­ se poznÃ¡mky a souvislosti.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Find</source>
+        <translation>Hledat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Find what:</source>
+        <translation>&amp;Vzor hledÃ¡nÃ­:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Source texts</source>
+        <translation>&amp;ZdrojovÃ© texty</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Translations</source>
+        <translation>&amp;PÅeklady</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Match case</source>
+        <translation>&amp;DbÃ¡t na psanÃ­ velkÃœch a malÃœch pÃ­smen</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Comments</source>
+        <translation>&amp;PoznÃ¡mky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ignore &amp;accelerators</source>
+        <translation>Nedbat na &amp;akcelerÃ¡tory</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to find the next occurrence of the text you typed in.</source>
+        <translation>KlepnÄte sem pro skok k dalÅ¡Ã­mu vÃœskytu hledÃ¡nÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Find Next</source>
+        <translation>Hledat dÃ¡l</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to close this window.</source>
+        <translation>KlepnÄte sem pro zavÅenÃ­ tohoto okna.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/finddialog.cpp" line="+12"/>
+        <source></source>
+        <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>FormMultiWidget</name>
+    <message>
+        <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+296"/>
+        <source>Alt+Delete</source>
+        <extracomment>translate, but don&apos;t change</extracomment>
+        <translation>Alt+Delete</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Shift+Alt+Insert</source>
+        <extracomment>translate, but don&apos;t change</extracomment>
+        <translation>Shift+Alt+Insert</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Alt+Insert</source>
+        <extracomment>translate, but don&apos;t change</extracomment>
+        <translation>Alt+Insert</translation>
+    </message>
+    <message>
+        <location line="+131"/>
+        <source>Confirmation - Qt Linguist</source>
+        <translation>PotvrzenÃ­ - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete non-empty length variant?</source>
+        <translation>Smazat vyplnÄnou obmÄnu dÃ©lky?</translation>
+    </message>
+</context>
+<context>
+    <name>LRelease</name>
+    <message numerus="yes">
+        <location filename="../tools/linguist/shared/qm.cpp" line="+748"/>
+        <source>Dropped %n message(s) which had no ID.</source>
+        <translation>
+            <numerusform>Byl smazÃ¡n zÃ¡znam bez identifikÃ¡toru.</numerusform>
+            <numerusform>Byly smazÃ¡ny %n zÃ¡znamy bez identifikÃ¡toru.</numerusform>
+            <numerusform>Byly smazÃ¡ny %n zÃ¡znamy bez identifikÃ¡toru.</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location line="+4"/>
+        <source>Excess context/disambiguation dropped from %n message(s).</source>
+        <translation>
+            <numerusform>U jednoho zÃ¡znamu byla odstranÄna pÅebyteÄnÃ¡ souvislost pÅÃ­padnÄ pÅebyteÄnÃ© zabrÃ¡nÄnÃ­ dvojznaÄnosti (pÅebyteÄnÃ¡ informace k rozhodovÃ¡nÃ­).</numerusform>
+            <numerusform>U %n zÃ¡znamÅ¯ byla odstranÄna pÅebyteÄnÃ¡ souvislost pÅÃ­padnÄ pÅebyteÄnÃ© zabrÃ¡nÄnÃ­ dvojznaÄnosti (pÅebyteÄnÃ¡ informace k rozhodovÃ¡nÃ­).</numerusform>
+            <numerusform>U %n zÃ¡znamÅ¯ byla odstranÄna pÅebyteÄnÃ¡ souvislost pÅÃ­padnÄ pÅebyteÄnÃ© zabrÃ¡nÄnÃ­ dvojznaÄnosti (pÅebyteÄnÃ¡ informace k rozhodovÃ¡nÃ­).</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location line="+8"/>
+        <source>    Generated %n translation(s) (%1 finished and %2 unfinished)
+</source>
+        <translation>
+            <numerusform>    Byl vytvoÅen jeden pÅeklad (%1 dokonÄeno %2 nedokonÄeno)
+</numerusform>
+            <numerusform>    Byly vytvoÅeny %n pÅeklady (%1 dokonÄeno %2 nedokonÄeno)
+</numerusform>
+            <numerusform>    Byly vytvoÅeny %n pÅeklady (%1 dokonÄeno %2 nedokonÄeno)
+</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location line="+4"/>
+        <source>    Ignored %n untranslated source text(s)
+</source>
+        <translation>
+            <numerusform>    Na jeden nepÅeloÅŸenÃœ text nebyl brÃ¡n zÅetel
+</numerusform>
+            <numerusform>    na %n nepÅeloÅŸenÃ© texty nebyl brÃ¡n zÅetel
+</numerusform>
+            <numerusform>    na %n nepÅeloÅŸenÃ© texty nebyl brÃ¡n zÅetel
+</numerusform>
+        </translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <source>MainWindow</source>
+        <translation>HlavnÃ­ okno</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Phrases</source>
+        <translation>&amp;SlovnÃ­ky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Close Phrase Book</source>
+        <translation>&amp;ZavÅÃ­t slovnÃ­k</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Edit Phrase Book</source>
+        <translation>&amp;Upravit slovnÃ­k</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Print Phrase Book</source>
+        <translation>&amp;Vytisknout slovnÃ­k</translation>
+    </message>
+    <message>
+        <location/>
+        <source>V&amp;alidation</source>
+        <translation>&amp;SchvÃ¡lenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;View</source>
+        <translation>&amp;Pohled</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Vie&amp;ws</source>
+        <translation>Po&amp;hledy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Toolbars</source>
+        <translation>&amp;NÃ¡strojovÃ© liÅ¡ty</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Help</source>
+        <translation>&amp;NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Translation</source>
+        <translation>&amp;PÅeklad</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;File</source>
+        <translation>&amp;Soubor</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Edit</source>
+        <translation>Ã&amp;pravy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Open...</source>
+        <translation>&amp;OtevÅÃ­t...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Open a Qt translation source file (TS file) for editing</source>
+        <translation>OtevÅÃ­t Qt zdrojovÃœ soubor s pÅekladem (soubor TS) pro Ãºpravy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+O</source>
+        <translation>Ctrl+O</translation>
+    </message>
+    <message>
+        <location/>
+        <source>E&amp;xit</source>
+        <translation>&amp;UkonÄit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Close this window and exit.</source>
+        <translation>Toto okno zavÅÃ­t a ukonÄit.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+Q</source>
+        <translation>Ctrl+Q</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+646"/>
+        <location line="+15"/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <source>Save changes made to this Qt translation source file</source>
+        <translation>UloÅŸit zmÄny provedenÃ© v tomto Qt zdrojovÃ©m souboru s pÅekladem</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move to the previous unfinished item.</source>
+        <translation>JÃ­t na pÅedchozÃ­ nevyÅÃ­zenÃœ zÃ¡znam.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move to the next unfinished item.</source>
+        <translation>JÃ­t na dalÅ¡Ã­ nevyÅÃ­zenÃœ zÃ¡znam.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move to the previous item.</source>
+        <translation>JÃ­t na pÅedchozÃ­ zÃ¡znam.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move to the next item.</source>
+        <translation>JÃ­t na dalÅ¡Ã­ zÃ¡znam.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Mark this item as done and move to the next unfinished item.</source>
+        <translation>OznaÄit tento zÃ¡znam jako hotovÃœ a jÃ­t na dalÅ¡Ã­ nevyÅÃ­zenÃœ zÃ¡znam.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copy from source text</source>
+        <translation>PÅevzÃ­t zdrojovÃœ text</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ akcelerÃ¡torÅ¯, to znamenÃ¡, zda se shoduje poÄet znakÅ¯ obchodnickÃ©ho -A (&amp;) ve zdrojovÃ©m textu a v textu pÅekladu. V pÅÃ­padÄ neÃºspÄchu se v oknÄ s upozornÄnÃ­mi ukÃ¡ÅŸe zprÃ¡va s varovÃ¡nÃ­m.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ znaku na konci vÄty na konci textu. V pÅÃ­padÄ neÃºspÄchu se v oknÄ s upozornÄnÃ­mi ukÃ¡ÅŸe zprÃ¡va s varovÃ¡nÃ­m.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ pouÅŸitÃ­ nÃ¡vrhÅ¯ slovnÃ­ku. V pÅÃ­padÄ neÃºspÄchu se v oknÄ s upozornÄnÃ­mi ukÃ¡ÅŸe zprÃ¡va s varovÃ¡nÃ­m.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ drÅŸitelÅ¯ mÃ­sta, to znamenÃ¡, zda se shoduje pouÅŸÃ­vÃ¡nÃ­ %1, %2,... ve zdrojovÃ©m textu a v textu pÅekladu. V pÅÃ­padÄ neÃºspÄchu se v oknÄ s upozornÄnÃ­mi ukÃ¡ÅŸe zprÃ¡va s varovÃ¡nÃ­m.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Open Read-O&amp;nly...</source>
+        <translation>OtevÅÃ­t pouze &amp;pro ÄtenÃ­...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Save All</source>
+        <translation>&amp;UloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+S</source>
+        <translation>Ctrl+S</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/>
+        <location line="+11"/>
+        <source>Save &amp;As...</source>
+        <translation>UloÅŸit &amp;jako...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Save As...</source>
+        <translation>UloÅŸit jako...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Save changes made to this Qt translation source file into a new file.</source>
+        <translation>UloÅŸit zmÄny provedenÃ© v tomto Qt zdrojovÃ©m souboru s pÅekladem do novÃ©ho souboru.</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+4"/>
+        <source>&amp;Release</source>
+        <translation>&amp;Vydat</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <source>Create a Qt message file suitable for released applications from the current message file.</source>
+        <translation>VytvoÅit Qt soubor se zprÃ¡vami vhodnÃœ pro vydanÃ© aplikace (soubor QM) ze souÄasnÃ©ho souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Print...</source>
+        <translation>&amp;Tisk...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+P</source>
+        <translation>Ctrl+P</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Undo</source>
+        <translation>&amp;ZpÄt</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Recently Opened &amp;Files</source>
+        <translation>Naposledy upravovanÃ© sou&amp;bory</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Save</source>
+        <translation>UloÅŸit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print a list of all the translation units in the current translation source file.</source>
+        <translation>Vytisknout seznam se vÅ¡emi pÅekladovÃœmi jednotkami v souÄasnÃ©m zdrojovÃ©m souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Undo the last editing operation performed on the current translation.</source>
+        <translation>PoslednÃ­ zmÄnu provedenou v souÄasnÃ©m pÅekladu vrÃ¡tit zpÄt.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+Z</source>
+        <translation>Ctrl+Z</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Znovu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Redo an undone editing operation performed on the translation.</source>
+        <translation>PoslednÃ­ zpÄt vrÃ¡cenou zmÄnu v pÅekladu provÃ©st znovu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+Y</source>
+        <translation>Ctrl+Y</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Cu&amp;t</source>
+        <translation>&amp;Vyjmout</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copy the selected translation text to the clipboard and deletes it.</source>
+        <translation>ZkopÃ­rovat vybranÃœ text s pÅekladem do schrÃ¡nky a smazat jej.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+X</source>
+        <translation>Ctrl+X</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copy the selected translation text to the clipboard.</source>
+        <translation>ZkopÃ­rovat vybranÃœ text s pÅekladem do schrÃ¡nky.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+C</source>
+        <translation>Ctrl+C</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Paste</source>
+        <translation>&amp;VloÅŸit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Paste the clipboard text into the translation.</source>
+        <translation>VloÅŸit text ze schrÃ¡nky do pÅekladu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+V</source>
+        <translation>Ctrl+V</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Select &amp;All</source>
+        <translation>Vybrat &amp;vÅ¡e</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Select the whole translation text.</source>
+        <translation>Vybrat celÃœ text s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+A</source>
+        <translation>Ctrl+A</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Find...</source>
+        <translation>&amp;Hledat...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Search for some text in the translation source file.</source>
+        <translation>Hledat text v souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+F</source>
+        <translation>Ctrl+F</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Find &amp;Next</source>
+        <translation>Hledat &amp;dÃ¡l</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Continue the search where it was left.</source>
+        <translation>PokraÄovat v hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>F3</source>
+        <translation>F3</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Prev Unfinished</source>
+        <translation>&amp;PÅedchozÃ­ nevyÅÃ­zenÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Close All</source>
+        <translation>&amp;ZavÅÃ­t vÅ¡e</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+W</source>
+        <translation>Ctrl+W</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+K</source>
+        <translation>Ctrl+K</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Next Unfinished</source>
+        <translation>&amp;DalÅ¡Ã­ nevyÅÃ­zenÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>P&amp;rev</source>
+        <translation>PÅed&amp;chozÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+Shift+K</source>
+        <translation>Ctrl+Shift+K</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ne&amp;xt</source>
+        <translation>Da&amp;lÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Done and Next</source>
+        <translation>&amp;Hotovo a dalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies the source text into the translation field.</source>
+        <translation>KopÃ­ruje zdrojovÃœ text do pole s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+B</source>
+        <translation>Ctrl+B</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Accelerators</source>
+        <translation>&amp;AkcelerÃ¡tory</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Ending Punctuation</source>
+        <translation>&amp;Interpunkce na konci</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Phrase matches</source>
+        <translation>&amp;SlovnÃ­k</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Place &amp;Marker Matches</source>
+        <translation>DrÅŸitel &amp;mÃ­sta</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;New Phrase Book...</source>
+        <translation>&amp;NovÃœ slovnÃ­k...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Create a new phrase book.</source>
+        <translation>VytvoÅit novÃœ slovnÃ­k.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+N</source>
+        <translation>Ctrl+N</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Open Phrase Book...</source>
+        <translation>&amp;OtevÅÃ­t slovnÃ­k...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Open a phrase book to assist translation.</source>
+        <translation>OtevÅÃ­t slovnÃ­k kvÅ¯li podpoÅe pÅi pÅekladu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+H</source>
+        <translation>Ctrl+H</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Reset Sorting</source>
+        <translation>ÅazenÃ­ &amp;vrÃ¡tit zpÄt</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Sort the items back in the same order as in the message file.</source>
+        <translation>SeÅadit zÃ¡znamy ve stejnÃ©m poÅadÃ­ jako v pÅ¯vodnÃ­m souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Display guesses</source>
+        <translation>UkÃ¡zat &amp;nÃ¡vrhy</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Set whether or not to display translation guesses.</source>
+        <translation>Zapnout/Vypnout zobrazenÃ­ nÃ¡vrhÅ¯ k pÅekladu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Statistics</source>
+        <translation>S&amp;tatistika</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Display translation statistics.</source>
+        <translation>UkÃ¡zat statistiku k pÅekladu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Manual</source>
+        <translation>&amp;PÅÃ­ruÄka</translation>
+    </message>
+    <message>
+        <location/>
+        <source>F1</source>
+        <translation>F1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>About Qt Linguist</source>
+        <translation>O Qt Linguistu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>About Qt</source>
+        <translation>O Qt</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Display information about the Qt toolkit by Trolltech.</source>
+        <translation>Zobrazit informace o sadÄ nÃ¡strojÅ¯ Qt od Trolltechu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;What&apos;s This?</source>
+        <translation>&amp;Copak je asi toto?</translation>
+    </message>
+    <message>
+        <location/>
+        <source>What&apos;s This?</source>
+        <translation>Copak je asi toto?</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Enter What&apos;s This? mode.</source>
+        <translation>Zapnout reÅŸim &quot;Copak je asi toto?&quot;.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Shift+F1</source>
+        <translation>Shift+F1</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Search And Translate...</source>
+        <translation>Hledat a &amp;pÅeklÃ¡dat...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Replace the translation on all entries that matches the search source text.</source>
+        <translation>Nahradit pÅeklad u vÅ¡ech zÃ¡znamÅ¯, kterÃ© odpovÃ­dajÃ­ hledanÃ©mu textu.</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+21"/>
+        <source>&amp;Batch Translation...</source>
+        <translation>&amp;AutomatickÃœ pÅeklad...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Batch translate all entries using the information in the phrase books.</source>
+        <translation>Automaticky pÅeloÅŸit vÅ¡echny zÃ¡znamy s pomocÃ­ slovnÃ­kÅ¯.</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-34"/>
+        <location line="+10"/>
+        <source>Release As...</source>
+        <translation>Vydat jako...</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2004"/>
+        <source></source>
+        <comment>This is the application&apos;s main window.</comment>
+        <translation></translation>
+    </message>
+    <message>
+        <location line="+188"/>
+        <source>Source text</source>
+        <translation>ZdrojovÃœ text</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <location line="+25"/>
+        <source>Index</source>
+        <translation>RejstÅÃ­k</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <location line="+62"/>
+        <source>Context</source>
+        <translation>Souvislosti</translation>
+    </message>
+    <message>
+        <location line="-61"/>
+        <source>Items</source>
+        <translation>ZÃ¡znamy</translation>
+    </message>
+    <message>
+        <location line="+78"/>
+        <source>This panel lists the source contexts.</source>
+        <translation>V tomto panelu jsou ukazovÃ¡ny souvislosti.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Strings</source>
+        <translation>ÅetÄzce</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Phrases and guesses</source>
+        <translation>SlovnÃ­k a nÃ¡vrhy</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Sources and Forms</source>
+        <translation>ZdrojovÃ© soubory a formulÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Warnings</source>
+        <translation>UpozornÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source> MOD </source>
+        <comment>status bar: file(s) modified</comment>
+        <translation>ZmÄnÄno</translation>
+    </message>
+    <message>
+        <location line="+130"/>
+        <source>Loading...</source>
+        <translation>NahrÃ¡vÃ¡ se...</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <location line="+22"/>
+        <source>Loading File - Qt Linguist</source>
+        <translation>NahrÃ¡vÃ¡ se soubor - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="-21"/>
+        <source>The file &apos;%1&apos; does not seem to be related to the currently open file(s) &apos;%2&apos;.
+
+Close the open file(s) first?</source>
+        <translation>NezdÃ¡ se, ÅŸe by soubor &apos;%1&apos; souvisel s jiÅŸ otevÅenÃœmi soubory &apos;%2&apos;.
+
+ZavÅÃ­t nejprve jiÅŸ otevÅenÃœ soubor(y)?</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>The file &apos;%1&apos; does not seem to be related to the file &apos;%2&apos; which is being loaded as well.
+
+Skip loading the first named file?</source>
+        <translation>NezdÃ¡ se, ÅŸe by soubor &apos;%1&apos; souvisel s jiÅŸ otevÅenÃœm souborem &apos;%2&apos;, kterÃœ je rovnÄÅŸ nahrÃ¡n.
+
+PÅeskoÄit nahrÃ¡vÃ¡nÃ­ prve jmenovanÃ©ho souboru?</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+61"/>
+        <source>%n translation unit(s) loaded.</source>
+        <translation>
+            <numerusform>NahrÃ¡na jedna pÅekladovÃ¡ jednotka.</numerusform>
+            <numerusform>NahrÃ¡ny %n pÅekladovÃ© jednotky.</numerusform>
+            <numerusform>NahrÃ¡ny %n pÅekladovÃ© jednotky.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+93"/>
+        <source>Related files (%1);;</source>
+        <translation>PÅÃ­buznÃ© soubory (%1);;</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Open Translation Files</source>
+        <translation>OtevÅÃ­t soubory s pÅeklady</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+31"/>
+        <source>File saved.</source>
+        <translation>Soubor uloÅŸen.</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/>
+        <location line="+1165"/>
+        <source>Release</source>
+        <translation>Vydat</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1164"/>
+        <source>Qt message files for released applications (*.qm)
+All files (*)</source>
+        <translation>Qt soubory se zprÃ¡vami pro vydanÃ© aplikace (*.qm)
+VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location line="+12"/>
+        <source>File created.</source>
+        <translation>Soubor vytvoÅen.</translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <location line="+355"/>
+        <source>Printing...</source>
+        <translation>Tisk...</translation>
+    </message>
+    <message>
+        <location line="-347"/>
+        <source>Context: %1</source>
+        <translation>Souvislosti: %1</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>finished</source>
+        <translation>vyÅÃ­zeno</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>unresolved</source>
+        <translation>nevyÅeÅ¡eno</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>obsolete</source>
+        <translation>zastaralÃ©</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <location line="+307"/>
+        <source>Printing... (page %1)</source>
+        <translation>Tisk... (strana %1)</translation>
+    </message>
+    <message>
+        <location line="-300"/>
+        <location line="+307"/>
+        <source>Printing completed</source>
+        <translation>Tisk dokonÄen</translation>
+    </message>
+    <message>
+        <location line="-305"/>
+        <location line="+307"/>
+        <source>Printing aborted</source>
+        <translation>Tisk zruÅ¡en</translation>
+    </message>
+    <message>
+        <location line="-232"/>
+        <source>Search wrapped.</source>
+        <translation>HledÃ¡nÃ­ zaÄÃ­nÃ¡ odshora.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location line="+278"/>
+        <location line="+34"/>
+        <location line="+24"/>
+        <location line="+22"/>
+        <location line="+516"/>
+        <location line="+1"/>
+        <location line="+274"/>
+        <location line="+40"/>
+        <location line="+10"/>
+        <source>Qt Linguist</source>
+        <translation>Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="-1198"/>
+        <location line="+102"/>
+        <source>Cannot find the string &apos;%1&apos;.</source>
+        <translation>Nelze najÃ­t ÅetÄzec &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="-82"/>
+        <source>Search And Translate in &apos;%1&apos; - Qt Linguist</source>
+        <translation>Hledat a pÅeklÃ¡dat v &apos;%1&apos; - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <location line="+23"/>
+        <location line="+24"/>
+        <source>Translate - Qt Linguist</source>
+        <translation>PÅeklad - Qt Linguist</translation>
+    </message>
+    <message numerus="yes">
+        <location line="-46"/>
+        <source>Translated %n entry(s)</source>
+        <translation>
+            <numerusform>PÅeloÅŸen jeden zÃ¡znam</numerusform>
+            <numerusform>PÅeloÅŸeny %n zÃ¡znamy</numerusform>
+            <numerusform>PÅeloÅŸeny %n zÃ¡znamy</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>No more occurrences of &apos;%1&apos;. Start over?</source>
+        <translation>ÅœÃ¡dnÃ© dalÅ¡Ã­ vÃœskyty &apos;%1&apos;. ZaÄÃ­t znovu?</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Create New Phrase Book</source>
+        <translation>VytvoÅit novÃœ slovnÃ­k</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Qt phrase books (*.qph)
+All files (*)</source>
+        <translation>SlovnÃ­ky Qt (*.qph)
+VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Phrase book created.</source>
+        <translation>SlovnÃ­k vytvoÅen.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Open Phrase Book</source>
+        <translation>OtevÅÃ­t slovnÃ­k</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Qt phrase books (*.qph);;All files (*)</source>
+        <translation>SlovnÃ­ky Qt (*.qph);;VÅ¡echny soubory (*)</translation>
+    </message>
+    <message numerus="yes">
+        <location line="+7"/>
+        <source>%n phrase(s) loaded.</source>
+        <translation>
+            <numerusform>NahrÃ¡n jeden zÃ¡znam ve slovnÃ­ku.</numerusform>
+            <numerusform>NahrÃ¡ny %n zÃ¡znamy ve slovnÃ­ku.</numerusform>
+            <numerusform>NahrÃ¡ny %n zÃ¡znamy ve slovnÃ­ku.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location line="+93"/>
+        <location line="+3"/>
+        <location line="+7"/>
+        <source>Add to phrase book</source>
+        <translation>PÅidat do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>No appropriate phrasebook found.</source>
+        <translation>Nelze nalÃ©zt ÅŸÃ¡dnÃœ pÅÃ­sluÅ¡nÃœ slovnÃ­k.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Adding entry to phrasebook %1</source>
+        <translation>PÅidÃ¡vÃ¡ se zÃ¡znam do slovnÃ­ku %1</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Select phrase book to add to</source>
+        <translation>Do kterÃ©ho slovnÃ­ku se mÃ¡ zÃ¡znam pÅidat</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Unable to launch Qt Assistant (%1)</source>
+        <translation>Qt Assistant nelze spustit (%1)</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Version %1</source>
+        <translation>Verze %1</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist is a tool for adding translations to Qt applications.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source>
+        <translation>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist je nÃ¡strojem pro pÅidÃ¡vÃ¡nÃ­ pÅekladÅ¯ do aplikacÃ­ Qt.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation a/nebo jejÃ­ dceÅinnÃ¡ spoleÄnost(i).</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Do you want to save the modified files?</source>
+        <translation>Chcete uloÅŸit zmÄnÄnÃ© soubory?</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Do you want to save &apos;%1&apos;?</source>
+        <translation>Chcete uloÅŸit &apos;%1&apos;?</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Qt Linguist[*]</source>
+        <translation>Qt Linguist[*]</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1[*] - Qt Linguist</source>
+        <translation>%1[*] - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+267"/>
+        <location line="+12"/>
+        <source>No untranslated translation units left.</source>
+        <translation>Nezbyly ÅŸÃ¡dnÃ© nepÅeloÅŸenÃ© pÅekladovÃ© jednotky.</translation>
+    </message>
+    <message>
+        <location line="+176"/>
+        <source>&amp;Window</source>
+        <translation>&amp;Okno</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Minimize</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ctrl+M</source>
+        <translation>Ctrl+M</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Display the manual for %1.</source>
+        <translation>Zobrazit pÅÃ­ruÄku k %1.</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Display information about %1.</source>
+        <translation>Zobrazit Ãºdaje o %1.</translation>
+    </message>
+    <message>
+        <location line="+70"/>
+        <source>&amp;Save &apos;%1&apos;</source>
+        <translation>&amp;UloÅŸit &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Save &apos;%1&apos; &amp;As...</source>
+        <translation>&apos;%1&apos; uloÅŸit &amp;jako...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Release &apos;%1&apos;</source>
+        <translation>Vydat &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Release &apos;%1&apos; As...</source>
+        <translation>&apos;%1&apos; vydat jako...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Close &apos;%1&apos;</source>
+        <translation>&amp;ZavÅÃ­t &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+13"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>Save All</source>
+        <translation>UloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
+        <source>&amp;Release All</source>
+        <translation>&amp;Vydat vÅ¡e</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
+        <source>Close All</source>
+        <translation>ZavÅÃ­t vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Translation File &amp;Settings for &apos;%1&apos;...</source>
+        <translation>NastavenÃ­ &amp;souboru s pÅekladem pro &apos;%1&apos; ...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Batch Translation of &apos;%1&apos;...</source>
+        <translation>&amp;AutomatickÃœ pÅeklad &apos;%1&apos; ...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Search And &amp;Translate in &apos;%1&apos;...</source>
+        <translation>Hledat a &amp;pÅeklÃ¡dat v &apos;%1&apos; ...</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Search And &amp;Translate...</source>
+        <translation>Hledat a &amp;pÅeklÃ¡dat...</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+51"/>
+        <source>File</source>
+        <translation>Soubor</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
+        <source>Edit</source>
+        <translation>Ãpravy</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
+        <source>Translation</source>
+        <translation>PÅeklad</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
+        <source>Validation</source>
+        <translation>SchvÃ¡lenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+84"/>
+        <source>Cannot read from phrase book &apos;%1&apos;.</source>
+        <translation>Nelze ÄÃ­st ze slovnÃ­ku &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Close this phrase book.</source>
+        <translation>Tento slovnÃ­k zavÅÃ­t.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Enables you to add, modify, or delete entries in this phrase book.</source>
+        <translation>UmoÅŸnÃ­ vloÅŸit, mÄnit nebo odstranit zÃ¡znamy z tohoto slovnÃ­ku.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Print the entries in this phrase book.</source>
+        <translation>Vytisknout zÃ¡znamy z tohoto slovnÃ­ku.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Cannot create phrase book &apos;%1&apos;.</source>
+        <translation>Nelze vytvoÅit slovnÃ­k &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Do you want to save phrase book &apos;%1&apos;?</source>
+        <translation>Chcete uloÅŸit slovnÃ­k &apos;%1&apos;?</translation>
+    </message>
+    <message>
+        <location line="+323"/>
+        <source>All</source>
+        <translation>VÅ¡e</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
+        <source>Open/Refresh Form &amp;Preview</source>
+        <translation>OtevÅÃ­t/Obnovit &amp;nÃ¡hled na formulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Form Preview Tool</source>
+        <translation>NÃ¡stroj pro nÃ¡hled na formulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>F5</source>
+        <translation>F5</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-536"/>
+        <source>Translation File &amp;Settings...</source>
+        <translation>&amp;NastavenÃ­ souboru s pÅekladem...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Add to Phrase Book</source>
+        <translation>&amp;PÅidat do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+T</source>
+        <translation>Ctrl+T</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+J</source>
+        <translation>Ctrl+J</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Ctrl+Shift+J</source>
+        <translation>Ctrl+Shift+J</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Previous unfinished item</source>
+        <translation>PÅedchozÃ­ nevyÅÃ­zenÃœ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Next unfinished item</source>
+        <translation>DalÅ¡Ã­ nevyÅÃ­zenÃœ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Move to previous item</source>
+        <translation>JÃ­t na pÅedchozÃ­ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Next item</source>
+        <translation>DalÅ¡Ã­ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Mark item as done and move to the next unfinished item</source>
+        <translation>OznaÄit zÃ¡znam jako vyÅÃ­zenÃœ a jÃ­t na dalÅ¡Ã­ nevyÅÃ­zenÃœ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies the source text into the translation field</source>
+        <translation>KopÃ­ruje zdrojovÃœ text do pole s pÅekladem</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of accelerators</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ akcelerÃ¡torÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of ending punctuation</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ znaku na konci vÄty na konci textu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle checking that phrase suggestions are used</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ pouÅŸitÃ­ zÃ¡znamÅ¯ ze slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Toggle the validity check of place markers</source>
+        <translation>Zapnout/Vypnout ovÄÅenÃ­ drÅŸitelÅ¯ mÃ­sta</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source>
+        <translation>VytvoÅit z nynÄjÅ¡Ã­ho pÅekladovÃ©ho souboru soubor s hlÃ¡Å¡enÃ­mi Qt vhodnÃœ pro vydanÃ© aplikace. NÃ¡zev souboru bude automaticky odvozen z nÃ¡zvu souboru TS.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Length Variants</source>
+        <translation>Varianty dÃ©lky</translation>
+    </message>
+</context>
+<context>
+    <name>MessageEditor</name>
+    <message>
+        <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+42"/>
+        <source></source>
+        <comment>This is the right panel of the main window.</comment>
+        <translation></translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Russian</source>
+        <translation>RuskÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>German</source>
+        <translation>NÄmeckÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Japanese</source>
+        <translation>JaponskÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>French</source>
+        <translation>FrancouzskÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Polish</source>
+        <translation>PolskÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Chinese</source>
+        <translation>ÄÃ­nskÃœ</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>This whole panel allows you to view and edit the translation of some source text.</source>
+        <translation>CelÃœ tento panel umoÅŸÅuje zobrazenÃ­ a Ãºpravy pÅekladu zdrojovÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Source text</source>
+        <translation>ZdrojovÃœ text</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This area shows the source text.</source>
+        <translation>Tato oblast ukazuje zdrojovÃœ text.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Source text (Plural)</source>
+        <translation>ZdrojovÃœ text (Plural)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This area shows the plural form of the source text.</source>
+        <translation>Tato oblast ukazuje mnoÅŸnÃ© ÄÃ­slo zdrojovÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Developer comments</source>
+        <translation>VÃœvojÃ¡Åovy poznÃ¡mky</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>This area shows a comment that may guide you, and the context in which the text occurs.</source>
+        <translation>Tato oblast ukazuje pÅÃ­padn poznÃ¡mky, jeÅŸ vÃ¡s mohou vÃ©st, a souvislosti, v nichÅŸ se text vyskytuje.</translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source>
+        <translation>Sem mÅ¯ÅŸete vepsat poznÃ¡mky urÄenÃ© pro vaÅ¡e vlastnÃ­ pouÅŸitÃ­. Na pÅeklad nemajÃ­ ÅŸÃ¡dnÃœ vliv.</translation>
+    </message>
+    <message>
+        <location line="+232"/>
+        <source>%1 translation (%2)</source>
+        <translation>PÅeklad %1 (%2)</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>This is where you can enter or modify the translation of the above source text.</source>
+        <translation>Tady mÅ¯ÅŸete zadÃ¡vat nebo mÄnit pÅeklad zdrojovÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 translation</source>
+        <translation>PÅeklad %1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>%1 translator comments</source>
+        <translation>%1 pÅekladatelovy poznÃ¡mky</translation>
+    </message>
+    <message>
+        <location line="+157"/>
+        <source>&apos;%1&apos;
+Line: %2</source>
+        <translation>&apos;%1&apos;
+ÅÃ¡dek: %2</translation>
+    </message>
+</context>
+<context>
+    <name>MessageModel</name>
+    <message>
+        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/>
+        <source>Completion status for %1</source>
+        <translation>Stav zpracovÃ¡nÃ­ %1</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>&lt;file header&gt;</source>
+        <translation>&lt;hlaviÄka souboru&gt;</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&lt;context comment&gt;</source>
+        <translation>&lt;souvisejÃ­cÃ­ poznÃ¡mka&gt;</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>&lt;unnamed context&gt;</source>
+        <translation>&lt;nepojmenovanÃ¡ souvislost&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>MsgEdit</name>
+    <message>
+        <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-614"/>
+        <source></source>
+        <comment>This is the right panel of the main window.</comment>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>PhraseBookBox</name>
+    <message>
+        <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+12"/>
+        <source></source>
+        <comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
+        <translation></translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>(New Entry)</source>
+        <translation>(NovÃœ zÃ¡znam)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1[*] - Qt Linguist</source>
+        <translation>%1[*] - Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+90"/>
+        <source>Qt Linguist</source>
+        <translation>Qt Linguist</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cannot save phrase book &apos;%1&apos;.</source>
+        <translation>Nelze uloÅŸit slovnÃ­k &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/phrasebookbox.ui"/>
+        <source>Edit Phrase Book</source>
+        <translation>Upravit slovnÃ­k</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
+        <translation>Toto okno vÃ¡m umoÅŸnÃ­ vloÅŸit, mÄnit nebo odstranit zÃ¡znamy z tohoto slovnÃ­ku.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Translation:</source>
+        <translation>&amp;PÅeklad:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This is the phrase in the target language corresponding to the source phrase.</source>
+        <translation>Toto je text, kterÃœ v cÃ­lovÃ©m jazyce odpovÃ­dÃ¡ zdrojovÃ©mu textu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>S&amp;ource phrase:</source>
+        <translation>&amp;ZdrojovÃœ text:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This is a definition for the source phrase.</source>
+        <translation>Toto je vymezenÃ­ zdrojovÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>This is the phrase in the source language.</source>
+        <translation>Toto je text ve zdrojovÃ©m jazyce.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Definition:</source>
+        <translation>&amp;VymezenÃ­:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to add the phrase to the phrase book.</source>
+        <translation>Sem klepnÄte kvÅ¯li vloÅŸenÃ­ novÃ©ho zÃ¡znamu do slovnÃ­ku.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;New Entry</source>
+        <translation>&amp;NovÃœ zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to remove the entry from the phrase book.</source>
+        <translation>Sem klepnÄte kvÅ¯li odstranÄnÃ­ novÃ©ho zÃ¡znamu ze slovnÃ­ku.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Remove Entry</source>
+        <translation>&amp;Odstranit zÃ¡znam</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Settin&amp;gs...</source>
+        <translation>&amp;NastavenÃ­...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to save the changes made.</source>
+        <translation>Sem klepnÄte kvÅ¯li uloÅŸenÃ­ provedenÃœch zmÄn.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to close this window.</source>
+        <translation>Sem klepnÄte kvÅ¯li zavÅenÃ­ tohoto okna.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>PhraseModel</name>
+    <message>
+        <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+117"/>
+        <source>Source phrase</source>
+        <translation>ZdrojovÃœ text</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Translation</source>
+        <translation>PÅeklad</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Definition</source>
+        <translation>VymezenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>PhraseView</name>
+    <message>
+        <location filename="../tools/linguist/linguist/phraseview.cpp" line="+122"/>
+        <source>Insert</source>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Edit</source>
+        <translation>Upravit</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>Guess (%1)</source>
+        <translation>NÃ¡vrh (%1)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Guess</source>
+        <translation>NÃ¡vrh</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../tools/linguist/shared/qm.cpp" line="+12"/>
+        <source>Compiled Qt translations</source>
+        <translation>SestavenÃ© pÅeklady Qt</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1280"/>
+        <source>Translation files (%1);;</source>
+        <translation>PÅekladovÃ© soubory (%1);;</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>All files (*)</source>
+        <translation>VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/>
+        <location line="+18"/>
+        <location line="+67"/>
+        <location line="+39"/>
+        <location line="+17"/>
+        <location line="+15"/>
+        <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/>
+        <source>Qt Linguist</source>
+        <translation>Qt Linguist</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/shared/po.cpp" line="+658"/>
+        <source>GNU Gettext localization files</source>
+        <translation>PÅekladovÃ© soubory GNU Gettext</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
+        <source>Qt translation sources (format 1.1)</source>
+        <translation>PÅekladovÃ© soubory Qt (verze formÃ¡tu 1.1)</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Qt translation sources (format 2.0)</source>
+        <translation>PÅekladovÃ© soubory Qt (verze formÃ¡tu 2.0)</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Qt translation sources (latest format)</source>
+        <translation>PÅekladovÃ© soubory Qt (nejnovÄjÅ¡Ã­ formÃ¡t)</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/shared/xliff.cpp" line="+827"/>
+        <source>XLIFF localization files</source>
+        <translation>PÅekladovÃ© soubory XLIFF</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/shared/qph.cpp" line="+183"/>
+        <source>Qt Linguist &apos;Phrase Book&apos;</source>
+        <translation>SlovnÃ­k Qt Linguist</translation>
+    </message>
+</context>
+<context>
+    <name>SourceCodeView</name>
+    <message>
+        <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/>
+        <source>&lt;i&gt;Source code not available&lt;/i&gt;</source>
+        <translation>&lt;i&gt;ZdrojovÃœ text nenÃ­ dostupnÃœ&lt;/i&gt;</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>&lt;i&gt;File %1 not available&lt;/i&gt;</source>
+        <translation>&lt;i&gt;Soubor %1 nenÃ­ dostupnÃœ&lt;/i&gt;</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&lt;i&gt;File %1 not readable&lt;/i&gt;</source>
+        <translation>&lt;i&gt;Soubor %1 nenÃ­ ÄitelnÃœ&lt;/i&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>Statistics</name>
+    <message>
+        <location filename="../tools/linguist/linguist/statistics.ui"/>
+        <source>Statistics</source>
+        <translation>Statistiky</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Translation</source>
+        <translation>PÅeklad</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Source</source>
+        <translation>Zdroj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Words:</source>
+        <translation>Slov:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Characters:</source>
+        <translation>ZnakÅ¯:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Characters (with spaces):</source>
+        <translation>ZnakÅ¯ (s mezerami):</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>TranslateDialog</name>
+    <message>
+        <location filename="../tools/linguist/linguist/translatedialog.ui"/>
+        <source>This window allows you to search for some text in the translation source file.</source>
+        <translation>Toto okno vÃ¡m umoÅŸÅuje hledÃ¡nÃ­ textu ve zdrojovÃ©m souboru s pÅekladem.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Type in the text to search for.</source>
+        <translation>Zadejte text, kterÃœ se mÃ¡ hledat.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Find &amp;source text:</source>
+        <translation>Hledat &amp;zdrojovÃœ text:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Translate to:</source>
+        <translation>&amp;PÅeklad:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Search options</source>
+        <translation>NastavenÃ­ hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+        <translation>KdyÅŸ je zapnuto, texty jako &apos;TeX&apos; a &apos;tex&apos; se povaÅŸujÃ­ za rozdÃ­lnÃ©.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Match &amp;case</source>
+        <translation>DbÃ¡t na &amp;psanÃ­ velkÃœch a malÃœch pÃ­smen</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Mark new translation as &amp;finished</source>
+        <translation>NovÃœ pÅeklad oznaÄit jako &amp;vyÅÃ­zenÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to find the next occurrence of the text you typed in.</source>
+        <translation>KlepnÄte sem pro skok k dalÅ¡Ã­mu vÃœskytu hledÃ¡nÃ©ho textu.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Find Next</source>
+        <translation>Hledat dÃ¡l</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Translate</source>
+        <translation>PÅeloÅŸit</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Translate All</source>
+        <translation>PÅeloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Click here to close this window.</source>
+        <translation>KlepnÄte sem pro zavÅenÃ­ tohoto okna.</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+</context>
+<context>
+    <name>TranslationSettingsDialog</name>
+    <message>
+        <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/>
+        <source>Any Country</source>
+        <translation>ZemÄ</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <location line="+8"/>
+        <source>Settings for &apos;%1&apos; - Qt Linguist</source>
+        <translation>NastavenÃ­ pro &apos;%1&apos; - Qt Linguist</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/translationsettings.ui"/>
+        <source>Source language</source>
+        <translation>ZdrojovÃœ jazyk</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Language</source>
+        <translation>Jazyk</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Country/Region</source>
+        <translation>ZemÄ/Oblast</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Target language</source>
+        <translation>CÃ­lovÃœ jazyk</translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/linguist_ru.ts
===================================================================
--- /trunk/translations/linguist_ru.ts	(revision 768)
+++ /trunk/translations/linguist_ru.ts	(revision 769)
@@ -5,5 +5,5 @@
     <name>AboutDialog</name>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/>
         <source>Qt Linguist</source>
         <translation>Qt Linguist</translation>
@@ -13,50 +13,50 @@
     <name>BatchTranslationDialog</name>
     <message>
-        <location filename="../tools/linguist/linguist/batchtranslation.ui" line="+54"/>
+        <location filename="../tools/linguist/linguist/batchtranslation.ui"/>
         <source>Qt Linguist - Batch Translation</source>
         <translation>Qt Linguist - ÐÐ°ÐºÐµÑÐœÑÐ¹ Ð¿ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Options</source>
         <translation>ÐÐ°ÑÐ°ÐŒÐµÑÑÑ</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Set translated entries to finished</source>
         <translation>ÐÐŸÐŒÐµÑÐ°ÑÑ Ð¿ÐµÑÐµÐ²ÐµÐŽÐµÐœÐœÑÐµ Ð·Ð°Ð¿ÐžÑÐž ÐºÐ°Ðº Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐµ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Retranslate entries with existing translation</source>
         <translation>ÐÐµÑÐµÐ²ÐŸÐŽÐžÑÑ Ð·Ð°Ð¿ÐžÑÐž, ÑÐ¶Ðµ ÐžÐŒÐµÑÑÐžÐµ Ð¿ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Translate also finished entries</source>
         <translation>Ð¢Ð°ÐºÐ¶Ðµ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐžÑÑ Ð·Ð°Ð¿ÐžÑÐž Ñ Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐŒÐž Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°ÐŒÐž</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>Phrase book preference</source>
-        <translation>ÐÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÑÐµ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐž</translation>
-    </message>
-    <message>
-        <location line="+35"/>
+        <translation>ÐÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÑÐµ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐž</translation>
+    </message>
+    <message>
+        <location/>
         <source>Move up</source>
         <translation>ÐÐŸÐŽÐœÑÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move down</source>
         <translation>ÐÐ¿ÑÑÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+58"/>
+        <location/>
         <source>&amp;Run</source>
         <translation>&amp;ÐÑÐ¿ÐŸÐ»ÐœÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Cancel</source>
         <translation>ÐÑÐŒÐµÐœÐ°</translation>
@@ -92,13 +92,13 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/batchtranslation.ui" line="-126"/>
+        <location filename="../tools/linguist/linguist/batchtranslation.ui"/>
         <source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked</source>
         <translation>ÐÐŒÐµÐ¹ÑÐµ Ð² Ð²ÐžÐŽÑ, ÑÑÐŸ ÐžÐ·ÐŒÐµÐœÑÐœÐœÑÐµ Ð·Ð°Ð¿ÐžÑÐž Ð±ÑÐŽÑÑ ÐŸÑÐŒÐµÑÐµÐœÑ ÐºÐ°Ðº ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÑÐµ, ÐµÑÐ»Ðž ÐœÐµ Ð²ÐºÐ»ÑÑÐµÐœ Ð¿Ð°ÑÐ°ÐŒÐµÑÑ &quot;ÐÐŸÐŒÐµÑÐ°ÑÑ Ð¿ÐµÑÐµÐ²ÐµÐŽÐµÐœÐœÑÐµ Ð·Ð°Ð¿ÐžÑÐž ÐºÐ°Ðº Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐµ&quot;</translation>
     </message>
     <message>
-        <location line="+85"/>
+        <location/>
         <source>The batch translator will search through the selected phrase books in the order given above</source>
         <translation>ÐÐ°ÐºÐµÑÐœÑÐ¹ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑÐžÐº Ð±ÑÐŽÐµÑ ÐžÑÐºÐ°ÑÑ Ð² Ð²ÑÐ±ÑÐ°ÐœÐœÑÑ
- ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ°Ñ
+ Ð³Ð»ÐŸÑÑÐ°ÑÐžÑÑ
  Ð² ÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐŒ Ð²ÑÑÐµ Ð¿ÐŸÑÑÐŽÐºÐµ</translation>
     </message>
@@ -113,9 +113,15 @@
     <message>
         <location line="+4"/>
+        <location line="+8"/>
         <source>&lt;p&gt;[more duplicates omitted]</source>
         <translation>&lt;p&gt;[ÐŸÑÑÐ°Ð»ÑÐœÑÐµ Ð¿ÐŸÐ²ÑÐŸÑÑ ÐœÐµ ÑÐºÐ°Ð·Ð°ÐœÑ]</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="-5"/>
+        <source>&lt;p&gt;* ID: %1</source>
+        <translation>&lt;p&gt;* ID: %1</translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
         <translation>&lt;p&gt;* ÐÐŸÐœÑÐµÐºÑÑ: %1&lt;br&gt;* ÐÑÑÐŸÑÐœÐžÐº: %2</translation>
@@ -127,5 +133,5 @@
     </message>
     <message>
-        <location line="+70"/>
+        <location line="+71"/>
         <source>Linguist does not know the plural rules for &apos;%1&apos;.
 Will assume a single universal form.</source>
@@ -166,5 +172,5 @@
         <location line="+3"/>
         <source>A phrase book suggestion for &apos;%1&apos; was ignored.</source>
-        <translation>ÐÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐµ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ° ÐŽÐ»Ñ &apos;%1&apos; Ð¿ÑÐŸÐ¿ÑÑÐµÐœÐŸ.</translation>
+        <translation>ÐÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ ÐŽÐ»Ñ &apos;%1&apos; Ð¿ÑÐŸÐ¿ÑÑÐµÐœÐŸ.</translation>
     </message>
     <message>
@@ -196,30 +202,30 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/finddialog.ui" line="+60"/>
+        <location filename="../tools/linguist/linguist/finddialog.ui"/>
         <source>Find</source>
         <translation>ÐÐŸÐžÑÐº</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>This window allows you to search for some text in the translation source file.</source>
         <translation>ÐÐ°ÐœÐœÐŸÐµ ÐŸÐºÐœÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐžÑÐºÐ°ÑÑ ÑÐµÐºÑÑ Ð² ÑÐ°Ð¹Ð»Ðµ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>&amp;Find what:</source>
         <translation>&amp;ÐÑÐºÐ°ÑÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Type in the text to search for.</source>
         <translation>ÐÐ²ÐµÐŽÐžÑÐµ ÐžÑÐºÐŸÐŒÑÐ¹ ÑÐµÐºÑÑ.</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>Options</source>
         <translation>ÐÐ°ÑÐ°ÐŒÐµÑÑÑ</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Source texts are searched when checked.</source>
         <translation>ÐÑÐ»Ðž ÐŸÑÐŒÐµÑÐµÐœÐŸ, Ð¿ÐŸÐžÑÐº Ð±ÑÐŽÐµÑ Ð²ÐµÑÑÐžÑÑ Ð² ÐžÑÑ
@@ -229,5 +235,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Source texts</source>
         <translation>&amp;ÐÑÑ
@@ -235,5 +241,5 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Translations are searched when checked.</source>
         <translation>ÐÑÐ»Ðž ÐŸÑÐŒÐµÑÐµÐœÐŸ, Ð¿ÐŸÐžÑÐº Ð±ÑÐŽÐµÑ Ð²ÐµÑÑÐžÑÑ Ð² Ð¿ÐµÑÐµÐ²ÐµÐŽÑÐœÐœÑÑ
@@ -242,50 +248,50 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Translations</source>
         <translation>&amp;ÐÐµÑÐµÐ²ÐŸÐŽÑ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
         <translation>ÐÑÐ»Ðž ÐŸÑÐŒÐµÑÐµÐœÐŸ, ÑÑÑÐŸÐºÐž &quot;ÐÑÐÐŒÐÑ&quot; Ðž &quot;Ð¿ÑÐžÐŒÐµÑ&quot; Ð±ÑÐŽÐµÑ ÑÑÐžÑÐ°ÑÑÑÑ ÑÐ°Ð·ÐœÑÐŒÐž.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Match case</source>
         <translation>Ð¡ ÑÑÑÑÐŸÐŒ &amp;ÑÐµÐ³ÐžÑÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Comments and contexts are searched when checked.</source>
         <translation>ÐÑÐ»Ðž ÐŸÑÐŒÐµÑÐµÐœÐŸ, Ð¿ÐŸÐžÑÐº Ð±ÑÐŽÐµÑ Ð²ÐµÑÑÐžÑÑ Ð¿ÐŸ ÐºÐŸÐœÑÐµÐºÑÑÐ°ÐŒ Ðž ÐºÐŸÐŒÐŒÐµÐœÑÐ°ÑÐžÑÐŒ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Comments</source>
         <translation>&amp;ÐÐŸÐŒÐŒÐµÐœÑÐ°ÑÐžÐž</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Ignore &amp;accelerators</source>
         <translation>ÐÑÐŸÐ¿ÑÑÐºÐ°ÑÑ &amp;Ð°ÐºÑÐµÐ»ÐµÑÐ°ÑÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location/>
         <source>Click here to find the next occurrence of the text you typed in.</source>
         <translation>ÐÐ°Ð¹ÑÐž ÑÐ»ÐµÐŽÑÑÑÐµÐµ ÑÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ ÐŽÐ»Ñ Ð²Ð²ÐµÐŽÑÐœÐœÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Find Next</source>
         <translation>ÐÐ°Ð¹ÑÐž ÐŽÐ°Ð»ÐµÐµ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Click here to close this window.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Cancel</source>
         <translation>ÐÑÐŒÐµÐœÐ°</translation>
@@ -295,5 +301,5 @@
     <name>FormMultiWidget</name>
     <message>
-        <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+296"/>
+        <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/>
         <source>Alt+Delete</source>
         <extracomment>translate, but don&apos;t change</extracomment>
@@ -320,5 +326,5 @@
         <location line="+1"/>
         <source>Delete non-empty length variant?</source>
-        <translation type="unfinished"></translation>
+        <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÐœÐµÐ¿ÑÑÑÐŸÐ¹ Ð²Ð°ÑÐžÐ°ÐœÑ ÐŽÐ»ÐžÐœÑ?</translation>
     </message>
 </context>
@@ -326,8 +332,12 @@
     <name>LRelease</name>
     <message numerus="yes">
-        <location filename="../tools/linguist/shared/qm.cpp" line="+747"/>
+        <location filename="../tools/linguist/shared/qm.cpp" line="+763"/>
         <source>Dropped %n message(s) which had no ID.</source>
         <translation type="unfinished">
-            <numerusform></numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÐµÐœÐŸ %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ, Ñ ÐºÐŸÑÐŸÑÐŸÐ³ÐŸ ÐœÐµ Ð±ÑÐ»ÐŸ ID.</numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÐµÐœÐŸ %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÑ, Ñ ÐºÐŸÑÐŸÑÑÑ
+ ÐœÐµ Ð±ÑÐ»ÐŸ ID.</numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÐµÐœÐŸ %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÐ¹, Ñ ÐºÐŸÑÐŸÑÑÑ
+ ÐœÐµ Ð±ÑÐ»ÐŸ ID.</numerusform>
         </translation>
     </message>
@@ -336,5 +346,7 @@
         <source>Excess context/disambiguation dropped from %n message(s).</source>
         <translation type="unfinished">
-            <numerusform></numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÑÐœ Ð»ÐžÑÐœÐžÐ¹ ÐºÐŸÐœÑÐµÐºÑÑ ÐžÐ· %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÑ.</numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÑÐœ Ð»ÐžÑÐœÐžÐ¹ ÐºÐŸÐœÑÐµÐºÑÑ ÐžÐ· %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÐ¹.</numerusform>
+            <numerusform>Ð£ÐŽÐ°Ð»ÑÐœ Ð»ÐžÑÐœÐžÐ¹ ÐºÐŸÐœÑÐµÐºÑÑ ÐžÐ· %n ÑÐŸÐŸÐ±ÑÐµÐœÐžÐ¹.</numerusform>
         </translation>
     </message>
@@ -382,5 +394,5 @@
     <name>MainWindow</name>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1315"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1324"/>
         <source></source>
         <comment>This is the application&apos;s main window.</comment>
@@ -389,5 +401,5 @@
     </message>
     <message>
-        <location line="+158"/>
+        <location line="+160"/>
         <source>Source text</source>
         <translation>ÐÑÑ
@@ -402,15 +414,15 @@
     <message>
         <location line="-2"/>
-        <location line="+62"/>
+        <location line="+63"/>
         <source>Context</source>
         <translation>ÐÐŸÐœÑÐµÐºÑÑ</translation>
     </message>
     <message>
-        <location line="-61"/>
+        <location line="-62"/>
         <source>Items</source>
         <translation>ÐÐ°Ð¿ÐžÑÐž</translation>
     </message>
     <message>
-        <location line="+78"/>
+        <location line="+79"/>
         <source>This panel lists the source contexts.</source>
         <translation>Ð ÐŽÐ°ÐœÐœÐŸÐ¹ Ð¿Ð°ÐœÐµÐ»Ðž Ð¿ÐµÑÐµÑÐžÑÐ»ÐµÐœÑ ÐžÑÑ
@@ -418,10 +430,10 @@
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+13"/>
         <source>Strings</source>
         <translation>Ð¡ÑÑÐŸÐºÐž</translation>
     </message>
     <message>
-        <location line="+39"/>
+        <location line="+37"/>
         <source>Phrases and guesses</source>
         <translation>Ð€ÑÐ°Ð·Ñ Ðž Ð¿ÐŸÑ
@@ -446,5 +458,5 @@
     </message>
     <message>
-        <location line="+130"/>
+        <location line="+139"/>
         <source>Loading...</source>
         <translation>ÐÐ°Ð³ÑÑÐ·ÐºÐ°...</translation>
@@ -486,5 +498,5 @@
     </message>
     <message>
-        <location line="+93"/>
+        <location line="+94"/>
         <source>Related files (%1);;</source>
         <translation>Ð¡Ð²ÑÐ·Ð°ÐœÐœÑÐµ ÑÐ°Ð¹Ð»Ñ (%1);;</translation>
@@ -503,5 +515,5 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="+247"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/>
         <location line="+1165"/>
@@ -620,5 +632,5 @@
         <location line="+30"/>
         <source>Create New Phrase Book</source>
-        <translation>Ð¡ÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
+        <translation>Ð¡ÐŸÐ·ÐŽÐ°ÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
     </message>
     <message>
@@ -626,5 +638,5 @@
         <source>Qt phrase books (*.qph)
 All files (*)</source>
-        <translation>Ð Ð°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐž Qt (*.qph)
+        <translation>ÐÐ»ÐŸÑÑÐ°ÑÐžÐž Qt (*.qph)
 ÐÑÐµ ÑÐ°Ð¹Ð»Ñ (*)</translation>
     </message>
@@ -632,15 +644,15 @@
         <location line="+11"/>
         <source>Phrase book created.</source>
-        <translation>Ð Ð°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº ÑÐŸÐ·ÐŽÐ°Ðœ.</translation>
+        <translation>ÐÐ»ÐŸÑÑÐ°ÑÐžÐ¹ ÑÐŸÐ·ÐŽÐ°Ðœ.</translation>
     </message>
     <message>
         <location line="+17"/>
         <source>Open Phrase Book</source>
-        <translation>ÐÑÐºÑÑÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
+        <translation>ÐÑÐºÑÑÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Qt phrase books (*.qph);;All files (*)</source>
-        <translation>Ð Ð°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐž Qt (*.qph);;ÐÑÐµ ÑÐ°Ð¹Ð»Ñ (*)</translation>
+        <translation>ÐÐ»ÐŸÑÑÐ°ÑÐžÐž Qt (*.qph);;ÐÑÐµ ÑÐ°Ð¹Ð»Ñ (*)</translation>
     </message>
     <message numerus="yes">
@@ -658,5 +670,5 @@
         <location line="+7"/>
         <source>Add to phrase book</source>
-        <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
+        <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
     </message>
     <message>
@@ -664,15 +676,15 @@
         <source>No appropriate phrasebook found.</source>
         <translation>ÐÐŸÐŽÑ
-ÐŸÐŽÑÑÐžÐ¹ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº ÐœÐµ ÐœÐ°Ð¹ÐŽÐµÐœ.</translation>
+ÐŸÐŽÑÑÐžÐ¹ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ ÐœÐµ ÐœÐ°Ð¹ÐŽÐµÐœ.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Adding entry to phrasebook %1</source>
-        <translation>ÐÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ Ð·Ð°Ð¿ÐžÑÐž Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº %1</translation>
+        <translation>ÐÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ Ð·Ð°Ð¿ÐžÑÐž Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ %1</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Select phrase book to add to</source>
-        <translation>ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº, Ð² ÐºÐŸÑÐŸÑÑÐ¹ Ð¶ÐµÐ»Ð°ÐµÑÐµ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ ÑÑÐ°Ð·Ñ</translation>
+        <translation>ÐÑÐ±ÐµÑÐžÑÐµ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹, Ð² ÐºÐŸÑÐŸÑÑÐ¹ Ð¶ÐµÐ»Ð°ÐµÑÐµ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ ÑÑÐ°Ð·Ñ</translation>
     </message>
     <message>
@@ -780,5 +792,5 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="-11"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/>
         <location line="+11"/>
@@ -788,6 +800,5 @@
     </message>
     <message>
-        <location line="+508"/>
-        <location line="+3"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-9"/>
         <location line="+10"/>
@@ -808,5 +819,5 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="+118"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
         <source>&amp;Release All</source>
@@ -839,5 +850,5 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="-32"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+2"/>
         <source>Translation File &amp;Settings...</source>
@@ -845,5 +856,5 @@
     </message>
     <message>
-        <location line="-100"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
         <source>&amp;Batch Translation...</source>
@@ -856,5 +867,5 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="+28"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+51"/>
         <source>File</source>
@@ -862,5 +873,5 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
         <source>Edit</source>
@@ -868,5 +879,5 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
         <source>Translation</source>
@@ -874,5 +885,5 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
         <source>Validation</source>
@@ -880,5 +891,5 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
         <source>Help</source>
@@ -888,25 +899,25 @@
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+84"/>
         <source>Cannot read from phrase book &apos;%1&apos;.</source>
-        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÑ ÐžÐ· ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ° &apos;%1&apos;.</translation>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÑ ÐžÐ· Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ &apos;%1&apos;.</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Close this phrase book.</source>
-        <translation>ÐÐ°ÐºÑÑÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº.</translation>
+        <translation>ÐÐ°ÐºÑÑÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹.</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Enables you to add, modify, or delete entries in this phrase book.</source>
-        <translation>ÐÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÑÑÑ, ÐžÐ·ÐŒÐµÐœÑÑÑ Ðž ÑÐŽÐ°Ð»ÑÑÑ Ð·Ð°Ð¿ÐžÑÐž Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐµ.</translation>
+        <translation>ÐÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÑÑÑ, ÐžÐ·ÐŒÐµÐœÑÑÑ Ðž ÑÐŽÐ°Ð»ÑÑÑ Ð·Ð°Ð¿ÐžÑÐž Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐž.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Print the entries in this phrase book.</source>
-        <translation>ÐÐµÑÐ°ÑÑ Ð·Ð°Ð¿ÐžÑÐµÐ¹ ÑÑÐ°Ð· ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ°.</translation>
+        <translation>ÐÐµÑÐ°ÑÑ Ð·Ð°Ð¿ÐžÑÐµÐ¹ ÑÑÐ°Ð· Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ.</translation>
     </message>
     <message>
         <location line="+16"/>
         <source>Cannot create phrase book &apos;%1&apos;.</source>
-        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº &apos;%1&apos;.</translation>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÐ·ÐŽÐ°ÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ &apos;%1&apos;.</translation>
     </message>
     <message>
@@ -914,88 +925,88 @@
         <source>Do you want to save phrase book &apos;%1&apos;?</source>
         <translation>ÐÐµÐ»Ð°ÐµÑÐµ ÑÐŸÑ
-ÑÐ°ÐœÐžÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº &apos;%1&apos;?</translation>
-    </message>
-    <message>
-        <location line="+323"/>
+ÑÐ°ÐœÐžÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ &apos;%1&apos;?</translation>
+    </message>
+    <message>
+        <location line="+349"/>
         <source>All</source>
         <translation>ÐÑÐµ</translation>
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.ui" line="-751"/>
+        <location filename="../tools/linguist/linguist/mainwindow.ui"/>
         <source>MainWindow</source>
         <translation>ÐÐ»Ð°Ð²ÐœÐŸÐµ ÐŸÐºÐœÐŸ</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Phrases</source>
         <translation>Ð€ÑÐ°&amp;Ð·Ñ</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>&amp;Close Phrase Book</source>
-        <translation>&amp;ÐÐ°ÐºÑÑÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
-    </message>
-    <message>
-        <location line="+5"/>
+        <translation>&amp;ÐÐ°ÐºÑÑÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;Edit Phrase Book</source>
-        <translation>&amp;Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°Ñ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
-    </message>
-    <message>
-        <location line="+5"/>
+        <translation>&amp;Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°Ñ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;Print Phrase Book</source>
-        <translation>&amp;ÐÐµÑÐ°ÑÐ°ÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
-    </message>
-    <message>
-        <location line="+13"/>
+        <translation>&amp;ÐÐµÑÐ°ÑÐ°ÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
+    </message>
+    <message>
+        <location/>
         <source>V&amp;alidation</source>
         <translation>Ð&amp;ÑÐŸÐ²ÐµÑÐºÐ°</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>&amp;View</source>
         <translation>&amp;ÐÐžÐŽ</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>Vie&amp;ws</source>
         <translation>ÐÐžÐŽ&amp;Ñ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Toolbars</source>
         <translation>ÐÐ°Ðœ&amp;ÐµÐ»Ðž ÐžÐœÑÑÑÑÐŒÐµÐœÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&amp;Help</source>
         <translation>&amp;Ð¡Ð¿ÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>&amp;Translation</source>
         <translation>Ð&amp;ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;File</source>
         <translation>&amp;Ð€Ð°Ð¹Ð»</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>Recently Opened &amp;Files</source>
         <translation>ÐÐµÐŽÐ°Ð²ÐœÐŸ ÐŸÑÐºÑÑÑÑÐµ &amp;ÑÐ°Ð¹Ð»Ñ</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location/>
         <source>&amp;Edit</source>
         <translation>&amp;ÐÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location/>
         <source>&amp;Open...</source>
         <translation>&amp;ÐÑÐºÑÑÑÑ...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Open a Qt translation source file (TS file) for editing</source>
         <translation>ÐÑÐºÑÑÑÑ ÐžÑÑ
@@ -1003,10 +1014,10 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+O</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>E&amp;xit</source>
         <translation>Ð&amp;ÑÑ
@@ -1014,15 +1025,15 @@
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Close this window and exit.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ Ðž Ð²ÑÐ¹ÑÐž.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+Q</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Save</source>
         <translation>Ð¡ÐŸÑ
@@ -1030,5 +1041,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save changes made to this Qt translation source file</source>
         <translation>Ð¡ÐŸÑ
@@ -1037,5 +1048,5 @@
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Save As...</source>
         <translation>Ð¡ÐŸÑ
@@ -1043,5 +1054,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save changes made to this Qt translation source file into a new file.</source>
         <translation>Ð¡ÐŸÑ
@@ -1050,15 +1061,15 @@
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Create a Qt message file suitable for released applications from the current message file.</source>
         <translation>Ð¡ÐºÐŸÐŒÐ¿ÐžÐ»ÐžÑÐŸÐ²Ð°ÑÑ ÑÐ°Ð¹Ð» Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ° Qt ÐžÐ· ÑÐµÐºÑÑÐµÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°.</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Print...</source>
         <translation>&amp;ÐÐµÑÐ°ÑÑ...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Print a list of all the translation units in the current translation source file.</source>
         <translation>ÐÐµÑÐ°ÑÑ ÑÐ¿ÐžÑÐºÐ° Ð²ÑÐµÑ
@@ -1066,105 +1077,105 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+P</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Undo</source>
         <translation>&amp;ÐÑÐŒÐµÐœÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Undo the last editing operation performed on the current translation.</source>
         <translation>ÐÑÐŒÐµÐœÐžÑÑ Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐµ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐµ ÑÐµÐºÑÑÐµÐ³ÐŸ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+Z</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Redo</source>
         <translation>&amp;ÐÐŸÐ²ÑÐŸÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Redo an undone editing operation performed on the translation.</source>
         <translation>ÐÐŸÐ²ÑÐŸÑÐžÑÑ ÐŸÑÐŒÐµÐœÑÐœÐœÑÑ Ð¿ÑÐ°Ð²ÐºÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+Y</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Cu&amp;t</source>
         <translation>ÐÑÑ&amp;ÐµÐ·Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Copy the selected translation text to the clipboard and deletes it.</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐŸÑÐŒÐµÑÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ Ð² Ð±ÑÑÐµÑ ÐŸÐ±ÐŒÐµÐœÐ° Ðž ÑÐŽÐ°Ð»ÐžÑÑ ÐµÐ³ÐŸ ÐžÐ· ÐŸÑÐžÐ³ÐžÐœÐ°Ð»Ð°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+X</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Copy</source>
         <translation>&amp;ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Copy the selected translation text to the clipboard.</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐŸÑÐŒÐµÑÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ Ð² Ð±ÑÑÐµÑ ÐŸÐ±ÐŒÐµÐœÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+C</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Paste</source>
         <translation>&amp;ÐÑÑÐ°Ð²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Paste the clipboard text into the translation.</source>
         <translation>ÐÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ ÐžÐ· Ð±ÑÑÐµÑÐ° ÐŸÐ±ÐŒÐµÐœÐ° Ð² Ð¿ÐµÑÐµÐ²ÐŸÐŽ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+V</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Select &amp;All</source>
         <translation>Ð&amp;ÑÐŽÐµÐ»ÐžÑÑ Ð²ÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Select the whole translation text.</source>
         <translation>ÐÑÐŽÐµÐ»ÐžÑÑ Ð²ÐµÑÑ ÑÐµÐºÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+A</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Find...</source>
         <translation>&amp;ÐÐ°Ð¹ÑÐž...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Search for some text in the translation source file.</source>
         <translation>ÐÐ°Ð¹ÑÐž ÑÐµÐºÑÑ Ð² ÐžÑÑ
@@ -1172,106 +1183,105 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+F</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Find &amp;Next</source>
         <translation>ÐÐ°Ð¹ÑÐž ÐŽ&amp;Ð°Ð»ÐµÐµ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Continue the search where it was left.</source>
         <translation>ÐÑÐŸÐŽÐŸÐ»Ð¶ÐžÑÑ Ð¿ÐŸÐžÑÐº Ñ ÐŒÐµÑÑÐ°, Ð³ÐŽÐµ ÐŸÐœ Ð±ÑÐ» ÐŸÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>F3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Prev Unfinished</source>
         <translation>&amp;ÐÑÐµÐŽÑÐŽÑÑÐžÐ¹ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+348"/>
+        <location/>
         <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source>
         <translation>Ð¡ÐŸÐ·ÐŽÐ°ÐœÐžÐµ Ð³ÐŸÑÐŸÐ²ÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð° Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ° Qt ÐžÐ· ÑÐµÐºÑÑÐµÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°. ÐÐŒÑ ÑÐ°Ð¹Ð»Ð° Ð±ÑÐŽÐµÑ Ð°Ð²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐž ÐŸÐ¿ÑÐµÐŽÐµÐ»ÐµÐœÐŸ ÐžÐ· ÐžÐŒÐµÐœÐž .ts ÑÐ°Ð¹Ð»Ð°.</translation>
     </message>
     <message>
-        <location line="+136"/>
+        <location/>
         <source>Length Variants</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-478"/>
+        <translation>ÐÐ°ÑÐžÐ°ÐœÑÑ ÐŽÐ»ÐžÐœÑ</translation>
+    </message>
+    <message>
+        <location/>
         <source>Move to the previous unfinished item.</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž Ðº Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐŒÑ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÐŸÐŒÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+K</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Next Unfinished</source>
         <translation>&amp;Ð¡Ð»ÐµÐŽÑÑÑÐžÐ¹ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Move to the next unfinished item.</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÐŸÐŒÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+J</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>P&amp;rev</source>
         <translation>ÐÑ&amp;ÐµÐŽÑÐŽÑÑÐžÐ¹</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Move to the previous item.</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž Ðº Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐŒÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+Shift+K</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Ne&amp;xt</source>
         <translation>Ð¡&amp;Ð»ÐµÐŽÑÑÑÐžÐ¹</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Move to the next item.</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+Shift+J</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Done and Next</source>
         <translation>&amp;ÐÐŸÑÐŸÐ²ÐŸ Ðž ÐŽÐ°Ð»ÐµÐµ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Mark this item as done and move to the next unfinished item.</source>
         <translation>ÐÐŸÐŒÐµÑÐžÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽ ÐºÐ°Ðº Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹ Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÐŸÐŒÑ.</translation>
     </message>
     <message>
-        <location line="+11"/>
-        <location line="+3"/>
+        <location/>
         <source>Copy from source text</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐžÐ· ÐžÑÑ
@@ -1279,5 +1289,5 @@
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Copies the source text into the translation field.</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐžÑÑ
@@ -1285,15 +1295,15 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Accelerators</source>
         <translation>&amp;ÐÐºÑÐµÐ»ÐµÑÐ°ÑÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž Ð°ÐºÑÐµÐ»ÐµÑÐ°ÑÐŸÑÐŸÐ², Ñ.Ðµ. ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÐµÑ Ð»Ðž ÐºÐŸÐ»ÐžÑÐµÑÑÐ²ÐŸ Ð°ÐŒÐ¿ÐµÑÑÐ°ÐœÐŽÐŸÐ² Ð² ÐžÑÑ
@@ -1302,30 +1312,30 @@
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Ending Punctuation</source>
         <translation>&amp;ÐÐœÐ°ÐºÐž Ð¿ÑÐµÐ¿ÐžÐœÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž Ð·ÐœÐ°ÐºÐŸÐ² Ð¿ÑÐµÐ¿ÐžÐœÐ°ÐœÐžÑ Ð² ÐºÐŸÐœÑÐµ ÑÐµÐºÑÑÐ°. ÐÑÐ»Ðž Ð²ÑÑÐ²Ð»ÐµÐœÐŸ ÐœÐµÑÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ, Ð±ÑÐŽÐµÑ Ð¿ÐŸÐºÐ°Ð·Ð°ÐœÐŸ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ Ð² ÐŸÐºÐœÐµ Ð¿ÑÐµÐŽÑÐ¿ÑÐµÐ¶ÐŽÐµÐœÐžÐ¹.</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Phrase matches</source>
         <translation>Ð¡ÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ &amp;ÑÑÐ°Ð·</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐ¹ ÐŽÐ»Ñ ÑÑÐ°Ð·. ÐÑÐ»Ðž Ð²ÑÑÐ²Ð»ÐµÐœÐŸ ÐœÐµÑÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ, Ð±ÑÐŽÐµÑ Ð¿ÐŸÐºÐ°Ð·Ð°ÐœÐŸ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ Ð² ÐŸÐºÐœÐµ Ð¿ÑÐµÐŽÑÐ¿ÑÐµÐ¶ÐŽÐµÐœÐžÐ¹.</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Place &amp;Marker Matches</source>
         <translation>Ð¡ÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ &amp;ÐŒÐ°ÑÐºÐµÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž ÐŒÐ°ÑÐºÐµÑÐŸÐ² ÑÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÑ, Ñ.Ðµ. Ð²ÑÐµ Ð»Ðž ÐŒÐ°ÑÐºÐµÑÑ (%1, %2, ...) ÐžÑÑ
@@ -1333,40 +1343,40 @@
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;New Phrase Book...</source>
-        <translation>&amp;ÐÐŸÐ²ÑÐ¹ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº...</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>&amp;ÐÐŸÐ²ÑÐ¹ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹...</translation>
+    </message>
+    <message>
+        <location/>
         <source>Create a new phrase book.</source>
-        <translation>Ð¡ÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº.</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>Ð¡ÐŸÐ·ÐŽÐ°ÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹.</translation>
+    </message>
+    <message>
+        <location/>
         <source>Ctrl+N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Open Phrase Book...</source>
-        <translation>&amp;ÐÑÐºÑÑÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº...</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>&amp;ÐÑÐºÑÑÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹...</translation>
+    </message>
+    <message>
+        <location/>
         <source>Open a phrase book to assist translation.</source>
-        <translation>ÐÑÐºÑÑÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº ÐŽÐ»Ñ Ð¿ÐŸÐŒÐŸÑÐž Ð² Ð¿ÐµÑÐµÐ²ÐŸÐŽÐµ.</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>ÐÑÐºÑÑÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ ÐŽÐ»Ñ Ð¿ÐŸÐŒÐŸÑÐž Ð² Ð¿ÐµÑÐµÐ²ÐŸÐŽÐµ.</translation>
+    </message>
+    <message>
+        <location/>
         <source>Ctrl+H</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Reset Sorting</source>
         <translation>&amp;Ð¡Ð±ÑÐŸÑ ÑÐŸÑÑÐžÑÐŸÐ²ÐºÐž</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Sort the items back in the same order as in the message file.</source>
         <translation>Ð£Ð¿ÐŸÑÑÐŽÐŸÑÐžÑÑ ÑÐ»ÐµÐŒÐµÐœÑÑ Ð² ÑÐŸÐ¹ Ð¿ÐŸÑÐ»ÐµÐŽÐŸÐ²Ð°ÑÐµÐ»ÑÐœÐŸÑÑÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐŸÐœÐž ÐœÐ°Ñ
@@ -1374,5 +1384,5 @@
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Display guesses</source>
         <translation>&amp;ÐÑÐµÐŽÐ»Ð°Ð³Ð°ÑÑ Ð¿ÐŸÑ
@@ -1380,5 +1390,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Set whether or not to display translation guesses.</source>
         <translation>ÐÐ¿ÑÐµÐŽÐµÐ»ÑÐµÑ ÐœÐµÐŸÐ±Ñ
@@ -1387,51 +1397,50 @@
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Statistics</source>
         <translation>&amp;Ð¡ÑÐ°ÑÐžÑÑÐžÐºÐ°</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Display translation statistics.</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ ÑÑÐ°ÑÐžÑÑÐžÐºÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Manual</source>
         <translation>&amp;Ð ÑÐºÐŸÐ²ÐŸÐŽÑÑÐ²ÐŸ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>F1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>About Qt Linguist</source>
         <translation>Ð Qt Linguist</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>About Qt</source>
         <translation>Ð Qt</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Display information about the Qt toolkit by Trolltech.</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸÐ± ÐžÐœÑÑÑÑÐŒÐµÐœÑÐ°ÑÐžÐž Qt ÐŸÑ Nokia.</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;What&apos;s This?</source>
         <translation>&amp;Ð§ÑÐŸ ÑÑÐŸ?</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+3"/>
+        <location/>
         <source>What&apos;s This?</source>
         <translation>Ð§ÑÐŸ ÑÑÐŸ?</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Enter What&apos;s This? mode.</source>
         <translation>ÐÐµÑÐµÑ
@@ -1439,15 +1448,15 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Shift+F1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>&amp;Search And Translate...</source>
         <translation>&amp;ÐÐ°Ð¹ÑÐž Ðž Ð¿ÐµÑÐµÐ²ÐµÑÑÐž...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Replace the translation on all entries that matches the search source text.</source>
         <translation>ÐÐ°ÐŒÐµÐœÐžÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽ Ð²ÑÐµÑ
@@ -1456,41 +1465,40 @@
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Batch translate all entries using the information in the phrase books.</source>
-        <translation>ÐÐµÑÐµÐ²ÐµÑÑÐž Ð²ÑÐµ Ð·Ð°Ð¿ÐžÑÐž Ð² Ð¿Ð°ÐºÐµÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐžÐ· ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ°.</translation>
-    </message>
-    <message>
-        <location line="+77"/>
+        <translation>ÐÐµÑÐµÐ²ÐµÑÑÐž Ð²ÑÐµ Ð·Ð°Ð¿ÐžÑÐž Ð² Ð¿Ð°ÐºÐµÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐžÐ· Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ.</translation>
+    </message>
+    <message>
+        <location/>
         <source>Open/Refresh Form &amp;Preview</source>
         <translation>ÐÑÐºÑÑÑÑ/ÐŸÐ±ÐœÐŸÐ²ÐžÑÑ Ð¿ÑÐµÐŽÐ¿ÑÐŸÑ&amp;ÐŒÐŸÑÑ ÑÐŸÑÐŒÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location line="+3"/>
+        <location/>
         <source>Form Preview Tool</source>
         <translation>ÐÐœÑÑÑÑÐŒÐµÐœÑ Ð¿ÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑÐ° ÑÐŸÑÐŒ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>F5</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>&amp;Add to Phrase Book</source>
-        <translation>&amp;ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>&amp;ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹</translation>
+    </message>
+    <message>
+        <location/>
         <source>Ctrl+T</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Open Read-O&amp;nly...</source>
         <translation>ÐÑÐºÑÑÑÑ ÑÐŸÐ»ÑÐºÐŸ ÐŽÐ»Ñ &amp;ÑÑÐµÐœÐžÑ...</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Save All</source>
         <translation>&amp;Ð¡ÐŸÑ
@@ -1498,50 +1506,50 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+S</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Close</source>
         <translation>ÐÐ°ÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Close All</source>
         <translation>&amp;ÐÐ°ÐºÑÑÑÑ Ð²ÑÐµ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+W</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-473"/>
+        <location/>
         <source>Previous unfinished item</source>
         <translation>ÐÑÐµÐŽÑÐŽÑÑÐžÐ¹ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹ Ð¿ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Next unfinished item</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐžÐ¹ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹ Ð¿ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Move to previous item</source>
         <translation>ÐÐµÑÐµÐ¹ÑÐž Ðº Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐŒÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽÑ</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Next item</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐžÐ¹ Ð¿ÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Mark item as done and move to the next unfinished item</source>
         <translation>ÐÐŸÐŒÐµÑÐžÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽ ÐºÐ°Ðº Ð·Ð°Ð²ÐµÑÑÑÐœÐœÑÐ¹ Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÐœÐµÐ·Ð°Ð²ÐµÑÑÑÐœÐœÐŸÐŒÑ</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Copies the source text into the translation field</source>
         <translation>Ð¡ÐºÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐžÑÑ
@@ -1549,20 +1557,20 @@
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Toggle the validity check of accelerators</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž Ð°ÐºÑÐµÐ»ÐµÑÐ°ÑÐŸÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Toggle the validity check of ending punctuation</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž Ð·ÐœÐ°ÐºÐŸÐ² Ð¿ÑÐµÐ¿ÐžÐœÐ°ÐœÐžÑ Ð² ÐºÐŸÐœÑÐµ ÑÐµÐºÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Toggle checking that phrase suggestions are used</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐ¹ ÐŽÐ»Ñ ÑÑÐ°Ð·</translation>
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>Toggle the validity check of place markers</source>
         <translation>ÐÐµÑÐµÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÑÐŸÐ²ÐµÑÐºÐž ÐŒÐ°ÑÐºÐµÑÐŸÐ² ÑÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÑ</translation>
@@ -1609,5 +1617,5 @@
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+47"/>
         <source>This whole panel allows you to view and edit the translation of some source text.</source>
         <translation>ÐÐ°ÐœÐœÐ°Ñ Ð¿Ð°ÐœÐµÐ»Ñ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÑÐŸÑÐŒÐ°ÑÑÐžÐ²Ð°ÑÑ Ðž ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽ ÐžÑÑ
@@ -1615,5 +1623,5 @@
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+10"/>
         <source>Source text</source>
         <translation>ÐÑÑ
@@ -1654,5 +1662,5 @@
     </message>
     <message>
-        <location line="+232"/>
+        <location line="+234"/>
         <source>%1 translation (%2)</source>
         <translation>%1 Ð¿ÐµÑÐµÐ²ÐŸÐŽ (%2)</translation>
@@ -1684,5 +1692,5 @@
     <name>MessageModel</name>
     <message>
-        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/>
+        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/>
         <source>Completion status for %1</source>
         <translation>Ð¡ÐŸÑÑÐŸÑÐœÐžÐµ Ð·Ð°Ð²ÐµÑÑÑÐœÐœÐŸÑÑÐž ÐŽÐ»Ñ %1</translation>
@@ -1731,23 +1739,23 @@
         <source>Cannot save phrase book &apos;%1&apos;.</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÑ
-ÑÐ°ÐœÐžÑÑ ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº &apos;%1&apos;.</translation>
-    </message>
-    <message>
-        <location filename="../tools/linguist/linguist/phrasebookbox.ui" line="+54"/>
+ÑÐ°ÐœÐžÑÑ Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹ &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../tools/linguist/linguist/phrasebookbox.ui"/>
         <source>Edit Phrase Book</source>
-        <translation>ÐÑÐ°Ð²ÐºÐ° ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ°</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>ÐÑÐ°Ð²ÐºÐ° Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ</translation>
+    </message>
+    <message>
+        <location/>
         <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
-        <translation>ÐÐ°ÐœÐœÐŸÐµ ÐŸÐºÐœÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÑÑÑ, ÐžÐ·ÐŒÐµÐœÑÑÑ Ðž ÑÐŽÐ°Ð»ÑÑÑ Ð·Ð°Ð¿ÐžÑÐž Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐµ.</translation>
-    </message>
-    <message>
-        <location line="+10"/>
+        <translation>ÐÐ°ÐœÐœÐŸÐµ ÐŸÐºÐœÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÑÑÑ, ÐžÐ·ÐŒÐµÐœÑÑÑ Ðž ÑÐŽÐ°Ð»ÑÑÑ Ð·Ð°Ð¿ÐžÑÐž Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐž.</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;Translation:</source>
         <translation>&amp;ÐÐµÑÐµÐ²ÐŸÐŽ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>This is the phrase in the target language corresponding to the source phrase.</source>
         <translation>ÐÐµÑÐµÐ²ÐŸÐŽ, ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐžÐ¹ ÐžÑÑ
@@ -1755,5 +1763,5 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>S&amp;ource phrase:</source>
         <translation>&amp;ÐÑÑ
@@ -1761,5 +1769,5 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>This is a definition for the source phrase.</source>
         <translation>ÐÐ¿ÑÐµÐŽÐµÐ»ÐµÐœÐžÐµ ÐžÑÑ
@@ -1767,5 +1775,5 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>This is the phrase in the source language.</source>
         <translation>Ð€ÑÐ°Ð·Ð° ÐœÐ° ÐžÑÑ
@@ -1773,35 +1781,35 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>&amp;Definition:</source>
         <translation>&amp;ÐÐ¿ÑÐµÐŽÐµÐ»ÐµÐœÐžÐµ:</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>Click here to add the phrase to the phrase book.</source>
-        <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÑÑÐ°Ð·Ñ Ð² ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº.</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ ÑÑÐ°Ð·Ñ Ð² Ð³Ð»ÐŸÑÑÐ°ÑÐžÐ¹.</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;New Entry</source>
         <translation>ÐÐŸÐ²Ð°Ñ &amp;Ð·Ð°Ð¿ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Click here to remove the entry from the phrase book.</source>
-        <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÑÐ°Ð·Ñ ÐžÐ· ÑÐ°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐºÐ°.</translation>
-    </message>
-    <message>
-        <location line="+3"/>
+        <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ ÑÑÐ°Ð·Ñ ÐžÐ· Ð³Ð»ÐŸÑÑÐ°ÑÐžÑ.</translation>
+    </message>
+    <message>
+        <location/>
         <source>&amp;Remove Entry</source>
         <translation>&amp;Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Settin&amp;gs...</source>
         <translation>&amp;ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž...</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Click here to save the changes made.</source>
         <translation>Ð¡ÐŸÑ
@@ -1809,5 +1817,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Save</source>
         <translation>&amp;Ð¡ÐŸÑ
@@ -1815,10 +1823,10 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Click here to close this window.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Close</source>
         <translation>ÐÐ°ÐºÑÑÑÑ</translation>
@@ -1872,5 +1880,5 @@
     <name>QObject</name>
     <message>
-        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1816"/>
+        <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1842"/>
         <source>Translation files (%1);;</source>
         <translation>Ð€Ð°Ð¹Ð»Ñ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ° (%1);;</translation>
@@ -1882,6 +1890,6 @@
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/>
-        <location line="+18"/>
+        <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/>
+        <location line="+27"/>
         <location line="+67"/>
         <location line="+39"/>
@@ -1903,7 +1911,7 @@
     </message>
     <message>
-        <location filename="../tools/linguist/shared/qph.cpp" line="+183"/>
+        <location filename="../tools/linguist/shared/qph.cpp" line="+195"/>
         <source>Qt Linguist &apos;Phrase Book&apos;</source>
-        <translation>&apos;Ð Ð°Ð·Ð³ÐŸÐ²ÐŸÑÐœÐžÐº&apos; Qt Linguist</translation>
+        <translation>&apos;ÐÐ»ÐŸÑÑÐ°ÑÐžÐ¹&apos; Qt Linguist</translation>
     </message>
     <message>
@@ -1953,45 +1961,40 @@
     <name>Statistics</name>
     <message>
-        <location filename="../tools/linguist/linguist/statistics.ui" line="+54"/>
+        <location filename="../tools/linguist/linguist/statistics.ui"/>
         <source>Statistics</source>
         <translation>Ð¡ÑÐ°ÑÐžÑÑÐžÐºÐ°</translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location/>
         <source>Close</source>
         <translation>ÐÐ°ÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location/>
         <source>Translation</source>
         <translation>ÐÐµÑÐµÐ²ÐŸÐŽ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Source</source>
         <translation>ÐÑÑÐŸÑÐœÐžÐº</translation>
     </message>
     <message>
-        <location line="+7"/>
-        <location line="+7"/>
-        <location line="+14"/>
-        <location line="+7"/>
-        <location line="+21"/>
-        <location line="+7"/>
+        <location/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location line="-42"/>
+        <location/>
         <source>Words:</source>
         <translation>Ð¡Ð»ÐŸÐ²:</translation>
     </message>
     <message>
-        <location line="+21"/>
+        <location/>
         <source>Characters:</source>
         <translation>Ð¡ÐžÐŒÐ²ÐŸÐ»ÐŸÐ²:</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Characters (with spaces):</source>
         <translation>Ð¡ÐžÐŒÐ²ÐŸÐ»ÐŸÐ² (Ñ Ð¿ÑÐŸÐ±ÐµÐ»Ð°ÐŒÐž):</translation>
@@ -2001,71 +2004,70 @@
     <name>TranslateDialog</name>
     <message>
-        <location filename="../tools/linguist/linguist/translatedialog.ui" line="+60"/>
+        <location filename="../tools/linguist/linguist/translatedialog.ui"/>
         <source>This window allows you to search for some text in the translation source file.</source>
         <translation>ÐÐ°ÐœÐœÐŸÐµ ÐŸÐºÐœÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐžÑÐºÐ°ÑÑ ÑÐµÐºÑÑ Ð² ÑÐ°Ð¹Ð»Ðµ Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°.</translation>
     </message>
     <message>
-        <location line="+28"/>
-        <location line="+27"/>
+        <location/>
         <source>Type in the text to search for.</source>
         <translation>ÐÐ²ÐµÐŽÐžÑÐµ ÐžÑÐºÐŸÐŒÑÐ¹ ÑÐµÐºÑÑ.</translation>
     </message>
     <message>
-        <location line="-20"/>
+        <location/>
         <source>Find &amp;source text:</source>
         <translation>&amp;ÐÐ°Ð¹ÑÐž ÑÐµÐºÑÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;Translate to:</source>
         <translation>&amp;ÐÐµÑÐµÐ²ÐµÑÑÐž ÐºÐ°Ðº:</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>Search options</source>
         <translation>ÐÐ°ÑÐ°ÐŒÐµÑÑÑ Ð¿ÐŸÐžÑÐºÐ°</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
         <translation>ÐÑÐ»Ðž ÐŸÑÐŒÐµÑÐµÐœÐŸ, ÑÑÑÐŸÐºÐž &quot;ÐÑÐÐŒÐÑ&quot; Ðž &quot;Ð¿ÑÐžÐŒÐµÑ&quot; Ð±ÑÐŽÐµÑ ÑÑÐžÑÐ°ÑÑÑÑ ÑÐ°Ð·ÐœÑÐŒÐž.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Match &amp;case</source>
         <translation>Ð¡ ÑÑÑÑÐŸÐŒ &amp;ÑÐµÐ³ÐžÑÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Mark new translation as &amp;finished</source>
         <translation>ÐÐŸÐŒÐµÑÐ°ÑÑ Ð¿ÐµÑÐµÐ²ÐŸÐŽ ÐºÐ°Ðº Ð·Ð°Ð²ÐµÑ&amp;ÑÑÐœÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+33"/>
+        <location/>
         <source>Click here to find the next occurrence of the text you typed in.</source>
         <translation>ÐÐ°Ð¹ÑÐž ÑÐ»ÐµÐŽÑÑÑÐµÐµ ÑÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐµ ÐŽÐ»Ñ Ð²Ð²ÐµÐŽÑÐœÐœÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ°.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Find Next</source>
         <translation>ÐÐ°Ð¹ÑÐž ÐŽÐ°Ð»ÐµÐµ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Translate</source>
         <translation>ÐÐµÑÐµÐ²ÐµÑÑÐž</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Translate All</source>
         <translation>ÐÐµÑÐµÐ²ÐµÑÑÐž Ð²ÑÐµ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Click here to close this window.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Cancel</source>
         <translation>ÐÑÐŒÐµÐœÐ°</translation>
@@ -2075,5 +2077,5 @@
     <name>TranslationSettingsDialog</name>
     <message>
-        <location filename="../tools/linguist/linguist/translationsettings.ui" line="+20"/>
+        <location filename="../tools/linguist/linguist/translationsettings.ui"/>
         <source>Source language</source>
         <translation>ÐÑÑ
@@ -2081,27 +2083,25 @@
     </message>
     <message>
-        <location line="+15"/>
-        <location line="+38"/>
+        <location/>
         <source>Language</source>
         <translation>Ð¯Ð·ÑÐº</translation>
     </message>
     <message>
-        <location line="-25"/>
-        <location line="+38"/>
+        <location/>
         <source>Country/Region</source>
         <translation>Ð¡ÑÑÐ°ÐœÐ°/Ð ÐµÐ³ÐžÐŸÐœ</translation>
     </message>
     <message>
-        <location line="-28"/>
+        <location/>
         <source>Target language</source>
         <translation>Ð¯Ð·ÑÐº Ð¿ÐµÑÐµÐ²ÐŸÐŽÐ°</translation>
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/>
+        <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/>
         <source>Any Country</source>
         <translation>ÐÑÐ±Ð°Ñ ÑÑÑÐ°ÐœÐ°</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location line="-22"/>
         <location line="+8"/>
         <source>Settings for &apos;%1&apos; - Qt Linguist</source>
Index: /trunk/translations/qt_cs.ts
===================================================================
--- /trunk/translations/qt_cs.ts	(revision 769)
+++ /trunk/translations/qt_cs.ts	(revision 769)
@@ -0,0 +1,10362 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs_CZ">
+<context>
+    <name>AudioEqualizer</name>
+    <message>
+        <source>Frequency band, %1 Hz</source>
+        <translation type="obsolete">KmitoÄtovÃ© pÃ¡smo, %1 Hz</translation>
+    </message>
+</context>
+<context>
+    <name>AudioOutput</name>
+    <message>
+        <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+        <translation type="obsolete">&lt;html&gt;ZaÅÃ­zenÃ­ pro pÅehrÃ¡vÃ¡nÃ­ zvuku &lt;b&gt;%1&lt;/b&gt; nepracuje.&lt;br/&gt;MÃ­sto nÄj &lt;b&gt;%2&lt;/b&gt; se pouÅŸÃ­vÃ¡.&lt;/html&gt;</translation>
+    </message>
+    <message>
+        <source>Revert back to device &apos;%1&apos;</source>
+        <translation type="obsolete">PÅepnout zpÄt na zaÅÃ­zenÃ­ &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+        <translation type="obsolete">&lt;html&gt;ZaÅÃ­zenÃ­ pro pÅehrÃ¡vÃ¡nÃ­ zvuku &lt;b&gt;%1&lt;/b&gt; bylo spuÅ¡tÄno,&lt;br/&gt;protoÅŸe je prÃ¡vÄ dostupnÃ© a mÃ¡ vÄtÅ¡Ã­ pÅednost.&lt;/html&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/>
+        <source>Close Tab</source>
+        <translation>ZavÅÃ­t kartu</translation>
+    </message>
+</context>
+<context>
+    <name>FakeReply</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2193"/>
+        <source>Fake error !</source>
+        <translation>NapodobenÃ¡ chyba!</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid URL</source>
+        <translation>NeplÃ¡tnÃ© URL</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+63"/>
+        <source>Games</source>
+        <translation>Hry</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Music</source>
+        <translation>Hudba</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video</source>
+        <translation>Video</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Communication</source>
+        <translation>SpojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Accessibility</source>
+        <translation>Dostupnost</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>Notifications</source>
+        <translation>OznÃ¡menÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::AudioOutput</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/>
+        <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+        <translation>&lt;html&gt;ZaÅÃ­zenÃ­ pro pÅehrÃ¡vÃ¡nÃ­ zvuku &lt;b&gt;%1&lt;/b&gt; nepracuje.&lt;br/&gt;MÃ­sto nÄj &lt;b&gt;%2&lt;/b&gt; se pouÅŸÃ­vÃ¡.&lt;/html&gt;</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+        <translation>&lt;html&gt;ZaÅÃ­zenÃ­ pro pÅehrÃ¡vÃ¡nÃ­ zvuku &lt;b&gt;%1&lt;/b&gt; bylo spuÅ¡tÄno,&lt;br/&gt;protoÅŸe je prÃ¡vÄ dostupnÃ© a mÃ¡ vÄtÅ¡Ã­ pÅednost.&lt;/html&gt;</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Revert back to device &apos;%1&apos;</source>
+        <translation>PÅepnout zpÄt na zaÅÃ­zenÃ­ &apos;%1&apos;</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::Gstreamer::Backend</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+176"/>
+        <source>Warning: You do not seem to have the base GStreamer plugins installed.
+          All audio and video support has been disabled</source>
+        <translation>UpozornÄnÃ­: ZdÃ¡ se, ÅŸe zÃ¡klÃ¡dnÃ­ pÅÃ­davnÃ© moduly pro GStreamer nejsou nainstalovÃ¡ny.ï¿Œ
+Podpora audia a videa byla vypnuta</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
+          Some video features have been disabled.</source>
+        <translation>VarovÃ¡nÃ­: BalÃ­Äek gstreamer0.10-plugins-good nenÃ­ nainstalovÃ¡n.
+NÄkterÃ© vlastnosti videa nejsou dostupnÃ©.</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::Gstreamer::MediaObject</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+884"/>
+        <location line="+8"/>
+        <location line="+15"/>
+        <location line="+22"/>
+        <location line="+6"/>
+        <location line="+19"/>
+        <location line="+339"/>
+        <location line="+24"/>
+        <source>Could not open media source.</source>
+        <translation>Zdroj s mÃ©dii se nepodaÅilo otevÅÃ­t.</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Could not decode media source.</source>
+        <translation>Zdroj s mÃ©dii se nepodaÅilo rozluÅ¡tit.</translation>
+    </message>
+    <message>
+        <location line="-417"/>
+        <source>Invalid source type.</source>
+        <translation>NeplatnÃœ typ zdroje s mÃ©dii.</translation>
+    </message>
+    <message>
+        <location line="-807"/>
+        <source>Cannot start playback. 
+
+Check your Gstreamer installation and make sure you 
+have libgstreamer-plugins-base installed.</source>
+        <translation>PÅehrÃ¡vÃ¡nÃ­ nelze spustit.
+
+OvÄÅte, prosÃ­m, instalaci Gstreamer a ujistÄte se,
+ÅŸe je nainstalovÃ¡n balÃ­Äek libgstreamer-plugins-base.</translation>
+    </message>
+    <message>
+        <location line="+1211"/>
+        <source>Could not open audio device. The device is already in use.</source>
+        <translation>ZvukovÃ© zaÅÃ­zenÃ­ se nepodaÅilo otevÅÃ­t, protoÅŸe se jiÅŸ pouÅŸÃ­vÃ¡.</translation>
+    </message>
+    <message>
+        <location line="-1098"/>
+        <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
+        <translation>VÅ¡echny vyÅŸadovanÃ© kodeky nejsou nainstalovÃ¡ny. KvÅ¯li pÅehrÃ¡nÃ­ tohoto obsahu je potÅeba nainstalovat nÃ¡sledujÃ­cÃ­ kodek(y): %0</translation>
+    </message>
+    <message>
+        <location line="+1088"/>
+        <source>Could not locate media source.</source>
+        <translation>Zdroj s mÃ©dii se nepodaÅilo nalÃ©zt.</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/>
+        <source>Audio Output</source>
+        <translation>VÃœstup zvuku</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The audio output device</source>
+        <translation>ZaÅÃ­zenÃ­ pro vÃœstup zvuku</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>KmitoÄtovÃ© pÃ¡smo, %1 Hz</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>zvukovÃœ ekvalizÃ©r</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Bass boost</source>
+        <translation>ZdÅ¯raznÄnÃ­ basÅ¯</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Distance Attenuation</source>
+        <translation>ZeslabenÃ­ v zÃ¡vislosti na vzdÃ¡lenosti</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location line="+2"/>
+        <source>Environmental Reverb</source>
+        <translation>VnÄjÅ¡Ã­ ozvÄna</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Loudness</source>
+        <translation>Hlasitost</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Source Orientation</source>
+        <translation>ZamÄÅenÃ­ zdroje</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Stereo Widening</source>
+        <translation>RozÅ¡Ã­ÅenÃ­ sterea</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::VolumeSlider</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/>
+        <location line="+18"/>
+        <location line="+129"/>
+        <location line="+15"/>
+        <source>Volume: %1%</source>
+        <translation>Hlasitost: %1%</translation>
+    </message>
+    <message>
+        <location line="-159"/>
+        <location line="+18"/>
+        <location line="+54"/>
+        <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
+        <translation>PosuvnÃ­k se pouÅŸÃ­vÃ¡ k nastavenÃ­ hlasitosti. Poloha nejvÃ­ce vlevo odpovÃ­dÃ¡ 0%; poloha nejvÃ­ce vpravo odpovÃ­dÃ¡ %1%</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>Muted</source>
+        <translation>ZtlumenÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>Q3Accel</name>
+    <message>
+        <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/>
+        <source>%1, %2 not defined</source>
+        <translation>%1, %2 nejsou stanoveny</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Ambiguous %1 not handled</source>
+        <translation>NejednoznaÄnÃ© %1 nemohou bÃœt zpracovÃ¡ny</translation>
+    </message>
+</context>
+<context>
+    <name>Q3DataTable</name>
+    <message>
+        <location filename="../src/qt3support/sql/q3datatable.cpp" line="+285"/>
+        <source>True</source>
+        <translation>PravdivÃœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>False</source>
+        <translation>NesprÃ¡vnÃœ</translation>
+    </message>
+    <message>
+        <location line="+507"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Insert</source>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Update</source>
+        <translation>Obnovit</translation>
+    </message>
+</context>
+<context>
+    <name>Q3FileDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+2426"/>
+        <location line="+2027"/>
+        <source>&amp;OK</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <location line="-254"/>
+        <source>&amp;No</source>
+        <translation>&amp;Ne</translation>
+    </message>
+    <message>
+        <location line="-1557"/>
+        <source>Dir</source>
+        <translation>AdresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+1557"/>
+        <source>&amp;Yes</source>
+        <translation>&amp;Ano</translation>
+    </message>
+    <message>
+        <location line="-1724"/>
+        <source>Back</source>
+        <translation>ZpÄt</translation>
+    </message>
+    <message>
+        <location line="-85"/>
+        <source>Date</source>
+        <translation>Datum</translation>
+    </message>
+    <message>
+        <location line="+251"/>
+        <source>File</source>
+        <translation>Soubor</translation>
+    </message>
+    <message>
+        <location line="-255"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+961"/>
+        <location line="+1999"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+209"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-2959"/>
+        <source>Size</source>
+        <translation>Velikost</translation>
+    </message>
+    <message>
+        <location line="+1767"/>
+        <source>Sort</source>
+        <translation>RoztÅÃ­dit</translation>
+    </message>
+    <message>
+        <location line="-1765"/>
+        <source>Type</source>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location line="+1710"/>
+        <location line="+5"/>
+        <location line="+355"/>
+        <source>&amp;Open</source>
+        <translation>&amp;OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-357"/>
+        <location line="+341"/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <location line="+1009"/>
+        <source>Error</source>
+        <translation>Chyba</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+144"/>
+        <source>Open </source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="-4660"/>
+        <location line="+30"/>
+        <source>Write: %1</source>
+        <translation>Zapsat: %1</translation>
+    </message>
+    <message>
+        <location line="+3263"/>
+        <source>Sort by &amp;Size</source>
+        <translation>RoztÅÃ­dit podle &amp;velikosti</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Sort by &amp;Date</source>
+        <translation>RoztÅÃ­dit podle &amp;data</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Sort by &amp;Name</source>
+        <translation>RoztÅÃ­dit podle &amp;nÃ¡zvu</translation>
+    </message>
+    <message>
+        <location line="+101"/>
+        <source>New Folder 1</source>
+        <translation>NovÃ¡ sloÅŸka 1</translation>
+    </message>
+    <message>
+        <location line="-44"/>
+        <source>the directory</source>
+        <translation>AdresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-1723"/>
+        <source>File &amp;type:</source>
+        <translation>Typ &amp;souboru:</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <location line="+1977"/>
+        <location line="+16"/>
+        <source>File &amp;name:</source>
+        <translation>NÃ¡zev &amp;souboru:</translation>
+    </message>
+    <message>
+        <location line="-264"/>
+        <source>Delete %1</source>
+        <translation>Smazat %1</translation>
+    </message>
+    <message>
+        <location line="-3345"/>
+        <location line="+1579"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+1700"/>
+        <source>R&amp;eload</source>
+        <translation>NahrÃ¡t &amp;znovu</translation>
+    </message>
+    <message>
+        <location line="+110"/>
+        <source>New Folder</source>
+        <translation>NovÃ¡ sloÅŸka</translation>
+    </message>
+    <message>
+        <location line="-101"/>
+        <source>&amp;Unsorted</source>
+        <translation>&amp;NeroztÅÃ­dÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="-1673"/>
+        <source>Look &amp;in:</source>
+        <translation>Hle&amp;dat v:</translation>
+    </message>
+    <message>
+        <location line="+79"/>
+        <source>Preview File Contents</source>
+        <translation>NÃ¡hled obsahu souboru</translation>
+    </message>
+    <message>
+        <location line="+1700"/>
+        <source>New Folder %1</source>
+        <translation>NovÃ¡ sloÅŸka %1</translation>
+    </message>
+    <message>
+        <location line="-1612"/>
+        <source>Read-write</source>
+        <translation>ÄÃ­st/Zapisovat</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Read-only</source>
+        <translation>Pouze ÄÃ­st</translation>
+    </message>
+    <message>
+        <location line="-1805"/>
+        <source>Copy or Move a File</source>
+        <translation>Soubor kopÃ­rovat nebo posunout</translation>
+    </message>
+    <message>
+        <location line="+3368"/>
+        <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
+        <translation>&lt;qt&gt;Jste si jistÃœ, ÅŸe chcete smazat %1 &quot;%2&quot;?&lt;/qt&gt;</translation>
+    </message>
+    <message>
+        <location line="+146"/>
+        <source>Find Directory</source>
+        <translation>NajÃ­t adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-1952"/>
+        <source>Attributes</source>
+        <translation>Vlastnosti</translation>
+    </message>
+    <message>
+        <location line="+1767"/>
+        <source>Show &amp;hidden files</source>
+        <translation>&amp;UkÃ¡zat skrytÃ© soubory</translation>
+    </message>
+    <message>
+        <location line="-701"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="-73"/>
+        <source>Save As</source>
+        <translation>UloÅŸit jako</translation>
+    </message>
+    <message>
+        <location line="-821"/>
+        <source>Inaccessible</source>
+        <translation>NepÅÃ­stupnÃ©</translation>
+    </message>
+    <message>
+        <location line="+1859"/>
+        <source>%1
+File not found.
+Check path and filename.</source>
+        <translation>%1
+Soubor se nepodaÅilo nalÃ©zt.
+OvÄÅte cestu a nÃ¡zev souboru.</translation>
+    </message>
+    <message>
+        <location line="-1986"/>
+        <source>List View</source>
+        <translation>Pohled se seznamem</translation>
+    </message>
+    <message>
+        <location line="+134"/>
+        <source>Special</source>
+        <translation>ZvlÃ¡Å¡tnÃ­ vlastnost</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>Write-only</source>
+        <translation>Pouze zÃ¡pis</translation>
+    </message>
+    <message>
+        <location line="+1558"/>
+        <source>the symlink</source>
+        <translation>SymbolickÃœ odkaz</translation>
+    </message>
+    <message>
+        <location line="-83"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+    <message>
+        <location line="-1837"/>
+        <location line="+49"/>
+        <location line="+2149"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+112"/>
+        <source>All Files (*)</source>
+        <translation>VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location line="-123"/>
+        <location line="+108"/>
+        <source>Directories</source>
+        <translation>AdresÃ¡Åe</translation>
+    </message>
+    <message>
+        <location line="-1816"/>
+        <source>Symlink to Special</source>
+        <translation>SymbolickÃœ odkaz k zvlÃ¡Å¡tnÃ­mu souboru</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+180"/>
+        <source>Select a Directory</source>
+        <translation>Vyberte adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-371"/>
+        <source>All Files (*.*)</source>
+        <translation>VÅ¡echny soubory (*.*)</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="-1803"/>
+        <source>Read: %1</source>
+        <translation>ÄÃ­st: %1</translation>
+    </message>
+    <message>
+        <location line="+3272"/>
+        <source>&amp;Rename</source>
+        <translation>&amp;PÅejmenovat</translation>
+    </message>
+    <message>
+        <location line="+345"/>
+        <source>Directory:</source>
+        <translation>AdresÃ¡Å:</translation>
+    </message>
+    <message>
+        <location line="-1972"/>
+        <source>One directory up</source>
+        <translation>O jeden adresÃ¡Å nahoru</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Preview File Info</source>
+        <translation>NÃ¡hled informace o souboru</translation>
+    </message>
+    <message>
+        <location line="+1663"/>
+        <source>the file</source>
+        <translation>Soubor</translation>
+    </message>
+    <message>
+        <location line="-1698"/>
+        <source>Create New Folder</source>
+        <translation>VytvoÅit novou sloÅŸku</translation>
+    </message>
+    <message>
+        <location line="+147"/>
+        <source>Symlink to File</source>
+        <translation>SymbolickÃœ odkaz k souboru</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Symlink to Directory</source>
+        <translation>SymbolickÃœ odkaz k adresÃ¡Åi</translation>
+    </message>
+    <message>
+        <location line="-122"/>
+        <source>Detail View</source>
+        <translation>PodrobnÃœ pohled</translation>
+    </message>
+</context>
+<context>
+    <name>Q3LocalFs</name>
+    <message>
+        <location filename="../src/qt3support/network/q3localfs.cpp" line="+271"/>
+        <source>Could not open
+%1</source>
+        <translation>NepodaÅilo se otevÅÃ­t:
+%1</translation>
+    </message>
+    <message>
+        <location line="-52"/>
+        <source>Could not remove file or directory
+%1</source>
+        <translation>NepodaÅilo se odstranit soubor nebo adresÃ¡Å
+%1</translation>
+    </message>
+    <message>
+        <location line="-34"/>
+        <source>Could not create directory
+%1</source>
+        <translation>NepodaÅilo se vytvoÅit adresÃ¡Å
+%1</translation>
+    </message>
+    <message>
+        <location line="-55"/>
+        <location line="+10"/>
+        <source>Could not read directory
+%1</source>
+        <translation>NepodaÅilo se pÅeÄÃ­st adresÃ¡Å
+%1</translation>
+    </message>
+    <message>
+        <location line="+106"/>
+        <source>Could not rename
+%1
+to
+%2</source>
+        <translation>NepodaÅilo se pÅejmenovat:
+%1
+na
+%2</translation>
+    </message>
+    <message>
+        <location line="+93"/>
+        <source>Could not write
+%1</source>
+        <translation>NepodaÅilo se zapsat:
+%1</translation>
+    </message>
+</context>
+<context>
+    <name>Q3MainWindow</name>
+    <message>
+        <location filename="../src/qt3support/widgets/q3mainwindow.cpp" line="+2051"/>
+        <source>Line up</source>
+        <translation>UspoÅÃ¡dat</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Customize...</source>
+        <translation>PÅizpÅ¯sobit...</translation>
+    </message>
+</context>
+<context>
+    <name>Q3NetworkProtocol</name>
+    <message>
+        <location filename="../src/qt3support/network/q3networkprotocol.cpp" line="+854"/>
+        <source>Operation stopped by the user</source>
+        <translation>Operace byla zastavena uÅŸivatelem</translation>
+    </message>
+</context>
+<context>
+    <name>Q3ProgressDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3progressdialog.cpp" line="+224"/>
+        <location line="+61"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TabDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3tabdialog.cpp" line="+190"/>
+        <location line="+824"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location line="-323"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-43"/>
+        <source>Apply</source>
+        <translation>PouÅŸÃ­t</translation>
+    </message>
+    <message>
+        <location line="+138"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-50"/>
+        <source>Defaults</source>
+        <translation>VÃœchozÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TextEdit</name>
+    <message>
+        <location filename="../src/qt3support/text/q3textedit.cpp" line="+5435"/>
+        <source>Cu&amp;t</source>
+        <translation>Vyj&amp;mout</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Znovu</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;ZpÄt</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Clear</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location line="+2"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TitleBar</name>
+    <message>
+        <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+256"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Minimize</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <source>Puts a minimized back to normal</source>
+        <translation type="obsolete">DÃ¡ velikost zmenÅ¡enÃ©ho okna zpÃ¡tky do obvyklÃ©ho stavu</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Displays the name of the window and contains controls to manipulate it</source>
+        <translation>ZobrazÃ­ nÃ¡zev okna a obsahuje pÅÃ­kazy pro zachÃ¡zenÃ­ s nÃ­m</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Makes the window full screen</source>
+        <translation>DÃ¡ okno na celou obrazovku</translation>
+    </message>
+    <message>
+        <location line="-36"/>
+        <source>System</source>
+        <translation>SystÃ©m</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Maximize</source>
+        <translation>ZvÄtÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Contains commands to manipulate the window</source>
+        <translation>Obsahuje pÅÃ­kazy pro zachÃ¡zenÃ­ s velikostÃ­ okna</translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>Restore up</source>
+        <translation>Obnovit</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Puts a minimized window back to normal</source>
+        <translation>DÃ¡ velikost zmenÅ¡enÃ©ho okna zpÃ¡tky do obvyklÃ©ho stavu</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Closes the window</source>
+        <translation>ZavÅe okno</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Puts a maximized window back to normal</source>
+        <translation>DÃ¡ velikost zvÄtÅ¡enÃ©ho okna zpÃ¡tky do obvyklÃ©ho stavu</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Moves the window out of the way</source>
+        <translation>ZmenÅ¡Ã­ okno</translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>Restore down</source>
+        <translation>Obnovit</translation>
+    </message>
+</context>
+<context>
+    <name>Q3ToolBar</name>
+    <message>
+        <location filename="../src/qt3support/widgets/q3toolbar.cpp" line="+692"/>
+        <source>More...</source>
+        <translation>VÃ­ce...</translation>
+    </message>
+</context>
+<context>
+    <name>Q3UrlOperator</name>
+    <message>
+        <location filename="../src/qt3support/network/q3urloperator.cpp" line="+402"/>
+        <source>The protocol `%1&apos; does not support getting files</source>
+        <translation>Protokol `%1&apos; nepodporuje nahrÃ¡vÃ¡nÃ­ souborÅ¯</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>The protocol `%1&apos; does not support renaming files or directories</source>
+        <translation>Protokol `%1&apos; nepodporuje pÅejmenovÃ¡vÃ¡nÃ­ souborÅ¯ nebo adresÃ¡ÅÅ¯</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>The protocol `%1&apos; does not support listing directories</source>
+        <translation>Protokol `%1&apos; nepodporuje sestavovÃ¡nÃ­ seznamu adresÃ¡ÅÅ¯</translation>
+    </message>
+    <message>
+        <location line="+499"/>
+        <location line="+1"/>
+        <source>(unknown)</source>
+        <translation>(neznÃ¡mÃœ)</translation>
+    </message>
+    <message>
+        <location line="-494"/>
+        <source>The protocol `%1&apos; does not support removing files or directories</source>
+        <translation>Protokol `%1&apos; nepodporuje odstraÅovÃ¡nÃ­ souborÅ¯ nebo adresÃ¡ÅÅ¯</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The protocol `%1&apos; does not support putting files</source>
+        <translation>Protokol `%1&apos; nepodporuje uklÃ¡dÃ¡nÃ­ souborÅ¯</translation>
+    </message>
+    <message>
+        <location line="-19"/>
+        <location line="+260"/>
+        <location line="+4"/>
+        <source>The protocol `%1&apos; is not supported</source>
+        <translation>Protokol `%1&apos; nenÃ­ podporovÃ¡n</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <location line="+4"/>
+        <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
+        <translation>Protokol `%1&apos; nepodporuje kopÃ­rovÃ¡nÃ­ Äi pÅesun souborÅ¯ nebo adresÃ¡ÅÅ¯</translation>
+    </message>
+    <message>
+        <location line="-259"/>
+        <source>The protocol `%1&apos; does not support creating new directories</source>
+        <translation>Protokol `%1&apos; nepodporuje vytvÃ¡ÅenÃ­ novÃœch adresÃ¡ÅÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>Q3Wizard</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3wizard.cpp" line="+181"/>
+        <source>&amp;Help</source>
+        <translation>&amp;NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Finish</source>
+        <translation>Do&amp;konÄit</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>&amp;Next &gt;</source>
+        <translation>&amp;DalÅ¡Ã­ &gt;</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>&lt; &amp;Back</source>
+        <translation>&lt; &amp;ZpÄt</translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSocket</name>
+    <message>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/>
+        <location line="+26"/>
+        <source>Host not found</source>
+        <translation>NepodaÅilo se najÃ­t poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+3"/>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+4"/>
+        <source>Connection refused</source>
+        <translation>SpojenÃ­ bylo odmÃ­tnuto</translation>
+    </message>
+    <message>
+        <location line="+142"/>
+        <source>Connection timed out</source>
+        <translation>ÄasovÃœ limit pro spojenÃ­ byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location line="+1029"/>
+        <source>Socket is not connected</source>
+        <translation>ZÃ¡suvka (socket) nenÃ­ spojena</translation>
+    </message>
+    <message>
+        <location line="-380"/>
+        <source>Socket operation timed out</source>
+        <translation>ÄasovÃœ limit pro zÃ¡suvkovou (socket) operaci byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-8"/>
+        <source>Network unreachable</source>
+        <translation>SÃ­Å¥ nenÃ­ dosaÅŸitelnÃ¡</translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="-1197"/>
+        <location line="+789"/>
+        <location line="+208"/>
+        <source>Operation on socket is not supported</source>
+        <translation>Tato zÃ¡suvkovÃ¡ (socket) operace nenÃ­ podporovÃ¡na</translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSpinBox</name>
+    <message>
+        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1219"/>
+        <source>Step &amp;down</source>
+        <translation>Krok &amp;dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>&amp;Step up</source>
+        <translation>&amp;Krok nahoru</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>&amp;Select All</source>
+        <translation>&amp;Vybrat vÅ¡e</translation>
+    </message>
+</context>
+<context>
+    <name>QAccessibleButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/>
+        <source>Press</source>
+        <translation>Stisknout</translation>
+    </message>
+</context>
+<context>
+    <name>QApplication</name>
+    <message>
+        <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+378"/>
+        <source>Activates the program&apos;s main window</source>
+        <translation>SpustÃ­ hlavnÃ­ okno programu</translation>
+    </message>
+    <message>
+        <source>QT_LAYOUT_DIRECTION</source>
+        <translation type="obsolete">LTR</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Activate</source>
+        <translation>Spustit</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.h" line="+354"/>
+        <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+        <translation>PouÅŸitÃ­ &apos;%1&apos; vyÅŸaduje Qt %2; bylo ale nalezeno Qt %3.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Incompatible Qt Library Error</source>
+        <translation>Qt nenÃ­ sluÄitelnÃ¡</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/kernel/qapplication.cpp" line="+2290"/>
+        <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>
+    </message>
+</context>
+<context>
+    <name>QAxSelect</name>
+    <message>
+        <location filename="../src/activeqt/container/qaxselect.ui"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location/>
+        <source>COM &amp;Object:</source>
+        <translation>COM-&amp;Objekt:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Select ActiveX Control</source>
+        <translation>Vybrat prvek ActiveX</translation>
+    </message>
+</context>
+<context>
+    <name>QCheckBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-133"/>
+        <source>Check</source>
+        <translation>OznaÄit kÅÃ­ÅŸkem</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Toggle</source>
+        <translation>PÅepnout</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Uncheck</source>
+        <translation>ZruÅ¡it oznaÄenÃ­ kÅÃ­ÅŸkem</translation>
+    </message>
+</context>
+<context>
+    <name>QColorDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1352"/>
+        <source>&amp;Red:</source>
+        <translation>&amp;ÄervenÃ¡:</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>&amp;Sat:</source>
+        <translation>&amp;Sytost:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Val:</source>
+        <translation>&amp;Jasnost:</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Hu&amp;e:</source>
+        <translation>BarevnÃœ &amp;odstÃ­n:</translation>
+    </message>
+    <message>
+        <location line="+107"/>
+        <source>Select Color</source>
+        <translation>Vybrat barvu</translation>
+    </message>
+    <message>
+        <location line="+182"/>
+        <source>&amp;Add to Custom Colors</source>
+        <translation>&amp;PÅidat k uÅŸivatelem stanovenÃœm barvÃ¡m</translation>
+    </message>
+    <message>
+        <location line="-284"/>
+        <source>Bl&amp;ue:</source>
+        <translation>&amp;ModrÃ¡:</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>&amp;Green:</source>
+        <translation>&amp;ZelenÃ¡:</translation>
+    </message>
+    <message>
+        <location line="+283"/>
+        <source>&amp;Basic colors</source>
+        <translation>ZÃ¡kladnÃ­ &amp;barvy</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Custom colors</source>
+        <translation>&amp;UÅŸivatelem stanovenÃ© barvy</translation>
+    </message>
+    <message>
+        <location line="-282"/>
+        <source>A&amp;lpha channel:</source>
+        <translation>A&amp;lfa kanÃ¡l:</translation>
+    </message>
+</context>
+<context>
+    <name>QComboBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/>
+        <location line="+65"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="+557"/>
+        <source>True</source>
+        <translation>PravdivÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+0"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="-1"/>
+        <source>False</source>
+        <translation>NesprÃ¡vnÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>QCoreApplication</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/>
+        <source>%1: key is empty</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: NeplatnÃœ Ãºdaj u klÃ­Äe (prÃ¡zdnÃœ)</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1: unable to make key</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: NepodaÅilo se vytvoÅit klÃ­Ä</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1: ftok failed</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: VyvolÃ¡nÃ­ ftok se nezdaÅilo</translation>
+    </message>
+    <message>
+        <source>%1: key is empty</source>
+        <translation type="obsolete">%1: NeplatnÃœ Ãºdaj u klÃ­Äe (prÃ¡zdnÃœ)</translation>
+    </message>
+    <message>
+        <source>%1: unable to make key</source>
+        <translation type="obsolete">%1: NepodaÅilo se vytvoÅit klÃ­Ä</translation>
+    </message>
+    <message>
+        <source>%1: ftok failed</source>
+        <translation type="obsolete">%1: VyvolÃ¡nÃ­ ftok se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_symbian.cpp" line="+65"/>
+        <source>%1: already exists</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: JiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: does not exist</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: Neexistuje</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1: out of resources</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: Nejsou jiÅŸ pouÅŸitelnÃ© zdroje</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: unknown error %2</source>
+        <comment>QSystemSemaphore</comment>
+        <translation>%1: NeznÃ¡mÃ¡ chyba %2</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Driver</name>
+    <message>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1552"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Unable to set autocommit</source>
+        <translation>&apos;autocommit&apos; se nepodaÅilo nastavit</translation>
+    </message>
+    <message>
+        <location line="-330"/>
+        <source>Unable to connect</source>
+        <translation>NepodaÅilo se navÃ¡zat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+315"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Result</name>
+    <message>
+        <location line="-786"/>
+        <source>Unable to bind variable</source>
+        <translation>PromÄnnou se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-230"/>
+        <location line="+240"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+98"/>
+        <source>Unable to fetch next</source>
+        <translation>DalÅ¡Ã­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location line="-301"/>
+        <source>Unable to prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo pÅipravit</translation>
+    </message>
+    <message>
+        <location line="+282"/>
+        <source>Unable to fetch record %1</source>
+        <translation>DatovÃœ zÃ¡znam %1 se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>Unable to fetch first</source>
+        <translation>PrvnÃ­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+</context>
+<context>
+    <name>QDateTimeEdit</name>
+    <message>
+        <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2287"/>
+        <source>AM</source>
+        <translation>AM</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>PM</source>
+        <translation>PM</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>am</source>
+        <translation>am</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>pm</source>
+        <translation>pm</translation>
+    </message>
+</context>
+<context>
+    <name>QDial</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/>
+        <source>QDial</source>
+        <translation>QDial</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>SliderHandle</source>
+        <translation>PosuvnÃ­k</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>SpeedoMeter</source>
+        <translation>RychlomÄr</translation>
+    </message>
+</context>
+<context>
+    <name>QDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qdialog.cpp" line="+501"/>
+        <source>Done</source>
+        <translation>Hotovo</translation>
+    </message>
+    <message>
+        <location line="+135"/>
+        <source>What&apos;s This?</source>
+        <translation>Co je toto?</translation>
+    </message>
+</context>
+<context>
+    <name>QDialogButtonBox</name>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/>
+        <location line="+464"/>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+606"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+0"/>
+        <source>&amp;OK</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>&amp;No</source>
+        <translation>&amp;Ne</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>&amp;Yes</source>
+        <translation>&amp;Ano</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Save</source>
+        <translation>UloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Abort</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-32"/>
+        <source>Apply</source>
+        <translation>PouÅŸÃ­t</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Reset</source>
+        <translation>VrÃ¡tit</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Retry</source>
+        <translation>Opakovat</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Restore Defaults</source>
+        <translation>Obnovit vÃœchozÃ­</translation>
+    </message>
+    <message>
+        <location line="-44"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Ignore</source>
+        <translation>PÅehlÃ­ÅŸet</translation>
+    </message>
+    <message>
+        <location line="-26"/>
+        <source>Close without Saving</source>
+        <translation>ZavÅÃ­t bez uloÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>N&amp;o to All</source>
+        <translation>N&amp;e, ÅŸÃ¡dnÃ©</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Save All</source>
+        <translation>UloÅŸit vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="-35"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Discard</source>
+        <translation>OdmÃ­tnout</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Yes to &amp;All</source>
+        <translation>Ano, &amp;vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>Don&apos;t Save</source>
+        <translation>NeuklÃ¡dat</translation>
+    </message>
+</context>
+<context>
+    <name>QDirModel</name>
+    <message>
+        <source>Kind</source>
+        <translation type="obsolete">Druh</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+457"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Size</source>
+        <translation>Velikost</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Kind</source>
+        <comment>Match OS X Finder</comment>
+        <translation>Druh</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Type</source>
+        <comment>All other platforms</comment>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation type="obsolete">Typ</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Date Modified</source>
+        <translation>Datum zmÄny</translation>
+    </message>
+</context>
+<context>
+    <name>QDockWidget</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/qaccessiblewidgets.cpp" line="+1241"/>
+        <source>Dock</source>
+        <translation>Vplout do panelu</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Float</source>
+        <translation>Plout</translation>
+    </message>
+</context>
+<context>
+    <name>QDoubleSpinBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-533"/>
+        <source>Less</source>
+        <translation>MÃ©nÄ</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>More</source>
+        <translation>VÃ­ce</translation>
+    </message>
+</context>
+<context>
+    <name>QErrorMessage</name>
+    <message>
+        <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+415"/>
+        <source>&amp;OK</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <location line="-201"/>
+        <source>Fatal Error:</source>
+        <translation>OsudovÃ¡ chyba:</translation>
+    </message>
+    <message>
+        <location line="+200"/>
+        <source>&amp;Show this message again</source>
+        <translation>Toto hlÃ¡Å¡enÃ­ &amp;ukÃ¡zat jeÅ¡tÄ jednou</translation>
+    </message>
+    <message>
+        <location line="-206"/>
+        <source>Debug Message:</source>
+        <translation>HlÃ¡Å¡enÃ­ o odladÄnÃ­:</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Warning:</source>
+        <translation>VarovÃ¡nÃ­:</translation>
+    </message>
+</context>
+<context>
+    <name>QFile</name>
+    <message>
+        <location filename="../src/corelib/io/qfile.cpp" line="+905"/>
+        <source>Cannot create %1 for output</source>
+        <translation>%1 se nepodaÅilo zÅÃ­dit pro vÃœstup</translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <source>Failure to write block</source>
+        <translation>DatovÃœ blok se nepodaÅilo zapsat</translation>
+    </message>
+    <message>
+        <location line="-180"/>
+        <source>Will not rename sequential file using block copy</source>
+        <translation>NepÅejmenuje posloupnÃœ soubor pomocÃ­ kopie bloku</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Cannot remove source file</source>
+        <translation>Nelze odstranit zdrojovÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+130"/>
+        <source>Cannot open %1 for input</source>
+        <translation>%1 se nepodaÅilo otevÅÃ­t pro ÄtenÃ­</translation>
+    </message>
+    <message>
+        <location line="-168"/>
+        <location line="+155"/>
+        <source>Destination file exists</source>
+        <translation>CÃ­lovÃœ soubor jiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Cannot open for output</source>
+        <translation>NepodaÅilo se otevÅÃ­t pro zÃ¡pis</translation>
+    </message>
+</context>
+<context>
+    <name>QFileDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Back</source>
+        <translation>ZpÄt</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+464"/>
+        <location line="+1"/>
+        <source>File</source>
+        <translation>Soubor</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>File Folder</source>
+        <comment>Match Windows Explorer</comment>
+        <translation>SouborovÃ¡ sloÅŸka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Folder</source>
+        <comment>All other platforms</comment>
+        <translation>SloÅŸka</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Alias</source>
+        <comment>Mac OS X Finder</comment>
+        <translation>PÅezdÃ­vka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Shortcut</source>
+        <comment>All other platforms</comment>
+        <translation>Zkratka</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+541"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+691"/>
+        <location line="+50"/>
+        <location line="+1528"/>
+        <source>&amp;Open</source>
+        <translation>&amp;OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-1578"/>
+        <location line="+50"/>
+        <source>&amp;Save</source>
+        <translation>&amp;UloÅŸit</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="-22"/>
+        <source>Drive</source>
+        <translation>DiskovÃ¡ jednotka</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-714"/>
+        <source>Show </source>
+        <translation>UkÃ¡zat </translation>
+    </message>
+    <message>
+        <location line="+2091"/>
+        <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+        <translation>&apos;%1&apos; je chrÃ¡nÄn proti zÃ¡pisu.
+PÅesto chcete soubor smazat?</translation>
+    </message>
+    <message>
+        <location line="-2077"/>
+        <location line="+663"/>
+        <source>File &amp;name:</source>
+        <translation>NÃ¡zev &amp;souboru:</translation>
+    </message>
+    <message>
+        <location line="+1286"/>
+        <source>New Folder</source>
+        <translation>NovÃ¡ sloÅŸka</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Parent Directory</source>
+        <translation>NadÅazenÃœ adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1956"/>
+        <source>&amp;New Folder</source>
+        <translation>&amp;NovÃ¡ sloÅŸka</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qsidebar.cpp" line="+442"/>
+        <source>Remove</source>
+        <translation>Odstranit</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/>
+        <source>My Computer</source>
+        <translation>MÅ¯j poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Look in:</source>
+        <translation>Hledat v:</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Files of type:</source>
+        <translation>Soubory typu:</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-36"/>
+        <source>Find Directory</source>
+        <translation>NajÃ­t adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Show &amp;hidden files</source>
+        <translation>&amp;UkÃ¡zat skrytÃ© soubory</translation>
+    </message>
+    <message>
+        <location line="+2090"/>
+        <source>Are sure you want to delete &apos;%1&apos;?</source>
+        <translation>Jste si jistÃœ, ÅŸe %1 chcete smazat?</translation>
+    </message>
+    <message>
+        <location line="-2121"/>
+        <source>Save As</source>
+        <translation>UloÅŸit jako</translation>
+    </message>
+    <message>
+        <location line="+1472"/>
+        <location line="+862"/>
+        <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+        <translation>%1
+AdresÃ¡Å se nepodaÅilo nalÃ©zt.
+OvÄÅte, prosÃ­m, ÅŸe byl zadÃ¡n sprÃ¡vnÃœ nÃ¡zev adresÃ¡Åe.</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>List View</source>
+        <translation>Pohled se seznamem</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1635"/>
+        <location line="+38"/>
+        <source>&amp;Choose</source>
+        <translation>&amp;Vybrat</translation>
+    </message>
+    <message>
+        <location line="-707"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Smazat</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <location line="+450"/>
+        <source>All Files (*)</source>
+        <translation>VÅ¡echny soubory (*)</translation>
+    </message>
+    <message>
+        <location line="+227"/>
+        <source>Directories</source>
+        <translation>AdresÃ¡Åe</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+174"/>
+        <source>All Files (*.*)</source>
+        <translation>VÅ¡echny soubory (*.*)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-663"/>
+        <source>&amp;Rename</source>
+        <translation>&amp;PÅejmenovat</translation>
+    </message>
+    <message>
+        <location line="+2107"/>
+        <source>Could not delete directory.</source>
+        <translation>AdresÃ¡Å se nepodaÅilo smazat.</translation>
+    </message>
+    <message>
+        <location line="-2099"/>
+        <location line="+659"/>
+        <source>Directory:</source>
+        <translation>AdresÃ¡Å:</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+29"/>
+        <source>Unknown</source>
+        <translation>NeznÃ¡mÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+810"/>
+        <source>%1 already exists.
+Do you want to replace it?</source>
+        <translation>Soubor %1 jiÅŸ existuje.
+Chcete jej nahradit?</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Forward</source>
+        <translation>DopÅedu</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1040"/>
+        <source>Recent Places</source>
+        <translation>Naposledy navÅ¡tÃ­venÃ©</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Create New Folder</source>
+        <translation>VytvoÅit novou sloÅŸku</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/>
+        <source>Detail View</source>
+        <translation>PodrobnÃœ pohled</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1020"/>
+        <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+        <translation>%1
+Soubor se nepodaÅilo nalÃ©zt.
+OvÄÅte, prosÃ­m, ÅŸe byl zadÃ¡n sprÃ¡vnÃœ nÃ¡zev souboru.</translation>
+    </message>
+</context>
+<context>
+    <name>QFileSystemModel</name>
+    <message>
+        <source>Kind</source>
+        <translation type="obsolete">Druh</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+893"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size</source>
+        <translation>Velikost</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation type="obsolete">Typ</translation>
+    </message>
+    <message>
+        <location line="-149"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+478"/>
+        <source>%1 GB</source>
+        <translation>%1 GB</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+4"/>
+        <source>%1 KB</source>
+        <translation>%1 KB</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="-2"/>
+        <source>%1 MB</source>
+        <translation>%1 MB</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="-4"/>
+        <source>%1 TB</source>
+        <translation>%1 TB</translation>
+    </message>
+    <message>
+        <location line="+85"/>
+        <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
+        <translation>&lt;b&gt;NÃ¡zev &quot;%1&quot; nelze pouÅŸÃ­t.&lt;/b&gt;&lt;p&gt;Zkuste pouÅŸÃ­t jinÃœ nÃ¡zev, s menÅ¡Ã­m poÄtem znakÅ¯ nebo bez zvlÃ¡Å¡tnÃ­ch znakÅ¯.</translation>
+    </message>
+    <message>
+        <location line="-78"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+7"/>
+        <source>%1 bytes</source>
+        <translation>%1 bytÅ¯</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+258"/>
+        <source>My Computer</source>
+        <translation>MÅ¯j poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Computer</source>
+        <translation>PoÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+77"/>
+        <source>Invalid filename</source>
+        <translation>NeplatnÃœ nÃ¡zev souboru</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>Kind</source>
+        <comment>Match OS X Finder</comment>
+        <translation>Druh</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Type</source>
+        <comment>All other platforms</comment>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Date Modified</source>
+        <translation>Datum zmÄny</translation>
+    </message>
+</context>
+<context>
+    <name>QFontDatabase</name>
+    <message>
+        <location filename="../src/gui/text/qfontdatabase.cpp" line="+2137"/>
+        <source>Any</source>
+        <translation>VÅ¡echna</translation>
+    </message>
+    <message>
+        <location line="+60"/>
+        <source>Lao</source>
+        <translation>LaoskÃ©</translation>
+    </message>
+    <message>
+        <location line="-2092"/>
+        <location line="+12"/>
+        <location line="+1308"/>
+        <source>Bold</source>
+        <translation>TuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="-1306"/>
+        <source>Demi</source>
+        <translation>PolotuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+2075"/>
+        <source>Thai</source>
+        <translation>ThajskÃ©</translation>
+    </message>
+    <message>
+        <location line="-2083"/>
+        <location line="+18"/>
+        <location line="+1294"/>
+        <source>Black</source>
+        <translation>ÄernÃ©</translation>
+    </message>
+    <message>
+        <location line="+720"/>
+        <source>Greek</source>
+        <translation>ÅeckÃ©</translation>
+    </message>
+    <message>
+        <location line="+66"/>
+        <source>Khmer</source>
+        <translation>KhmerskÃ©</translation>
+    </message>
+    <message>
+        <location line="-69"/>
+        <source>Latin</source>
+        <translation>LatinskÃ©</translation>
+    </message>
+    <message>
+        <location line="-2015"/>
+        <location line="+1304"/>
+        <source>Light</source>
+        <translation>LehkÃ©</translation>
+    </message>
+    <message>
+        <location line="+801"/>
+        <source>Ogham</source>
+        <translation>OgamskÃ©</translation>
+    </message>
+    <message>
+        <location line="-54"/>
+        <source>Oriya</source>
+        <translation>Oriya</translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Runic</source>
+        <translation>RunovÃ©</translation>
+    </message>
+    <message>
+        <location line="-54"/>
+        <source>Tamil</source>
+        <translation>TamilskÃ©</translation>
+    </message>
+    <message>
+        <location line="-33"/>
+        <source>Cyrillic</source>
+        <translation>CyrilskÃ©</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Kannada</source>
+        <translation>Kannada</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Malayalam</source>
+        <translation>Malayalam</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Simplified Chinese</source>
+        <translation>ZjednoduÅ¡enÃ¡ ÄÃ­nÅ¡tina</translation>
+    </message>
+    <message>
+        <location line="-2104"/>
+        <location line="+1319"/>
+        <source>Demi Bold</source>
+        <translation>PolotuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+728"/>
+        <source>Arabic</source>
+        <translation>ArabskÃ©</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Hebrew</source>
+        <translation>HebrejskÃ©</translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <source>Myanmar</source>
+        <translation>Myanmar</translation>
+    </message>
+    <message>
+        <location line="-1932"/>
+        <location line="+1161"/>
+        <source>Italic</source>
+        <translation>Itala</translation>
+    </message>
+    <message>
+        <location line="+789"/>
+        <source>Korean</source>
+        <translation>KorejskÃ©</translation>
+    </message>
+    <message>
+        <location line="-2119"/>
+        <location line="+1335"/>
+        <source>Normal</source>
+        <translation>ObvyklÃ©</translation>
+    </message>
+    <message>
+        <location line="-1163"/>
+        <location line="+1160"/>
+        <source>Oblique</source>
+        <translation>NaklonÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+748"/>
+        <source>Telugu</source>
+        <translation>Telugu</translation>
+    </message>
+    <message>
+        <location line="-21"/>
+        <source>Thaana</source>
+        <translation>Thaana</translation>
+    </message>
+    <message>
+        <location line="+66"/>
+        <source>Symbol</source>
+        <translation>Symbol</translation>
+    </message>
+    <message>
+        <location line="-69"/>
+        <source>Syriac</source>
+        <translation>SyrskÃ©</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Devanagari</source>
+        <translation>Devanagari</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Japanese</source>
+        <translation>JaponskÃ©</translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <source>Bengali</source>
+        <translation>BengÃ¡lskÃ©</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Armenian</source>
+        <translation>ArmÃ©nskÃ©</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Sinhala</source>
+        <translation>SinhÃ¡lskÃ©</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Tibetan</source>
+        <translation>TibetskÃ©</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Vietnamese</source>
+        <translation>VÄtnamskÃ©</translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <source>Gujarati</source>
+        <translation>Gujarati</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Traditional Chinese</source>
+        <translation>TradiÄnÃ­ ÄÃ­nÅ¡tina</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Georgian</source>
+        <translation>GruzÃ­nskÃ©</translation>
+    </message>
+    <message>
+        <location line="-36"/>
+        <source>Gurmukhi</source>
+        <translation>Gurmukhi</translation>
+    </message>
+</context>
+<context>
+    <name>QFontDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+776"/>
+        <source>&amp;Font</source>
+        <translation>&amp;PÃ­smo</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Size</source>
+        <translation>&amp;Velikost</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Sample</source>
+        <translation>Vzorek</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Font st&amp;yle</source>
+        <translation>Druh pÃ­s&amp;ma</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Wr&amp;iting System</source>
+        <translation>ZpÅ¯sob &amp;psanÃ­</translation>
+    </message>
+    <message>
+        <location line="-609"/>
+        <location line="+257"/>
+        <source>Select Font</source>
+        <translation>Vybrat pÃ­smo</translation>
+    </message>
+    <message>
+        <location line="+350"/>
+        <source>&amp;Underline</source>
+        <translation>&amp;Podtrhnout</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Effects</source>
+        <translation>Efekty</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Stri&amp;keout</source>
+        <translation>PÅe&amp;Å¡krtnout</translation>
+    </message>
+</context>
+<context>
+    <name>QFtp</name>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="+2333"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+2021"/>
+        <source>Listing directory failed:
+%1</source>
+        <translation>Obsah adresÃ¡ÅÅ¯ nelze ukÃ¡zat:
+%1</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+15"/>
+        <source>Creating directory failed:
+%1</source>
+        <translation>VytvoÅenÃ­ adresÃ¡ÅÅ¯ se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location line="-1525"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1353"/>
+        <source>Not connected</source>
+        <translation>ÅœÃ¡dnÃ© spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+399"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+332"/>
+        <source>Connection refused for data connection</source>
+        <translation>OdmÃ­tnuto spojenÃ­ spojenÃ­ pro data</translation>
+    </message>
+    <message>
+        <location line="+1102"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+1003"/>
+        <source>Login failed:
+%1</source>
+        <translation>PÅihlÃ¡Å¡enÃ­ se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+9"/>
+        <source>Downloading file failed:
+%1</source>
+        <translation>StaÅŸenÃ­ souboru se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+285"/>
+        <source>Connected to host</source>
+        <translation>SpojenÃ­ s poÄÃ­taÄem navÃ¡zÃ¡no</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="-1437"/>
+        <source>Connection timed out to host %1</source>
+        <translation>ÄasovÃœ limit pro spojenÃ­ s poÄÃ­taÄem &apos;%1&apos; byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location line="+104"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1458"/>
+        <location line="+1451"/>
+        <source>Connected to host %1</source>
+        <translation>Spojeno s poÄÃ­taÄem %1</translation>
+    </message>
+    <message>
+        <location line="+1317"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-290"/>
+        <source>Connecting to host failed:
+%1</source>
+        <translation>SpojenÃ­ s poÄÃ­taÄem se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location line="-1429"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1267"/>
+        <source>Host %1 not found</source>
+        <translation>PoÄÃ­taÄ %1 se nepodaÅilo nalÃ©zt</translation>
+    </message>
+    <message>
+        <location line="+1449"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+1282"/>
+        <source>Uploading file failed:
+%1</source>
+        <translation>NahrÃ¡nÃ­ souboru se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-6"/>
+        <source>Changing directory failed:
+%1</source>
+        <translation>ZmÄna adresÃ¡Åe se nezdaÅila:
+%1</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+286"/>
+        <source>Host found</source>
+        <translation>PoÄÃ­taÄ byl nalezen</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="+20"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-271"/>
+        <source>Removing directory failed:
+%1</source>
+        <translation>OdstranÄnÃ­ adresÃ¡Åe se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location line="-1457"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1287"/>
+        <source>Connection refused to host %1</source>
+        <translation>SpojenÃ­ s poÄÃ­taÄem %1 odmÃ­tnuto</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+1555"/>
+        <source>Connection to %1 closed</source>
+        <translation>SpojenÃ­ s %1 ukonÄeno</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="+1449"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-274"/>
+        <source>Removing file failed:
+%1</source>
+        <translation>OdstranÄnÃ­ souboru se nezdaÅilo:
+%1</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+270"/>
+        <source>Host %1 found</source>
+        <translation>PoÄÃ­taÄ %1 byl nalezen</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="-944"/>
+        <location line="+29"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1093"/>
+        <location line="+728"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="+951"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+126"/>
+        <location line="+250"/>
+        <source>Connection closed</source>
+        <translation>SpojenÃ­ ukonÄeno</translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfo</name>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfoAgent</name>
+    <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 line="+27"/>
+        <source>Host not found</source>
+        <translation>NepodaÅilo se najÃ­t poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <location line="+39"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-34"/>
+        <location line="+29"/>
+        <source>Unknown address type</source>
+        <translation>NeznÃ¡mÃœ typ adresy</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-19"/>
+        <location line="+27"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-67"/>
+        <source>No host name given</source>
+        <translation>Nebyl zadÃ¡n nÃ¡zev pro hostitelskÃœ poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Invalid hostname</source>
+        <translation>NeplatnÃœ nÃ¡zev pro hostitelskÃœ poÄÃ­taÄ</translation>
+    </message>
+</context>
+<context>
+    <name>QHttp</name>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+2636"/>
+        <source>Connection refused (or timed out)</source>
+        <translation>SpojenÃ­ bylo odmÃ­tnuto (nebo byl pÅekroÄen ÄasovÃœ limit)</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+584"/>
+        <source>Data corrupted</source>
+        <translation>Data jsou poÅ¡kozena</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+2308"/>
+        <source>Connected to host</source>
+        <translation>SpojenÃ­ s poÄÃ­taÄem navÃ¡zÃ¡no</translation>
+    </message>
+    <message>
+        <location line="-14"/>
+        <source>Connected to host %1</source>
+        <translation>Spojeno s poÄÃ­taÄem %1</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+3"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-19"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-456"/>
+        <source>Host %1 not found</source>
+        <translation>PoÄÃ­taÄ %1 se nepodaÅilo nalÃ©zt</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+16"/>
+        <source>Host requires authentication</source>
+        <translation>HostitelskÃœ poÄÃ­taÄ poÅŸaduje autentizaci</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+325"/>
+        <source>Error writing response to device</source>
+        <translation>PÅi psanÃ­ odpovÄdi vÃœstupnÃ­mu zaÅÃ­zenÃ­ se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location line="-2594"/>
+        <source>HTTPS connection requested but SSL support not compiled in</source>
+        <translation>PoÅŸadovanÃ© HTTPS spojenÃ­ nelze vytvoÅit, protoÅŸe neexistuje ÅŸÃ¡dnÃ¡ SSL podpora</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+467"/>
+        <source>Host found</source>
+        <translation>PoÄÃ­taÄ byl nalezen</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-12"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-470"/>
+        <source>Connection refused</source>
+        <translation>SpojenÃ­ bylo odmÃ­tnuto</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+2421"/>
+        <source>Proxy authentication required</source>
+        <translation>PoÅŸadovÃ¡na proxy autentizace</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+18"/>
+        <source>Unknown protocol specified</source>
+        <translation>Byl zadÃ¡n neznÃ¡mÃœ protokol</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="-132"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-12"/>
+        <location line="+19"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+6"/>
+        <source>HTTP request failed</source>
+        <translation>HTTP dotaz se nezdaÅil</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-16"/>
+        <source>Proxy requires authentication</source>
+        <translation>Proxy server poÅŸaduje autentizaci</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+136"/>
+        <source>Authentication required</source>
+        <translation>PoÅŸadovÃ¡na autentizace</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+12"/>
+        <source>SSL handshake failed</source>
+        <translation>BÄhem startu SSL protokolu se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+456"/>
+        <source>Connection to %1 closed</source>
+        <translation>SpojenÃ­ s %1 ukonÄeno</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+83"/>
+        <location line="+48"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-347"/>
+        <location line="+47"/>
+        <source>Invalid HTTP chunked body</source>
+        <translation>Obsah (chunked body - rozkouskovanÃ© tÄlo) HTTP je neplatnÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+294"/>
+        <source>Host %1 found</source>
+        <translation>PoÄÃ­taÄ %1 byl nalezen</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="-349"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-498"/>
+        <source>Wrong content length</source>
+        <translation>NeplatnÃœ Ãºdaj o dÃ©lce obsahu</translation>
+    </message>
+    <message>
+        <location line="-995"/>
+        <location line="+820"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-634"/>
+        <location line="+567"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="+351"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+184"/>
+        <source>Invalid HTTP response header</source>
+        <translation>HlaviÄka HTTP odpovÄdi nenÃ­ platnÃ¡</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Unknown authentication method</source>
+        <translation>NeznÃ¡mÃœ zpÅ¯sob autentizace</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-18"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+401"/>
+        <source>Connection closed</source>
+        <translation>SpojenÃ­ ukonÄeno</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="-368"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-574"/>
+        <source>No server set to connect to</source>
+        <translation>Pro spojenÃ­ nebyl nastaven ÅŸÃ¡dnÃœ poÄÃ­taÄ - server</translation>
+    </message>
+    <message>
+        <location line="+168"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+60"/>
+        <source>Server closed connection unexpectedly</source>
+        <translation>Server neoÄekÃ¡vanÄ uzavÅel spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="-747"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-441"/>
+        <source>Request aborted</source>
+        <translation>PoÅŸadavek byl zruÅ¡en</translation>
+    </message>
+</context>
+<context>
+    <name>QHttpSocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+29"/>
+        <source>Proxy connection refused</source>
+        <translation>Proxy server odmÃ­tl navÃ¡zÃ¡nÃ­ spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="-35"/>
+        <source>Proxy denied connection</source>
+        <translation>Proxy server odmÃ­tl spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Proxy server not found</source>
+        <translation>NepodaÅilo se najÃ­t ÅŸÃ¡dnÃœ proxy server</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Proxy server connection timed out</source>
+        <translation>PÅi spojenÃ­ s proxy serverem byl pÅekroÄen ÄasovÃœ limit</translation>
+    </message>
+    <message>
+        <location line="-120"/>
+        <source>Did not receive HTTP response from proxy</source>
+        <translation>ÅœÃ¡dnÃ¡ HTTP odpovÄÄ od proxy serveru</translation>
+    </message>
+    <message>
+        <location line="+122"/>
+        <source>Proxy connection closed prematurely</source>
+        <translation>Proxy server pÅedÄasnÄ ukonÄil spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="-29"/>
+        <source>Error communicating with HTTP proxy</source>
+        <translation>Chyba pÅi spojenÃ­ s proxy serverem</translation>
+    </message>
+    <message>
+        <location line="-37"/>
+        <source>Authentication required</source>
+        <translation>PoÅŸadovÃ¡na autentizace</translation>
+    </message>
+    <message>
+        <location line="-31"/>
+        <source>Error parsing authentication request from proxy</source>
+        <translation>Chyba pÅi vyhodnocenÃ­ autentizaÄnÃ­ho poÅŸadavku proxy serveru</translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1558"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <source>Could not start transaction</source>
+        <translation>NepodaÅilo se spustit ÅŸÃ¡dnou transakci</translation>
+    </message>
+    <message>
+        <location line="-54"/>
+        <source>Error opening database</source>
+        <translation>NepodaÅilo se otevÅÃ­t spojenÃ­ s databÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <location line="+80"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseResult</name>
+    <message>
+        <location line="-707"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-422"/>
+        <source>Unable to open BLOB</source>
+        <translation>NepodaÅilo se otevÅÃ­t BLOB</translation>
+    </message>
+    <message>
+        <location line="+499"/>
+        <source>Could not describe statement</source>
+        <translation>NepodaÅilo se zÃ­skat ÅŸÃ¡dnÃœ popis pÅÃ­kazu</translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <location line="+11"/>
+        <source>Could not describe input statement</source>
+        <translation>NepodaÅilo se zÃ­skat ÅŸÃ¡dnÃœ popis vstupnÃ­ho pÅÃ­kazu</translation>
+    </message>
+    <message>
+        <location line="-21"/>
+        <source>Could not allocate statement</source>
+        <translation>PÅidÄlenÃ­ pÅÃ­kazu se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location line="-478"/>
+        <source>Unable to write BLOB</source>
+        <translation>NepodaÅilo se zapsat BLOB</translation>
+    </message>
+    <message>
+        <location line="+417"/>
+        <source>Could not start transaction</source>
+        <translation>NepodaÅilo se spustit ÅŸÃ¡dnou transakci</translation>
+    </message>
+    <message>
+        <location line="+211"/>
+        <source>Unable to close statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo zavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-231"/>
+        <source>Could not get query info</source>
+        <translation>PoÅŸadovanÃ© informace k vyhledÃ¡vÃ¡nÃ­ nejsou k dispozici</translation>
+    </message>
+    <message>
+        <location line="-242"/>
+        <location line="+187"/>
+        <source>Could not find array</source>
+        <translation>NepodaÅilo se najÃ­t pole</translation>
+    </message>
+    <message>
+        <location line="-155"/>
+        <source>Could not get array data</source>
+        <translation>NepodaÅilo se pÅeÄÃ­st data pole</translation>
+    </message>
+    <message>
+        <location line="+449"/>
+        <source>Unable to execute query</source>
+        <translation>Dotaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-153"/>
+        <source>Could not prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo pÅipravit</translation>
+    </message>
+    <message>
+        <location line="+199"/>
+        <source>Could not fetch next item</source>
+        <translation>DalÅ¡Ã­ prvek se nepodaÅilo vyzvednout</translation>
+    </message>
+    <message>
+        <location line="+197"/>
+        <source>Could not get statement info</source>
+        <translation>K dispozici nenÃ­ ÅŸÃ¡dnÃ¡ informace k pÅÃ­kazu</translation>
+    </message>
+    <message>
+        <location line="-885"/>
+        <source>Unable to create BLOB</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ BLOB</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Unable to read BLOB</source>
+        <translation>BLOB se nepodaÅilo pÅeÄÃ­st</translation>
+    </message>
+</context>
+<context>
+    <name>QIODevice</name>
+    <message>
+        <location filename="../src/corelib/global/qglobal.cpp" line="+2064"/>
+        <source>No such file or directory</source>
+        <translation>NepodaÅilo se najÃ­t ÅŸÃ¡dnÃœ takovÃœ soubor nebo adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Permission denied</source>
+        <translation>PÅÃ­stup odepÅen</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>No space left on device</source>
+        <translation>Na zaÅÃ­zenÃ­ nenÃ­ ÅŸÃ¡dnÃœ volnÃœ ÃºloÅŸnÃœ prostor</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qiodevice.cpp" line="+1561"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/global/qglobal.cpp" line="-6"/>
+        <source>Too many open files</source>
+        <translation>PÅÃ­liÅ¡ mnoho otevÅenÃœch souborÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>QInputContext</name>
+    <message>
+        <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+256"/>
+        <source>XIM</source>
+        <translation>XIM</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>FEP</source>
+        <translation>FEP</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Windows input method</source>
+        <translation>Windows-vstupnÃ­ metoda</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>S60 FEP input method</source>
+        <translation>S60 FEP-vstupnÃ­ metoda</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>XIM input method</source>
+        <translation>XIM-vstupnÃ­ metoda</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Mac OS X input method</source>
+        <translation>Mac OS X-vstupnÃ­ metoda</translation>
+    </message>
+</context>
+<context>
+    <name>QInputDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/>
+        <source>Enter a value:</source>
+        <translation>Zadejte hodnotu:</translation>
+    </message>
+</context>
+<context>
+    <name>QLibrary</name>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary.cpp" line="+411"/>
+        <source>Could not unmap &apos;%1&apos;: %2</source>
+        <translation>Operace unmap, zruÅ¡it zobrazenÃ­, se nezdaÅila u &apos;%1&apos;: %2</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+253"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+109"/>
+        <source>Cannot unload library %1: %2</source>
+        <translation>Knihovnu %1 nelze vyjmout: %2</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="-22"/>
+        <source>Cannot load library %1: %2</source>
+        <translation>Knihovnu %1 nelze nahrÃ¡t: %2</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary.cpp" line="+341"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+        <translation>PÅÃ­davnÃœ modul &apos;%1&apos; pouÅŸÃ­vÃ¡ nesluÄitelnou Qt knihovnu. (%2.%3.%4) [%5]</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+51"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+37"/>
+        <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+        <translation>Symbol &quot;%1&quot; nelze v %2 vyÅeÅ¡it: %3</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary.cpp" line="-347"/>
+        <source>Plugin verification data mismatch in &apos;%1&apos;</source>
+        <translation>OvÄÅovacÃ­ data pÅÃ­davnÃ©ho nesouhlasÃ­ v &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+375"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+        <translation>PÅÃ­davnÃœ modul &apos;%1&apos; pouÅŸÃ­vÃ¡ nesluÄitelnou Qt knihovnu. (Knihovny vytvoÅenÃ© v reÅŸimu ladÄnÃ­ a vydÃ¡nÃ­ nemohou bÃœt pouÅŸÃ­vÃ¡ny spoleÄnÄ.)</translation>
+    </message>
+    <message>
+        <location line="-43"/>
+        <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+        <translation>Soubor &apos;%1&apos; nenÃ­ platnÃœm pÅÃ­davnÃœm modulem Qt.</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/>
+        <source>The shared library was not found.</source>
+        <translation>NepodaÅilo se nalÃ©zt sdÃ­lenou knihovnu.</translation>
+    </message>
+    <message>
+        <location line="+402"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="-365"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
+        <translation>PÅÃ­davnÃœ modul &apos;%1&apos; pouÅŸÃ­vÃ¡ nesluÄitelnou Qt knihovnu. PotÅebnÃœ byl zvlÃ¡Å¡tnÃ­ klÃ­Ä pro sestavenÃ­ &quot;%2&quot;, obdrÅŸen &quot;%3&quot;</translation>
+    </message>
+    <message>
+        <location line="-389"/>
+        <source>Could not mmap &apos;%1&apos;: %2</source>
+        <translation>Operace mmap se nezdaÅila u &apos;%1&apos;: %2</translation>
+    </message>
+</context>
+<context>
+    <name>QLineEdit</name>
+    <message>
+        <location filename="../src/gui/widgets/qlineedit.cpp" line="+1991"/>
+        <source>Cu&amp;t</source>
+        <translation>&amp;Vyjmout</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Znovu</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;ZpÄt</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+</context>
+<context>
+    <name>QLocalServer</name>
+    <message>
+        <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/>
+        <source>%1: Name error</source>
+        <translation>%1: ChybnÃœ nÃ¡zev</translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+9"/>
+        <source>%1: Unknown error %2</source>
+        <translation>%1: NeznÃ¡mÃ¡ chyba %2</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <source>%1: Permission denied</source>
+        <translation>%1: PÅÃ­stup odepÅen</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1: Address in use</source>
+        <translation>%1: Adresa se jiÅŸ pouÅŸÃ­vÃ¡</translation>
+    </message>
+</context>
+<context>
+    <name>QLocalSocket</name>
+    <message>
+        <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+153"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+160"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+75"/>
+        <source>%1: Connection error</source>
+        <translation>%1: Chyba spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="-21"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="-21"/>
+        <source>%1: Connection refused</source>
+        <translation>%1: SpojenÃ­ bylo odmÃ­tnuto</translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+28"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+10"/>
+        <source>%1: Unknown error %2</source>
+        <translation>%1: NeznÃ¡mÃ¡ chyba %2</translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+9"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="-19"/>
+        <source>%1: Socket access error</source>
+        <translation>%1: Chyba pÅi pÅÃ­stupu k zÃ¡suvce (socketu)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Socket resource error</source>
+        <translation>%1: Chyba zÃ¡suvky (socketu) - potÃ­ÅŸe se zdrojem</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+12"/>
+        <source>%1: The socket operation is not supported</source>
+        <translation>%1: Tato operace se zÃ¡suvkou (socketem) nenÃ­ podporovÃ¡na</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="-18"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-5"/>
+        <location line="+45"/>
+        <source>%1: Invalid name</source>
+        <translation>%1: NeplatnÃœ nÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>%1: Unknown error</source>
+        <translation>%1: NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+9"/>
+        <source>%1: Socket operation timed out</source>
+        <translation>%1: PÅekroÄenÃ­ Äasu pÅi operaci se zÃ¡suvkou (socketem)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Datagram too large</source>
+        <translation>%1: Datagram je pÅÃ­liÅ¡ velikÃœ</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="-15"/>
+        <source>%1: Remote closed</source>
+        <translation>%1: SpojenÃ­ bylo protÄjÅ¡Ã­ stranou uzavÅeno</translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1440"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-179"/>
+        <source>Unable to open database &apos;</source>
+        <translation>NepodaÅilo se otevÅÃ­t spojenÃ­ s databÃ¡zÃ­ &apos;</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Unable to connect</source>
+        <translation>NepodaÅilo se navÃ¡zat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+185"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-34"/>
+        <source>Unable to begin transaction</source>
+        <translation>Transakci se nepodaÅilo spustit</translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLResult</name>
+    <message>
+        <location line="-413"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Unable to store statement results</source>
+        <translation>VÃœsledky pÅÃ­kazu se nepodaÅilo uloÅŸit</translation>
+    </message>
+    <message>
+        <location line="-253"/>
+        <source>Unable to execute next query</source>
+        <translation>DalÅ¡Ã­ dotaz nelze provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+244"/>
+        <location line="+21"/>
+        <source>Unable to bind outvalues</source>
+        <translation>VÃœstupnÃ­ hodnoty se nepodaÅilo spojit</translation>
+    </message>
+    <message>
+        <location line="-255"/>
+        <source>Unable to store next result</source>
+        <translation>DalÅ¡Ã­ vÃœsledek nelze uloÅŸit</translation>
+    </message>
+    <message>
+        <location line="-302"/>
+        <source>Unable to fetch data</source>
+        <translation>NepodaÅilo se natÃ¡hnout ÅŸÃ¡dnÃ¡ data</translation>
+    </message>
+    <message>
+        <location line="+380"/>
+        <location line="+8"/>
+        <source>Unable to prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo pÅipravit</translation>
+    </message>
+    <message>
+        <location line="-199"/>
+        <source>Unable to store result</source>
+        <translation>VÃœsledek se nepodaÅilo uloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+322"/>
+        <source>Unable to bind value</source>
+        <translation>Hodnotu se nepodaÅilo spojit</translation>
+    </message>
+    <message>
+        <location line="-328"/>
+        <source>Unable to execute query</source>
+        <translation>Dotaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+242"/>
+        <source>Unable to reset statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo znovu nastavit</translation>
+    </message>
+</context>
+<context>
+    <name>QMdiArea</name>
+    <message>
+        <location filename="../src/gui/widgets/qmdiarea.cpp" line="+290"/>
+        <source>(Untitled)</source>
+        <translation>(Bez nÃ¡zvu)</translation>
+    </message>
+</context>
+<context>
+    <name>QMdiSubWindow</name>
+    <message>
+        <location filename="../src/gui/widgets/qmdisubwindow.cpp" line="+355"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Menu</source>
+        <translation>Menu</translation>
+    </message>
+    <message>
+        <location line="+699"/>
+        <source>&amp;Move</source>
+        <translation>Po&amp;sunout</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Size</source>
+        <translation>ZmÄnit &amp;velikost</translation>
+    </message>
+    <message>
+        <location line="-706"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Minimize</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Shade</source>
+        <translation>Navinout</translation>
+    </message>
+    <message>
+        <location line="+720"/>
+        <source>Stay on &amp;Top</source>
+        <translation>ZÅ¯stat v &amp;popÅedÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-787"/>
+        <source>- [%1]</source>
+        <translation>- [%1]</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>%1 - [%2]</source>
+        <translation>%1 - [%2]</translation>
+    </message>
+    <message>
+        <location line="+774"/>
+        <source>&amp;Restore</source>
+        <translation>&amp;Obnovit</translation>
+    </message>
+    <message>
+        <location line="-705"/>
+        <source>Restore</source>
+        <translation>Obnovit</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Maximize</source>
+        <translation>ZvÄtÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unshade</source>
+        <translation>Odvinout</translation>
+    </message>
+    <message>
+        <location line="+719"/>
+        <source>Mi&amp;nimize</source>
+        <translation>Zmen&amp;Å¡it</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ma&amp;ximize</source>
+        <translation>ZvÄ&amp;tÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-714"/>
+        <source>Restore Down</source>
+        <translation>Obnovit</translation>
+    </message>
+</context>
+<context>
+    <name>QMenu</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+158"/>
+        <location line="+225"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-226"/>
+        <location line="+225"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-222"/>
+        <location line="+225"/>
+        <location line="+51"/>
+        <source>Execute</source>
+        <translation>ProvÃ©st</translation>
+    </message>
+</context>
+<context>
+    <name>QMenuBar</name>
+    <message>
+        <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+410"/>
+        <source>Actions</source>
+        <translation>Äinnosti</translation>
+    </message>
+</context>
+<context>
+    <name>QMessageBox</name>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1964"/>
+        <location line="+847"/>
+        <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/>
+        <location line="+8"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation type="obsolete">&lt;h3&gt;O Qt&lt;/h3&gt;&lt;p&gt;Tento program pouÅŸÃ­vÃ¡ Qt ve verzi %1.&lt;/p&gt;&lt;p&gt;Qt je sadou softwarovÃœch nÃ¡strojÅ¯ C++ urÄenÃœch pro vÃœvoj aplikacÃ­ napÅÃ­Ä platformami.&lt;/p&gt;&lt;p&gt;Qt poskytuje jednoduchou pÅenositelnost pÅes MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, a vÅ¡echny hlavnÃ­ obchodnÃ­ varianty systÃ©mu Unix. Qt je rovnÄÅŸ dostupnÃœ pro vloÅŸenÃ¡ zaÅÃ­zenÃ­ jako Qt pro Embedded Linux a Qt pro Windows CE.&lt;/p&gt;&lt;p&gt;Qt je dostupnÃ© pod tÅemi rozdÃ­lnÃœmi licenÄnÃ­mi volbami navrÅŸenÃœmi pro pÅizpÅ¯sobenÃ­ se potÅebÃ¡m naÅ¡ich rÅ¯znÃœch uÅŸivatelÅ¯.&lt;/p&gt;Qt licencovanÃ© pod naÅ¡Ã­ obchodnÃ­ licenÄnÃ­ smlouvou je vhodnÃ© pro vÃœvoj soukromÃ©ho/obchodnÃ­ho software, kde si nepÅejete sdÃ­let jakÃœkoli zdrojovÃœ kÃ³d se tÅetÃ­mi stranami, nebo jinak ÅeÄeno, kdyÅŸ nemÅ¯ÅŸete vyhovÄt podmÃ­nkÃ¡m GNU LGPL ve verzi 2.1 nebo GNU GPL ve verzi 3.0.&lt;/p&gt;&lt;p&gt;Qt licencovanÃ© pod GNU LGPL ve verzi 2.1 je vhodnÃ© pro vÃœvoj Qt aplikacÃ­ (soukromÃœch nebo s otevÅenÃœm zdrojovÃœm kÃ³dem), za pÅedpokladu ÅŸe mÅ¯ÅŸete souhlasit s poÅŸadavky a podmÃ­nkami GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licencovanÃ© pod GNU General Public License ve verzi 3.0 je vhodnÃ© pro vÃœvoj aplikacÃ­ Qt, u nichÅŸ si pÅejete pouÅŸÃ­t takovou aplikaci ve spojenÃ­ se software, kterÃœ podlÃ©hÃ¡ poÅŸadavkÅ¯m GNU GPL ve verzi 3.0, nebo kde jste jinak ochoten souhlasit s podmÃ­nkami GNU GPL ve verzi 3.0.&lt;/p&gt;&lt;p&gt;PodÃ­vejte se, prosÃ­m, na &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; kvÅ¯li pÅehledu licencovÃ¡nÃ­ Qt.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation a/nebo jejÃ­ dceÅinnÃ¡(Ã©) spoleÄnost(i).&lt;/p&gt;&lt;p&gt;Qt je vÃœrobkem spoleÄnosti Nokia. PodÃ­vejte se na &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt;kvÅ¯li vÃ­ce informacÃ­m.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="-1099"/>
+        <source>Show Details...</source>
+        <translation>UkÃ¡zat podrobnosti...</translation>
+    </message>
+    <message>
+        <location line="+1575"/>
+        <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+        <translation>&lt;h3&gt;O Qt&lt;/h3&gt;&lt;p&gt;Tento program pouÅŸÃ­vÃ¡ Qt-verze %1.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Qt je sadou softwarovÃœch nÃ¡strojÅ¯ C++ urÄenÃœch pro vÃœvoj aplikacÃ­ napÅÃ­Ä platformami.&lt;/p&gt;&lt;p&gt;Qt poskytuje jednoduchou pÅenositelnost pÅes MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, a vÅ¡echny hlavnÃ­ obchodnÃ­ varianty systÃ©mu Unix. Qt je rovnÄÅŸ dostupnÃœ pro vloÅŸenÃ¡ zaÅÃ­zenÃ­ jako Qt pro Embedded Linux a Qt pro Windows CE.&lt;/p&gt;&lt;p&gt;Qt je dostupnÃ© pod tÅemi rozdÃ­lnÃœmi licenÄnÃ­mi volbami navrÅŸenÃœmi pro pÅizpÅ¯sobenÃ­ se potÅebÃ¡m naÅ¡ich rÅ¯znÃœch uÅŸivatelÅ¯.&lt;/p&gt;Qt licencovanÃ© pod naÅ¡Ã­ obchodnÃ­ licenÄnÃ­ smlouvou je vhodnÃ© pro vÃœvoj soukromÃ©ho/obchodnÃ­ho software, kde si nepÅejete sdÃ­let jakÃœkoli zdrojovÃœ kÃ³d se tÅetÃ­mi stranami, nebo jinak ÅeÄeno, kdyÅŸ nemÅ¯ÅŸete vyhovÄt podmÃ­nkÃ¡m GNU LGPL ve verzi 2.1 nebo GNU GPL ve verzi 3.0.&lt;/p&gt;&lt;p&gt;Qt licencovanÃ© pod GNU LGPL ve verzi 2.1 je vhodnÃ© pro vÃœvoj Qt aplikacÃ­ (soukromÃœch nebo s otevÅenÃœm zdrojovÃœm kÃ³dem), za pÅedpokladu ÅŸe mÅ¯ÅŸete souhlasit s poÅŸadavky a podmÃ­nkami GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licencovanÃ© pod GNU General Public License ve verzi 3.0 je vhodnÃ© pro vÃœvoj aplikacÃ­ Qt, u nichÅŸ si pÅejete pouÅŸÃ­t takovou aplikaci ve spojenÃ­ se software, kterÃœ podlÃ©hÃ¡ poÅŸadavkÅ¯m GNU GPL ve verzi 3.0, nebo kde jste jinak ochoten souhlasit s podmÃ­nkami GNU GPL ve verzi 3.0.&lt;/p&gt;&lt;p&gt;PodÃ­vejte se, prosÃ­m, na &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; kvÅ¯li pÅehledu licencovÃ¡nÃ­ Qt.&lt;/p&gt;&lt;p&gt;Copyright (C) 2009 Nokia Corporation a/nebo jejÃ­ dceÅinnÃ¡(Ã©) spoleÄnost(i).&lt;/p&gt;&lt;p&gt;Qt je vÃœrobkem spoleÄnosti Nokia. PodÃ­vejte se na &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt;kvÅ¯li vÃ­ce informacÃ­m.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>About Qt</source>
+        <translation>O Qt</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;This program uses Qt Open Source Edition version %1.&lt;/p&gt;&lt;p&gt;Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://www.trolltech.com/company/model/&quot;&gt;www.trolltech.com/company/model/&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;</source>
+        <translation type="obsolete">&lt;p&gt;Tento program pouÅŸÃ­vÃ¡ Qt Open Source Edition verze %1.&lt;/p&gt;&lt;p&gt;Qt Open Source Edition je zamÃœÅ¡lena pro vÃœvoj Open Source aplikacÃ­. Pro vÃœvoj vlastnickÃœch aplikacÃ­ (uzavÅenÃ© zdrojovÃ© kÃ³dy) potÅebujete Qt licenci.&lt;/p&gt;&lt;p&gt;PodÃ­vejte se, prosÃ­m, na &lt;a href=&quot;http://www.trolltech.com/company/model/&quot;&gt;www.trolltech.com/company/model/&lt;/a&gt; kvÅ¯li pÅehledu licencovÃ¡nÃ­ Qt.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location line="-1610"/>
+        <source>Hide Details...</source>
+        <translation>SkrÃœt podrobnosti...</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+        <translation type="obsolete">&lt;p&gt;Tento program pouÅŸÃ­vÃ¡ Qt-verze %1.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>QMultiInputContext</name>
+    <message>
+        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontext.cpp" line="+88"/>
+        <source>Select IM</source>
+        <translation>Zvolit zpÅ¯sob vstupu</translation>
+    </message>
+</context>
+<context>
+    <name>QMultiInputContextPlugin</name>
+    <message>
+        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+102"/>
+        <source>Multiple input method switcher that uses the context menu of the text widgets</source>
+        <translation>PÅepÃ­naÄ pro vÃ­ce zpÅ¯sobÅ¯ vstupu, kterÃœ pouÅŸÃ­vÃ¡ souvisejÃ­cÃ­ nabÃ­dku textovÃ©ho prvku</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>Multiple input method switcher</source>
+        <translation>PÅepÃ­naÄ pro vÃ­ce zpÅ¯sobÅ¯ vstupu</translation>
+    </message>
+</context>
+<context>
+    <name>QNativeSocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qnativesocketengine.cpp" line="+269"/>
+        <source>The proxy type is invalid for this operation</source>
+        <translation>Tuto operaci nelze s tÃ­mto typem proxy provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-60"/>
+        <source>Network operation timed out</source>
+        <translation>ÄasovÃœ limit pro sÃ­Å¥ovou operaci byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>The remote host closed the connection</source>
+        <translation>VzdÃ¡lenÃœ poÄÃ­taÄ uzavÅel spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Invalid socket descriptor</source>
+        <translation>NeplatnÃœ deskriptor zÃ¡suvky (socketu)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Host unreachable</source>
+        <translation>CÃ­lovÃœ poÄÃ­taÄ je nedosaÅŸitelnÃœ</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Protocol type not supported</source>
+        <translation>Protokol tohoto typu nenÃ­ podporovÃ¡n</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Datagram was too large to send</source>
+        <translation>Datagram byl pro odeslÃ¡nÃ­ pÅÃ­liÅ¡ velikÃœ</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+        <translation>VyzkouÅ¡elo se pouÅŸÃ­t IPv6 zÃ¡suvku (socket) na systÃ©mu bez podpory IPv6</translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <source>Unable to receive a message</source>
+        <translation>ZprÃ¡vu se nepodaÅilo pÅijmout</translation>
+    </message>
+    <message>
+        <location line="-24"/>
+        <source>Permission denied</source>
+        <translation>PÅÃ­stup odepÅen</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Connection refused</source>
+        <translation>SpojenÃ­ bylo odmÃ­tnuto</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Unable to write</source>
+        <translation>NepodaÅilo se zapsat</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Another socket is already listening on the same port</source>
+        <translation>Na tomto portu jiÅŸ naslouchÃ¡ jinÃ¡ zÃ¡suvka (socket)</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Unable to send a message</source>
+        <translation>NepodaÅilo se odeslat hlÃ¡Å¡enÃ­</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>The bound address is already in use</source>
+        <translation>UvedenÃ¡ adresa se uÅŸ pouÅŸÃ­vÃ¡</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Connection timed out</source>
+        <translation>ÄasovÃœ limit pro spojenÃ­ byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Network error</source>
+        <translation>SÃ­Å¥ovÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <source>Unsupported socket operation</source>
+        <translation>NepodporovanÃ¡ zÃ¡suvkovÃ¡ operace (povel pro socket)</translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <source>Operation on non-socket</source>
+        <translation>Operaci lze pouÅŸÃ­t pouze na jednÃ© zÃ¡suvce (socketu)</translation>
+    </message>
+    <message>
+        <location line="-66"/>
+        <source>Unable to initialize broadcast socket</source>
+        <translation>ZÃ¡suvku pro vysÃ­lÃ¡nÃ­ (socket) se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="-75"/>
+        <source>Unable to initialize non-blocking socket</source>
+        <translation>NeblokujÃ­cÃ­ zÃ¡suvku (socket) se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>The address is protected</source>
+        <translation>Adresa je chrÃ¡nÄna</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Network unreachable</source>
+        <translation>SÃ­Å¥ je nedosaÅŸitelnÃ¡</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>The address is not available</source>
+        <translation>Adresa nenÃ­ dostupnÃ¡</translation>
+    </message>
+    <message>
+        <location line="-30"/>
+        <source>Out of resources</source>
+        <translation>Nejsou dostupnÃ© ÅŸÃ¡dnÃ© zdroje</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessCacheBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccesscachebackend.cpp" line="+66"/>
+        <source>Error opening %1</source>
+        <translation>%1 se nepodaÅilo otevÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessDebugPipeBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/>
+        <source>Write error writing to %1: %2</source>
+        <translation>PÅi zÃ¡pisu do souboru %1: %2 nastala chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFileBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/>
+        <source>Request for opening non-local file %1</source>
+        <translation>PoÅŸadavek na otevÅenÃ­ souboru pÅes sÃ­Å¥ %1</translation>
+    </message>
+    <message>
+        <location line="+152"/>
+        <source>Read error reading from %1: %2</source>
+        <translation>PÅi ÄtenÃ­ ze souboru %1 nastala chyba: %2</translation>
+    </message>
+    <message>
+        <location line="-21"/>
+        <source>Cannot open %1: Path is a directory</source>
+        <translation>%1 nelze otevÅÃ­t: JednÃ¡ se o adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="-86"/>
+        <source>Error opening %1: %2</source>
+        <translation>%1 se nepodaÅilo otevÅÃ­t: %2</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Write error writing to %1: %2</source>
+        <translation>PÅi zÃ¡pisu do souboru %1: %2 nastala chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFtpBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessftpbackend.cpp" line="+131"/>
+        <source>No suitable proxy found</source>
+        <translation>NepodaÅilo se najÃ­t ÅŸÃ¡dnÃœ vhodnÃœ proxy server</translation>
+    </message>
+    <message>
+        <location line="+165"/>
+        <source>Error while downloading %1: %2</source>
+        <translation>PÅi stahovÃ¡nÃ­ %1 se vyskytla chyba: %2</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Error while uploading %1: %2</source>
+        <translation>PÅi nahrÃ¡vÃ¡nÃ­ %1 se vyskytla chyba: %2</translation>
+    </message>
+    <message>
+        <location line="-153"/>
+        <source>Cannot open %1: is a directory</source>
+        <translation>%1 nelze otevÅÃ­t: JednÃ¡ se o adresÃ¡Å</translation>
+    </message>
+    <message>
+        <location line="+112"/>
+        <source>Logging in to %1 failed: authentication required</source>
+        <translation>PÅihlÃ¡Å¡enÃ­ do %1 se nezdaÅilo: Je poÅŸadovÃ¡na autentizace</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessHttpBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/>
+        <source>No suitable proxy found</source>
+        <translation>NepodaÅilo se najÃ­t ÅŸÃ¡dnÃœ vhodnÃœ proxy server</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReply</name>
+    <message>
+        <location line="+95"/>
+        <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"/>
+        <source>Protocol &quot;%1&quot; is unknown</source>
+        <translation>Protokol &quot;%1&quot; nenÃ­ znÃ¡m</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReplyImpl</name>
+    <message>
+        <location line="+519"/>
+        <location line="+28"/>
+        <source>Operation canceled</source>
+        <translation>Operace byla zruÅ¡ena</translation>
+    </message>
+</context>
+<context>
+    <name>QOCIDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2166"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <source>Unable to initialize</source>
+        <translation type="obsolete">Inicializace se nezdaÅila</translation>
+    </message>
+    <message>
+        <location line="-90"/>
+        <source>Unable to logon</source>
+        <translation>PÅihlÃ¡Å¡enÃ­ se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location line="+109"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-38"/>
+        <source>Unable to begin transaction</source>
+        <translation>Transakci se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="-215"/>
+        <source>Unable to initialize</source>
+        <comment>QOCIDriver</comment>
+        <translation>SpuÅ¡tÄnÃ­ se nezdaÅilo</translation>
+    </message>
+</context>
+<context>
+    <name>QOCIResult</name>
+    <message>
+        <location line="-165"/>
+        <source>Unable to alloc statement</source>
+        <translation>PÅidÄlenÃ­ pÅÃ­kazu se nepodaÅilo</translation>
+    </message>
+    <message>
+        <location line="-59"/>
+        <source>Unable to goto next</source>
+        <translation>Nelze jÃ­t k dalÅ¡Ã­mu prvku</translation>
+    </message>
+    <message>
+        <location line="+100"/>
+        <source>Unable to get statement type</source>
+        <translation>NepodaÅilo se zÃ­skat typ pÅÃ­kazu</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-634"/>
+        <location line="+161"/>
+        <location line="+15"/>
+        <source>Unable to bind column for batch execute</source>
+        <translation>NepodaÅilo se spojit sloupec pro provedenÃ­ pÅÃ­kazu dÃ¡vkovÃ©ho zpracovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <source>Unable to execute select statement</source>
+        <translation type="obsolete">VÃœbÄrovÃ© vyhledÃ¡vÃ¡nÃ­ se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+393"/>
+        <source>Unable to prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo pÅipravit</translation>
+    </message>
+    <message>
+        <location line="-378"/>
+        <source>Unable to execute batch statement</source>
+        <translation>PÅÃ­kaz pro dÃ¡vkovÃ© zpracovÃ¡nÃ­ se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+424"/>
+        <source>Unable to bind value</source>
+        <translation>Hodnotu se nepodaÅilo spojit</translation>
+    </message>
+</context>
+<context>
+    <name>QODBCDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+2045"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Unable to enable autocommit</source>
+        <translation>&apos;autocommit&apos; se nepodaÅilo povolit</translation>
+    </message>
+    <message>
+        <source>Unable to connect - Driver doesn&apos;t support all needed functionality</source>
+        <translation type="obsolete">NepodaÅilo se navÃ¡zat spojenÃ­, protoÅŸe ovladaÄ nutnou funkcionalitu plnÄ nepodporuje</translation>
+    </message>
+    <message>
+        <location line="-49"/>
+        <source>Unable to disable autocommit</source>
+        <translation>&apos;autocommit&apos;, automatickÃ© odeslÃ¡nÃ­, se nepodaÅilo zastavit</translation>
+    </message>
+    <message>
+        <location line="-238"/>
+        <source>Unable to connect</source>
+        <translation>NepodaÅilo se navÃ¡zat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
+        <translation>NepodaÅilo se navÃ¡zat spojenÃ­, protoÅŸe ovladaÄ nutnou funkcionalitu plnÄ nepodporuje</translation>
+    </message>
+    <message>
+        <location line="+266"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+</context>
+<context>
+    <name>QODBCResult</name>
+    <message>
+        <location line="-566"/>
+        <source>Unable to bind variable</source>
+        <translation>PromÄnnou se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-615"/>
+        <location line="+623"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-547"/>
+        <source>Unable to fetch next</source>
+        <translation>DalÅ¡Ã­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+190"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+72"/>
+        <location line="+576"/>
+        <source>Unable to fetch last</source>
+        <translation>PoslednÃ­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-377"/>
+        <source>Unable to prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="-230"/>
+        <source>Unable to fetch previous</source>
+        <translation>PÅedchozÃ­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location line="-63"/>
+        <source>Unable to fetch</source>
+        <translation>NepodaÅilo se natÃ¡hnout ÅŸÃ¡dnÃ¡ data</translation>
+    </message>
+    <message>
+        <location line="-71"/>
+        <location line="+346"/>
+        <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; se nepodaÅilo nastavit jako pÅÃ­kaz vlastnosti . OvÄÅte, prosÃ­m, nastavenÃ­ svÃ©ho ODBC ovladaÄe</translation>
+    </message>
+    <message>
+        <location line="-231"/>
+        <source>Unable to fetch first</source>
+        <translation>PrvnÃ­ datovÃœ zÃ¡znam se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="-97"/>
+        <source>Invalid hostname</source>
+        <translation>NeplatnÃœ nÃ¡zev pro hostitelskÃœ poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <source>Home</source>
+        <translation type="obsolete">Home</translation>
+    </message>
+    <message>
+        <source>Protocol error: packet of size 0 received</source>
+        <translation type="obsolete">Chyba v zÃ¡pisu: Byl pÅijat paket o nulovÃ© velikosti</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+131"/>
+        <source>Invalid URI: %1</source>
+        <translation>NeplÃ¡tnÃ¡ URI: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+60"/>
+        <source>Socket error on %1: %2</source>
+        <translation>Chyba zÃ¡suvky (socketu) u %1: %2</translation>
+    </message>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/>
+        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/>
+        <source>No host name given</source>
+        <translation>Nebyl zadÃ¡n nÃ¡zev pro hostitelskÃœ poÄÃ­taÄ</translation>
+    </message>
+    <message>
+        <source>Read error reading from %1: %2</source>
+        <translation type="obsolete">PÅi ÄtenÃ­ ze souboru %1 nastala chyba: %2</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+15"/>
+        <source>Remote host closed the connection prematurely on %1</source>
+        <translation>VzdÃ¡lenÃœ poÄÃ­taÄ pÅedÄasnÄ ukonÄil spojenÃ­ s %1</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="-57"/>
+        <source>Operation not supported on %1</source>
+        <translation>Tato operace nenÃ­ %1 podporovÃ¡na</translation>
+    </message>
+    <message>
+        <source>Write error writing to %1: %2</source>
+        <translation type="obsolete">PÅi zÃ¡pisu do souboru %1: %2 nastala chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QPPDOptionsModel</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Value</source>
+        <translation>Hodnota</translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/psql/qsql_psql.cpp" line="+1251"/>
+        <source>Unable to subscribe</source>
+        <translation>Registrace se nezdaÅila</translation>
+    </message>
+    <message>
+        <location line="-420"/>
+        <source>Could not begin transaction</source>
+        <translation>Transakci se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="+46"/>
+        <source>Could not rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-16"/>
+        <source>Could not commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-79"/>
+        <source>Unable to connect</source>
+        <translation>NepodaÅilo se navÃ¡zat spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+501"/>
+        <source>Unable to unsubscribe</source>
+        <translation>Registraci se nepodaÅilo zruÅ¡it</translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLResult</name>
+    <message>
+        <location line="-713"/>
+        <source>Unable to prepare statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo pÅipravit</translation>
+    </message>
+    <message>
+        <location line="-372"/>
+        <source>Unable to create query</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ dotaz</translation>
+    </message>
+</context>
+<context>
+    <name>QPageSetupWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>bottom margin</source>
+        <translation>DolnÃ­ okraj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Paper</source>
+        <translation>PapÃ­r</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Paper source:</source>
+        <translation>Zdroj papÃ­ru:</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+304"/>
+        <source>Centimeters (cm)</source>
+        <translation>Centimetry (cm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/>
+        <source>right margin</source>
+        <translation>PravÃœ okraj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Margins</source>
+        <translation>Okraje</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Landscape</source>
+        <translation>FormÃ¡t na Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Width:</source>
+        <translation>Å Ã­Åka:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Orientation</source>
+        <translation>ZamÄÅenÃ­</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Portrait</source>
+        <translation>FormÃ¡t na vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>top margin</source>
+        <translation>HornÃ­ okraj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>left margin</source>
+        <translation>LevÃœ okraj</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Page size:</source>
+        <translation>Velikost stran:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reverse portrait</source>
+        <translation>ObrÃ¡cenÃœ formÃ¡t na vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+0"/>
+        <source>Millimeters (mm)</source>
+        <translation>Milimetry (mm)</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Points (pt)</source>
+        <translation>Body (pt)</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Inches (in)</source>
+        <translation>Palce (in)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/>
+        <source>Reverse landscape</source>
+        <translation>ObrÃ¡cenÃœ formÃ¡t na Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Height:</source>
+        <translation>VÃœÅ¡ka:</translation>
+    </message>
+</context>
+<context>
+    <name>QPluginLoader</name>
+    <message>
+        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="-89"/>
+        <source>The plugin was not loaded.</source>
+        <translation>PÅÃ­davnÃœ modul nebyl nahrÃ¡n.</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/>
+        <source>A0</source>
+        <translation>A0</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A1</source>
+        <translation>A1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A2</source>
+        <translation>A2</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A3</source>
+        <translation>A3</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A4</source>
+        <translation>A4</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A5</source>
+        <translation>A5</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A6</source>
+        <translation>A6</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A7</source>
+        <translation>A7</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A8</source>
+        <translation>A8</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A9</source>
+        <translation>A9</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B0</source>
+        <translation>B0</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B1</source>
+        <translation>B1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B2</source>
+        <translation>B2</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B3</source>
+        <translation>B3</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B4</source>
+        <translation>B4</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B5</source>
+        <translation>B5</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B6</source>
+        <translation>B6</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B7</source>
+        <translation>B7</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B8</source>
+        <translation>B8</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B9</source>
+        <translation>B9</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+266"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+1"/>
+        <source>B10</source>
+        <translation>B10</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>C5E</source>
+        <translation>C5E</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>DLE</source>
+        <translation>DLE</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+335"/>
+        <source>A6 (105 x 148 mm)</source>
+        <translation>A6 (105 x 148 mm)</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
+        <translation>PrÃ¡vnÃ­ (8,5 x 14 palcÅ¯, 216 x 356 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+2"/>
+        <source>Folio</source>
+        <translation>Folio</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Legal</source>
+        <translation>PrÃ¡vnÃ­</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+20"/>
+        <source>Print all</source>
+        <translation>Tisknout vÅ¡e</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+112"/>
+        <location line="+13"/>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/>
+        <source>Print</source>
+        <translation>Tisk</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-733"/>
+        <source>&amp;Options &lt;&lt;</source>
+        <translation>&amp;NastavenÃ­ &lt;&lt; </translation>
+    </message>
+    <message>
+        <location line="-72"/>
+        <location line="+68"/>
+        <source>&amp;Options &gt;&gt;</source>
+        <translation>&amp;NastavenÃ­ &gt;&gt;</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-30"/>
+        <source>B6 (125 x 176 mm)</source>
+        <translation>B6 (125 x 176 mm)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>B8 (62 x 88 mm)</source>
+        <translation>B8 (62 x 88 mm)</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>A8 (52 x 74 mm)</source>
+        <translation>A8 (52 x 74 mm)</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>B9 (44 x 62 mm)</source>
+        <translation>B9 (44 x 62 mm)</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>A9 (37 x 52 mm)</source>
+        <translation>A9 (37 x 52 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B0 (1000 x 1414 mm)</source>
+        <translation>B0 (1000 x 1414 mm)</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>A5 (148 x 210 mm)</source>
+        <translation>A5 (148 x 210 mm)</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Tabloid (279 x 432 mm)</source>
+        <translation>BulvÃ¡rnÃ­ noviny/tisk (279 x 432 mm)</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>B10 (31 x 44 mm)</source>
+        <translation>B10 (31 x 44 mm)</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>B2 (500 x 707 mm)</source>
+        <translation>B2 (500 x 707 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-63"/>
+        <source>&amp;Print</source>
+        <translation>&amp;Tisk</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-9"/>
+        <source>A3 (297 x 420 mm)</source>
+        <translation>A3 (297 x 420 mm)</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Print selection</source>
+        <translation>Tisk vÃœbÄru</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+321"/>
+        <source>Print to File (Postscript)</source>
+        <translation>Tisk do souboru (Postscript)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-33"/>
+        <source>B4 (250 x 353 mm)</source>
+        <translation>B4 (250 x 353 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+206"/>
+        <source>%1 already exists.
+Do you want to overwrite it?</source>
+        <translation>Soubor %1 jiÅŸ existuje.
+MÃ¡ se pÅepsat?</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-13"/>
+        <source>A1 (594 x 841 mm)</source>
+        <translation>A1 (594 x 841 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+4"/>
+        <source>Custom</source>
+        <translation>StanovenÃœ uÅŸivatelem</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+10"/>
+        <source>B1 (707 x 1000 mm)</source>
+        <translation>B1 (707 x 1000 mm)</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Folio (210 x 330 mm)</source>
+        <translation>Folio (210 x 330 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-5"/>
+        <source>Ledger</source>
+        <translation>HlavnÃ­ (ÃºÄetnÃ­) kniha</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Letter</source>
+        <translation>Dopis</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-2"/>
+        <source>DLE (110 x 220 mm)</source>
+        <translation>DLE (110 x 220 mm)</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>C5E (163 x 229 mm)</source>
+        <translation>C5E (163 x 229 mm)</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
+        <translation>B5 (176 x 250 mm, 6.93 x 9.84 palcÅ¯</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Print range</source>
+        <translation>TiskovÃ¡ oblast</translation>
+    </message>
+    <message>
+        <location line="-229"/>
+        <source>File exists</source>
+        <translation>Soubor jiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-158"/>
+        <source>Write %1 file</source>
+        <translation>Zapsat %1 soubor</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+181"/>
+        <source>A0 (841 x 1189 mm)</source>
+        <translation>A0 (841 x 1189 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-1"/>
+        <source>Local file</source>
+        <translation>MÃ­stnÃ­ soubor</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+108"/>
+        <source>locally connected</source>
+        <translation>pÅÃ­mo spojeno</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+25"/>
+        <source>Ledger (432 x 279 mm)</source>
+        <translation>HlavnÃ­ (ÃºÄetnÃ­) kniha (432 x 279 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+23"/>
+        <location line="+225"/>
+        <source>Aliases: %1</source>
+        <translation>PÅezdÃ­vka: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-48"/>
+        <source>Print to File (PDF)</source>
+        <translation>Tisk do souboru (PDF)</translation>
+    </message>
+    <message>
+        <location line="+123"/>
+        <source>Print To File ...</source>
+        <translation>Tisk do souboru...</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+4"/>
+        <source>US Common #10 Envelope (105 x 241 mm)</source>
+        <translation>US bÄÅŸnÃ¡ #10 obÃ¡lka (105 x 241 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+1"/>
+        <source>Tabloid</source>
+        <translation>BulvÃ¡rnÃ­ noviny</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-25"/>
+        <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
+        <translation>A4 (210 x 297 mm, 8.26 x 11.7 palcÅ¯)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-5"/>
+        <source>Executive</source>
+        <translation>ProvÃ¡dÄcÃ­</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+223"/>
+        <location line="+199"/>
+        <source>unknown</source>
+        <translation>NeznÃ¡mÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-184"/>
+        <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
+        <translation>&lt;qt&gt;Chcete jej pÅepsat?&lt;/qt&gt;</translation>
+    </message>
+    <message>
+        <location line="+203"/>
+        <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
+        <translation>ProvÃ¡dÄcÃ­ (7,5 x 10 palcÅ¯, 191 x 254 mm)</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
+        <translation>Dopis (8,5 x 11 palcÅ¯, 216 x 279 mm)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/>
+        <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+        <translation>Ãdaj pro prvnÃ­ stranu nesmÃ­ bÃœt vÄtÅ¡Ã­ neÅŸ Ãºdaj pro poslednÃ­ stranu.</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+6"/>
+        <source>US Common #10 Envelope</source>
+        <translation>US bÄÅŸnÃ¡ #10 obÃ¡lka</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+76"/>
+        <source>%1 is a directory.
+Please choose a different file name.</source>
+        <translation>%1 je adresÃ¡Å.
+Zvolte, prosÃ­m, pro soubor jinÃœ nÃ¡zev.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>File %1 is not writable.
+Please choose a different file name.</source>
+        <translation>Soubor %1 je chrÃ¡nÄn proti zÃ¡pisu.
+Zvolte, prosÃ­m, pro soubor jinÃœ nÃ¡zev.</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-14"/>
+        <source>B3 (353 x 500 mm)</source>
+        <translation>B3 (353 x 500 mm)</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>A7 (74 x 105 mm)</source>
+        <translation>A7 (74 x 105 mm)</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>A2 (420 x 594 mm)</source>
+        <translation>A2 (420 x 594 mm)</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>B7 (88 x 125 mm)</source>
+        <translation>B7 (88 x 125 mm)</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPreviewDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+246"/>
+        <source>%1%</source>
+        <translation>%1%</translation>
+    </message>
+    <message>
+        <location line="+68"/>
+        <source>Print Preview</source>
+        <translation>NÃ¡hled tisku</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation type="obsolete">ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <source>Print</source>
+        <translation>Tisk</translation>
+    </message>
+    <message>
+        <location line="-46"/>
+        <source>Fit page</source>
+        <translation>PÅizpÅ¯sobit stranu</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Zoom in</source>
+        <translation>ZvÄtÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Landscape</source>
+        <translation>FormÃ¡t na Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>Zoom out</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <source>Fit width</source>
+        <translation>PÅizpÅ¯sobit Å¡Ã­Åku</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Portrait</source>
+        <translation>FormÃ¡t na vÃœÅ¡ku</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/>
+        <location line="+12"/>
+        <source>Page Setup</source>
+        <translation>NastavenÃ­ strany</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+29"/>
+        <source>Page setup</source>
+        <translation>NastavenÃ­ strany</translation>
+    </message>
+    <message>
+        <location line="-16"/>
+        <source>Show overview of all pages</source>
+        <translation>UkÃ¡zat pÅehled vÅ¡ech stran</translation>
+    </message>
+    <message>
+        <location line="-42"/>
+        <source>First page</source>
+        <translation>PrvnÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Last page</source>
+        <translation>PoslednÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Show single page</source>
+        <translation>UkÃ¡zat jednotlivÃ© strany</translation>
+    </message>
+    <message>
+        <location line="+168"/>
+        <source>Export to PDF</source>
+        <translation>VyvÃ©st do PDF</translation>
+    </message>
+    <message>
+        <location line="-209"/>
+        <source>Previous page</source>
+        <translation>PÅedchozÃ­ strana</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>Next page</source>
+        <translation>DalÅ¡Ã­ strana</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Show facing pages</source>
+        <translation>UkÃ¡zat strany leÅŸÃ­cÃ­ naproti</translation>
+    </message>
+    <message>
+        <location line="+170"/>
+        <source>Export to PostScript</source>
+        <translation>VyvÃ©st do PostScriptu</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPropertiesWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintpropertieswidget.ui"/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Page</source>
+        <translation>Strana</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Advanced</source>
+        <translation>RozÅ¡Ã­ÅenÃ©</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintSettingsOutput</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintsettingsoutput.ui"/>
+        <source>to</source>
+        <translation>do</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>None</source>
+        <translation>ÅœÃ¡dnÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Color</source>
+        <translation>Barva</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print all</source>
+        <translation>Tisknout vÅ¡e</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Selection</source>
+        <translation>VÃœbÄr</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Long side</source>
+        <translation>DlouhÃ¡ strana</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies</source>
+        <translation>PoÄet exemplÃ¡ÅÅ¯</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print range</source>
+        <translation>Tisk oblasti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Color Mode</source>
+        <translation>BarevnÃœ reÅŸim</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Options</source>
+        <translation>Volby</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Output Settings</source>
+        <translation>NastavenÃ­ vÃœstupu</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reverse</source>
+        <translation>ObrÃ¡cenÃœ</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grayscale</source>
+        <translation>OdstÃ­ny Å¡edi</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Short side</source>
+        <translation>KrÃ¡tkÃ¡ strana</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Collate</source>
+        <translation>Srovnat</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies:</source>
+        <translation>PoÄet exemplÃ¡ÅÅ¯:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Pages from</source>
+        <translation>Strany od</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Duplex Printing</source>
+        <translation>ZdvojenÃœ tisk</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintwidget.ui"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Form</source>
+        <translation>FormulÃ¡Å</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Type:</source>
+        <translation>Typ:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Name:</source>
+        <translation>&amp;NÃ¡zev:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Output &amp;file:</source>
+        <translation>VÃœstupnÃ­ &amp;soubor:</translation>
+    </message>
+    <message>
+        <location/>
+        <source>P&amp;roperties</source>
+        <translation>&amp;Vlastnosti</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Preview</source>
+        <translation>NÃ¡hled</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Printer</source>
+        <translation>TiskÃ¡rna</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Location:</source>
+        <translation>UmÃ­stÄnÃ­:</translation>
+    </message>
+</context>
+<context>
+    <name>QProcess</name>
+    <message>
+        <location filename="../src/corelib/io/qprocess.cpp" line="+954"/>
+        <location line="+826"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+763"/>
+        <source>Error writing to process</source>
+        <translation>ZÃ¡pis do procesu se nezdaÅil</translation>
+    </message>
+    <message>
+        <location line="+203"/>
+        <source>No program defined</source>
+        <translation>Nestanoven ÅŸÃ¡dnÃœ program</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess_unix.cpp" line="+653"/>
+        <source>Resource error (fork failure): %1</source>
+        <translation>PotÃ­ÅŸe se zdroji (selhÃ¡nÃ­ rozcestÃ­ - &quot;fork failure&quot;): %1</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess.cpp" line="-1128"/>
+        <location line="+52"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="-190"/>
+        <location line="+50"/>
+        <source>Error reading from process</source>
+        <translation>ÄtenÃ­ z procesu se nezdaÅilo</translation>
+    </message>
+    <message>
+        <source>Process failed to start</source>
+        <translation type="obsolete">SpuÅ¡tÄnÃ­ procesu se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess_unix.cpp" line="-251"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="-486"/>
+        <source>Could not open input redirection for reading</source>
+        <translation>VstupnÃ­ pÅesmÄrovÃ¡nÃ­ se nepodaÅilo otevÅÃ­t pro ÄtenÃ­</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+20"/>
+        <source>Could not open output redirection for writing</source>
+        <translation>VÃœstupnÃ­ pÅesmÄrovÃ¡nÃ­ se nepodaÅilo otevÅÃ­t pro zÃ¡pis</translation>
+    </message>
+    <message>
+        <location line="+491"/>
+        <location line="+52"/>
+        <location line="+74"/>
+        <location line="+66"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+406"/>
+        <location line="+50"/>
+        <location line="+75"/>
+        <location line="+42"/>
+        <location line="+54"/>
+        <source>Process operation timed out</source>
+        <translation>PÅekroÄenÃ­ Äasu u procesu</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess.cpp" line="+117"/>
+        <source>Process crashed</source>
+        <translation>Proces spadl</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="-381"/>
+        <source>Process failed to start: %1</source>
+        <translation>Proces se nepodaÅilo spustit: %1</translation>
+    </message>
+</context>
+<context>
+    <name>QProgressDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprogressdialog.cpp" line="+196"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+</context>
+<context>
+    <name>QPushButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-4"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>QRadioButton</name>
+    <message>
+        <location line="+12"/>
+        <source>Check</source>
+        <translation>OznaÄit kÅÃ­ÅŸkem</translation>
+    </message>
+</context>
+<context>
+    <name>QRegExp</name>
+    <message>
+        <location filename="../src/corelib/tools/qregexp.cpp" line="+68"/>
+        <source>bad lookahead syntax</source>
+        <translation>nesprÃ¡vnÃ¡ syntax pro plÃ¡novÃ¡nÃ­ dopÅedu</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>no error occurred</source>
+        <translation>ÅŸÃ¡dnÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>missing left delim</source>
+        <translation>chybÄjÃ­cÃ­ levÃ© vymezenÃ­</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>bad char class syntax</source>
+        <translation>nesprÃ¡vnÃ¡ syntax pro tÅÃ­du znaku</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>disabled feature used</source>
+        <translation>byla pouÅŸita zakÃ¡zanÃ¡ vlastnost</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>invalid octal value</source>
+        <translation>neplatnÃ¡ osmiÄkovÃ¡ hodnota</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>invalid interval</source>
+        <translation>neplatnÃœ interval</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>invalid category</source>
+        <translation>neplatnÃ¡ skupina</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>bad repetition syntax</source>
+        <translation>nesprÃ¡vnÃ¡ syntax pro opakovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>met internal limit</source>
+        <translation>dosaÅŸena vnitÅnÃ­ mez</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>unexpected end</source>
+        <translation>neoÄekÃ¡vanÃœ konec</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Driver</name>
+    <message>
+        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+449"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <source>Error to open database</source>
+        <translation type="obsolete">NepodaÅilo se otevÅÃ­t spojenÃ­ s datatabÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <source>Unable to rollback Transaction</source>
+        <translation type="obsolete">Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <source>Unable to begin transaction</source>
+        <translation>Transakci se nepodaÅilo spustit</translation>
+    </message>
+    <message>
+        <location line="-41"/>
+        <source>Error opening database</source>
+        <translation>NepodaÅilo se otevÅÃ­t spojenÃ­ s databÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Result</name>
+    <message>
+        <location line="-176"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="-143"/>
+        <source>Unable to fetch results</source>
+        <translation>VÃœsledek se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+590"/>
+        <source>Unable to commit transaction</source>
+        <translation>Transakci se nepodaÅilo provÃ©st (operace &apos;commit&apos;, odeslÃ¡nÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-35"/>
+        <source>Error closing database</source>
+        <translation>NepodaÅilo se uzavÅÃ­t spojenÃ­ s datatabÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>Error opening database</source>
+        <translation>NepodaÅilo se otevÅÃ­t spojenÃ­ s databÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <location line="+61"/>
+        <source>Unable to rollback transaction</source>
+        <translation>Transakci se nepodaÅilo zvrÃ¡tit (operace &apos;rollback&apos;, zvrÃ¡cenÃ­, se nezdaÅila)</translation>
+    </message>
+    <message>
+        <location line="-30"/>
+        <source>Unable to begin transaction</source>
+        <translation>Transakci se nepodaÅilo spustit</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteResult</name>
+    <message>
+        <location line="-378"/>
+        <location line="+66"/>
+        <location line="+8"/>
+        <source>Unable to fetch row</source>
+        <translation>ÅÃ¡dek se nepodaÅilo natÃ¡hnout</translation>
+    </message>
+    <message>
+        <location line="-73"/>
+        <source>No query</source>
+        <translation>ÅœÃ¡dnÃœ poÅŸadavek</translation>
+    </message>
+    <message>
+        <location line="+132"/>
+        <source>Unable to execute statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo provÃ©st</translation>
+    </message>
+    <message>
+        <location line="+65"/>
+        <source>Unable to bind parameters</source>
+        <translation>Parametry se nepodaÅilo spojit</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <source>Unable to reset statement</source>
+        <translation>PÅÃ­kaz se nepodaÅilo znovu nastavit</translation>
+    </message>
+    <message>
+        <location line="+52"/>
+        <source>Parameter count mismatch</source>
+        <translation>PoÄet parametrÅ¯ nenÃ­ sprÃ¡vnÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptBreakpointsModel</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptbreakpointsmodel.cpp" line="+455"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Location</source>
+        <translation>UmÃ­stÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Condition</source>
+        <translation>PodmÃ­nka</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ignore-count</source>
+        <translation>Spustit po</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Single-shot</source>
+        <translation>Spustit jednou</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Hit-count</source>
+        <translation>SpuÅ¡tÄnÃœ</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptBreakpointsWidget</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="+298"/>
+        <source>New</source>
+        <translation>NovÃœ</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptDebugger</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptdebugger.cpp" line="+885"/>
+        <location line="+1013"/>
+        <source>Go to Line</source>
+        <translation>JÃ­t na ÅÃ¡dek</translation>
+    </message>
+    <message>
+        <location line="-1012"/>
+        <source>Line:</source>
+        <translation>ÅÃ¡dek:</translation>
+    </message>
+    <message>
+        <location line="+791"/>
+        <source>Interrupt</source>
+        <translation>PÅeruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Shift+F5</source>
+        <translation>Shift+F5</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Continue</source>
+        <translation>PokraÄovat</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>F5</source>
+        <translation>F5</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Step Into</source>
+        <translation>Krok do</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>F11</source>
+        <translation>F11</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Step Over</source>
+        <translation>Krok pÅes</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>F10</source>
+        <translation>F10</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Step Out</source>
+        <translation>Krok ven</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Shift+F11</source>
+        <translation>Shift+F11</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Run to Cursor</source>
+        <translation>ProvÃ©st po kurzor</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ctrl+F10</source>
+        <translation>Ctrl+F10</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Run to New Script</source>
+        <translation>ProvÃ©st po novÃœ skript</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Toggle Breakpoint</source>
+        <translation>PÅepnout bod pÅeruÅ¡enÃ­ (zastavenÃ­)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>F9</source>
+        <translation>F9</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Clear Debug Output</source>
+        <translation>Smazat vÃœstup ladÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Clear Error Log</source>
+        <translation>Smazat vÃœstupnÃ­ zÃ¡pis s chybami</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Clear Console</source>
+        <translation>Smazat konzoli</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>&amp;Find in Script...</source>
+        <translation>&amp;Hledat ve skriptu...</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ctrl+F</source>
+        <translation>Ctrl+F</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Find &amp;Next</source>
+        <translation>NajÃ­t &amp;dalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>F3</source>
+        <translation>F3</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Find &amp;Previous</source>
+        <translation>NajÃ­t &amp;pÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Shift+F3</source>
+        <translation>Shift+F3</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Ctrl+G</source>
+        <translation>Ctrl+G</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Debug</source>
+        <translation>Ladit</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptDebuggerCodeFinderWidget</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp" line="+141"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Previous</source>
+        <translation>PÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Next</source>
+        <translation>DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Case Sensitive</source>
+        <translation>RozliÅ¡ujÃ­cÃ­ velkÃ¡ a malÃ¡ pÃ­smena</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Whole words</source>
+        <translation>CelÃ¡ slova</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+        <translation>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;HledÃ¡nÃ­ dosÃ¡hlo konce</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptDebuggerLocalsModel</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+872"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Value</source>
+        <translation>Hodnota</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptDebuggerStackModel</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptdebuggerstackmodel.cpp" line="+161"/>
+        <source>Level</source>
+        <translation>ÃroveÅ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Name</source>
+        <translation>NÃ¡zev</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Location</source>
+        <translation>UmÃ­stÄnÃ­</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptEdit</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptedit.cpp" line="+411"/>
+        <source>Toggle Breakpoint</source>
+        <translation>PÅepnout bod zastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disable Breakpoint</source>
+        <translation>Vypnout bod zastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Enable Breakpoint</source>
+        <translation>Zapnout bod zastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Breakpoint Condition:</source>
+        <translation>PodmÃ­nka zastavenÃ­:</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptEngineDebugger</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptenginedebugger.cpp" line="+523"/>
+        <source>Loaded Scripts</source>
+        <translation>NahranÃ© skripty</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Breakpoints</source>
+        <translation>Body zastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Stack</source>
+        <translation>ZÃ¡sobnÃ­k</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Locals</source>
+        <translation>MÃ­stnÃ­ promÄnnÃ©</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Console</source>
+        <translation>Konzole</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Debug Output</source>
+        <translation>VÃœstup ladÄnÃ­</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Error Log</source>
+        <translation>VÃœstupnÃ­ zÃ¡pis s chybami</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Search</source>
+        <translation>Hledat</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>View</source>
+        <translation>Pohled</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Qt Script Debugger</source>
+        <translation>Qt ladÄnÃ­ skriptÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>QScriptNewBreakpointWidget</name>
+    <message>
+        <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="-223"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>QScrollBar</name>
+    <message>
+        <location filename="../src/gui/widgets/qscrollbar.cpp" line="+456"/>
+        <source>Top</source>
+        <translation>ZaÄÃ¡tek</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Scroll down</source>
+        <translation>ProjÃ­ÅŸdÄt dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Scroll here</source>
+        <translation>ProjÃ­ÅŸdÄt aÅŸ sem</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Scroll left</source>
+        <translation>ProjÃ­ÅŸdÄt doleva</translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+143"/>
+        <source>Line up</source>
+        <translation>O jeden ÅÃ¡dek nahoru</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Line down</source>
+        <translation>O jeden ÅÃ¡dek dolÅ¯</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/qscrollbar.cpp" line="-5"/>
+        <source>Bottom</source>
+        <translation>Konec</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-6"/>
+        <source>Page up</source>
+        <translation>O stranu nahoru</translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+2"/>
+        <source>Position</source>
+        <translation>Poloha</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/qscrollbar.cpp" line="+1"/>
+        <source>Page right</source>
+        <translation>O stranu doprava</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Scroll up</source>
+        <translation>ProjÃ­ÅŸdÄt nahoru</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Scroll right</source>
+        <translation>ProjÃ­ÅŸdÄt doprava</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>Left edge</source>
+        <translation>LevÃœ okraj</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+2"/>
+        <source>Page down</source>
+        <translation>O stranu dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>Page left</source>
+        <translation>O stranu doleva</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Right edge</source>
+        <translation>PravÃœ okraj</translation>
+    </message>
+</context>
+<context>
+    <name>QSharedMemory</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+88"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+74"/>
+        <source>%1: doesn&apos;t exist</source>
+        <translation>%1: Neexistuje</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>%1: UNIX key file doesn&apos;t exist</source>
+        <translation>%1: Soubor s unixovÃœm klÃ­Äem neexistuje</translation>
+    </message>
+    <message>
+        <location line="+78"/>
+        <source>%1: system-imposed size restrictions</source>
+        <translation>%1: Bylo dosaÅŸeno systÃ©mem podmÃ­nÄnÃ© meze velikosti</translation>
+    </message>
+    <message>
+        <source>%1: unix key file doesn&apos;t exists</source>
+        <translation type="obsolete">%1: Soubor s unixovÃœm klÃ­Äem neexistuje</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+71"/>
+        <source>%1: doesn&apos;t exists</source>
+        <translation>%1: Neexistuje</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-86"/>
+        <source>%1: key is empty</source>
+        <translation>%1: NeplatnÃœ Ãºdaj u klÃ­Äe (prÃ¡zdnÃœ)</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+44"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+67"/>
+        <source>%1: key error</source>
+        <translation>%1: ChybnÃœ klÃ­Ä</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+304"/>
+        <source>%1: create size is less then 0</source>
+        <translation>%1: Ãdaj o velikosti vytvoÅenÃ­ je menÅ¡Ã­ neÅŸ nula</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-48"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-35"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-76"/>
+        <source>%1: already exists</source>
+        <translation>%1: JiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+14"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+25"/>
+        <source>%1: unknown error %2</source>
+        <translation>%1: NeznÃ¡mÃ¡ chyba %2</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-12"/>
+        <source>%1: invalid size</source>
+        <translation>%1: NeplatnÃ¡ velikost</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+87"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+27"/>
+        <source>%1: unable to make key</source>
+        <translation>%1: NepodaÅilo se vytvoÅit klÃ­Ä</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="-81"/>
+        <source>%1: unable to set key on lock</source>
+        <translation>%1: NepodaÅilo se nastavit klÃ­Ä pro uzavÅenÃ­</translation>
+    </message>
+    <message>
+        <location line="+271"/>
+        <source>%1: unable to unlock</source>
+        <translation>%1: UzavÅenÃ­ se nepodaÅilo zruÅ¡it</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-59"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-105"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-18"/>
+        <source>%1: permission denied</source>
+        <translation>%1: PÅÃ­stup odepÅen</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+54"/>
+        <source>%1: ftok failed</source>
+        <translation>%1: VyvolÃ¡nÃ­ ftok se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-4"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-40"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-4"/>
+        <source>%1: out of resources</source>
+        <translation>%1: Nejsou jiÅŸ pouÅŸitelnÃ© zdroje</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+164"/>
+        <source>%1: not attached</source>
+        <translation>%1: NepÅipojen</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+90"/>
+        <source>%1: size query failed</source>
+        <translation>%1: VyhledÃ¡nÃ­ velikosti se nezdaÅilo</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="-22"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+155"/>
+        <source>%1: unable to lock</source>
+        <translation>%1: UzavÅenÃ­ se nezdaÅilo</translation>
+    </message>
+</context>
+<context>
+    <name>QShortcut</name>
+    <message>
+        <location filename="../src/gui/kernel/qkeysequence.cpp" line="+1143"/>
+        <source>+</source>
+        <translation>+</translation>
+    </message>
+    <message>
+        <location line="-664"/>
+        <source>No</source>
+        <translation>Ne</translation>
+    </message>
+    <message>
+        <location line="-71"/>
+        <source>Up</source>
+        <translation>Nahoru</translation>
+    </message>
+    <message>
+        <location line="+644"/>
+        <location line="+135"/>
+        <source>Alt</source>
+        <translation>Alt</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>F%1</source>
+        <translation>F%1</translation>
+    </message>
+    <message>
+        <location line="-803"/>
+        <source>Del</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>End</source>
+        <translation>End</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Esc</source>
+        <translation>Esc</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Ins</source>
+        <translation>Insert</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Tab</source>
+        <translation>Tab</translation>
+    </message>
+    <message>
+        <location line="+83"/>
+        <source>Yes</source>
+        <translation>Ano</translation>
+    </message>
+    <message>
+        <location line="-58"/>
+        <source>Back</source>
+        <translation>ZpÄt</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>Call</source>
+        <translation>VolÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+563"/>
+        <location line="+135"/>
+        <source>Ctrl</source>
+        <translation>Ctrl</translation>
+    </message>
+    <message>
+        <location line="-775"/>
+        <source>Down</source>
+        <translation>DolÅ¯</translation>
+    </message>
+    <message>
+        <location line="+79"/>
+        <source>Flip</source>
+        <translation>ObrÃ¡tit</translation>
+    </message>
+    <message>
+        <location line="-72"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Home</source>
+        <translation>Home</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Left</source>
+        <translation>Vlevo</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Menu</source>
+        <translation>Menu</translation>
+    </message>
+    <message>
+        <location line="+637"/>
+        <location line="+130"/>
+        <source>Meta</source>
+        <translation>Meta</translation>
+    </message>
+    <message>
+        <location line="-772"/>
+        <source>PgUp</source>
+        <translation>PgUp</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Stop</source>
+        <translation>Stop</translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <source>Enter</source>
+        <translation>Enter</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Pause</source>
+        <translation>Pause</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Print</source>
+        <translation>Print</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Right</source>
+        <translation>Vpravo</translation>
+    </message>
+    <message>
+        <location line="+642"/>
+        <location line="+138"/>
+        <source>Shift</source>
+        <translation>Shift</translation>
+    </message>
+    <message>
+        <location line="-796"/>
+        <source>Space</source>
+        <translation>MezernÃ­k</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Media Record</source>
+        <translation>NahrÃ¡t</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Print Screen</source>
+        <translation>Print Screen</translation>
+    </message>
+    <message>
+        <location line="-32"/>
+        <source>Treble Down</source>
+        <translation>VÃœÅ¡ky -</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Scroll Lock</source>
+        <translation>Scroll Lock</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <source>Volume Down</source>
+        <translation>Hlasitost -</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Volume Mute</source>
+        <translation>Ztlumit hlasitost</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Media Previous</source>
+        <translation>PÅedchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Home Page</source>
+        <translation>DomovskÃ¡ strÃ¡nka</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>Volume Up</source>
+        <translation>Hlasitost +</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Launch (6)</source>
+        <translation>Spustit (6)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (7)</source>
+        <translation>Spustit (7)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (8)</source>
+        <translation>Spustit (8)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (9)</source>
+        <translation>Spustit (9)</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>Launch (2)</source>
+        <translation>Spustit (2)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (3)</source>
+        <translation>Spustit (3)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (4)</source>
+        <translation>Spustit (4)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (5)</source>
+        <translation>Spustit (5)</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Launch (0)</source>
+        <translation>Spustit (0)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (1)</source>
+        <translation>Spustit (1)</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Launch (F)</source>
+        <translation>Spustit (F)</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Launch (B)</source>
+        <translation>Spustit (B)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (C)</source>
+        <translation>Spustit (C)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (D)</source>
+        <translation>Spustit (D)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (E)</source>
+        <translation>Spustit (E)</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Launch (A)</source>
+        <translation>Spustit (A)</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Delete</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Escape</source>
+        <translation>Escape</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Hangup</source>
+        <translation>PovÄsit</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Insert</source>
+        <translation>Insert</translation>
+    </message>
+    <message>
+        <location line="-43"/>
+        <source>Bass Boost</source>
+        <translation>ZesÃ­lenÃ­ basÅ¯</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <source>PgDown</source>
+        <translation>PgDown</translation>
+    </message>
+    <message>
+        <location line="-14"/>
+        <source>Return</source>
+        <translation>Return</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Search</source>
+        <translation>Hledat</translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Select</source>
+        <translation>Vybrat</translation>
+    </message>
+    <message>
+        <location line="-73"/>
+        <source>SysReq</source>
+        <translation>SysReq</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>NumLock</source>
+        <translation>NumLock</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ScrollLock</source>
+        <translation>ScrollLock</translation>
+    </message>
+    <message>
+        <location line="+68"/>
+        <source>Context1</source>
+        <translation>Kontext1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context2</source>
+        <translation>Kontext2</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context3</source>
+        <translation>Kontext3</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context4</source>
+        <translation>Kontext4</translation>
+    </message>
+    <message>
+        <location line="-22"/>
+        <source>Page Up</source>
+        <translation>Page Up</translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <source>Open URL</source>
+        <translation>OtevÅÃ­t URL</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Caps Lock</source>
+        <translation>Caps Lock</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>System Request</source>
+        <translation>ÅœÃ¡dost systÃ©mu</translation>
+    </message>
+    <message>
+        <location line="-60"/>
+        <source>CapsLock</source>
+        <translation>CapsLock</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <source>Backtab</source>
+        <translation>ZpÄt-Tab</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Bass Up</source>
+        <translation>Basy +</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Refresh</source>
+        <translation>Obnovit</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Launch Mail</source>
+        <translation>Spustit e-mail</translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <source>Backspace</source>
+        <translation>Backspace</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Bass Down</source>
+        <translation>Basy -</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Standby</source>
+        <translation>V pohotovosti</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>Treble Up</source>
+        <translation>VÃœÅ¡ky +</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Num Lock</source>
+        <translation>Num Lock</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Number Lock</source>
+        <translation>Zahlen-Feststelltaste</translation>
+    </message>
+    <message>
+        <location line="-30"/>
+        <source>Favorites</source>
+        <translation>OblÃ­benÃ©</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <source>Forward</source>
+        <translation>DopÅedu</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Page Down</source>
+        <translation>Obraz dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-33"/>
+        <source>Media Play</source>
+        <translation>PÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Stop</source>
+        <translation>Zastavit pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Media Next</source>
+        <translation>DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Launch Media</source>
+        <translation>Spustit pÅehrÃ¡vaÄ</translation>
+    </message>
+</context>
+<context>
+    <name>QSlider</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+153"/>
+        <source>Page up</source>
+        <translation>O stranu nahoru</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Position</source>
+        <translation>Poloha</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Page right</source>
+        <translation>O stranu doprava</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Page down</source>
+        <translation>O stranu dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Page left</source>
+        <translation>O stranu doleva</translation>
+    </message>
+</context>
+<context>
+    <name>QSocks5SocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+710"/>
+        <source>Network operation timed out</source>
+        <translation>ÄasovÃœ limit pro sÃ­Å¥ovou operaci byl pÅekroÄen</translation>
+    </message>
+    <message>
+        <location line="-773"/>
+        <source>Connection to proxy closed prematurely</source>
+        <translation>Proxy server pÅedÄasnÄ ukonÄil spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Proxy authentication failed: %1</source>
+        <translation>Autentizace u proxy serveru se nezdaÅila: %1</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>Proxy authentication failed</source>
+        <translation>Autentizace u proxy serveru se nezdaÅila</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>General SOCKSv5 server failure</source>
+        <translation>VÅ¡eobecnÃ¡ chyba pÅi spojenÃ­ s SOCKSv5 serverem</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+        <translation>Byl obdrÅŸen neznÃ¡mÃœ chybovÃœ kÃ³d od SOCKSv5 proxy serveru: 0x%1</translation>
+    </message>
+    <message>
+        <location line="-29"/>
+        <source>Connection not allowed by SOCKSv5 server</source>
+        <translation>SOCKSv5 server odmÃ­tl spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>SOCKSv5 command not supported</source>
+        <translation>Tento SOCKSv5 pÅÃ­kaz nenÃ­ podporovÃ¡n</translation>
+    </message>
+    <message>
+        <location line="-70"/>
+        <source>Connection to proxy timed out</source>
+        <translation>PÅi spojenÃ­ s proxy serverem byl pÅekroÄen ÄasovÃœ limit</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Proxy host not found</source>
+        <translation>Proxy server se nepodaÅilo najit</translation>
+    </message>
+    <message>
+        <location line="+71"/>
+        <source>TTL expired</source>
+        <translation>TTL uplynul</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Address type not supported</source>
+        <translation>Tento typ adresy nenÃ­ podporovÃ¡n</translation>
+    </message>
+    <message>
+        <location line="-87"/>
+        <source>Connection to proxy refused</source>
+        <translation>Proxy server odmÃ­tl navÃ¡zÃ¡nÃ­ spojenÃ­</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>SOCKS version 5 protocol error</source>
+        <translation>Chyba protokolu (SOCKS verze 5)</translation>
+    </message>
+</context>
+<context>
+    <name>QSoftKeyManager</name>
+    <message>
+        <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/>
+        <source>Ok</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select</source>
+        <translation>Vybrat</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Done</source>
+        <translation>Hotovo</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Options</source>
+        <translation>Volby</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+151"/>
+        <source>Exit</source>
+        <translation>UkonÄit</translation>
+    </message>
+</context>
+<context>
+    <name>QSpinBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-567"/>
+        <source>Less</source>
+        <translation>MÃ©nÄ</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>More</source>
+        <translation>VÃ­ce</translation>
+    </message>
+</context>
+<context>
+    <name>QSql</name>
+    <message>
+        <location filename="../src/qt3support/sql/q3sqlmanager_p.cpp" line="+893"/>
+        <location line="+16"/>
+        <location line="+36"/>
+        <source>No</source>
+        <translation>Ne</translation>
+    </message>
+    <message>
+        <location line="-53"/>
+        <location line="+16"/>
+        <location line="+36"/>
+        <source>Yes</source>
+        <translation>Ano</translation>
+    </message>
+    <message>
+        <location line="-34"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <source>Delete</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Insert</source>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Update</source>
+        <translation>Obnovit</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Delete this record?</source>
+        <translation>Smazat tento zÃ¡pis?</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Save edits?</source>
+        <translation>UloÅŸit zmÄny?</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Confirm</source>
+        <translation>Potvrdit</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cancel your edits?</source>
+        <translation>ZruÅ¡it zmÄny?</translation>
+    </message>
+</context>
+<context>
+    <name>QSslSocket</name>
+    <message>
+        <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+362"/>
+        <source>Error creating SSL session: %1</source>
+        <translation>NepodaÅilo se vytvoÅit sezenÃ­ SSL: %1</translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <source>Error creating SSL session, %1</source>
+        <translation>NepodaÅilo se vytvoÅit sezenÃ­ SSL, %1</translation>
+    </message>
+    <message>
+        <location line="-46"/>
+        <source>Cannot provide a certificate with no key, %1</source>
+        <translation>Bez klÃ­Äe nelze poskytnout ÅŸÃ¡dnÃ© osvÄdÄenÃ­ k volnÃ©mu pouÅŸitÃ­, %1</translation>
+    </message>
+    <message>
+        <location line="+245"/>
+        <source>Unable to write data: %1</source>
+        <translation>Data se nepodaÅilo zapsat: %1</translation>
+    </message>
+    <message>
+        <location line="+215"/>
+        <source>Error during SSL handshake: %1</source>
+        <translation>BÄhem startu SSL protokolu se vyskytla chyba: %1</translation>
+    </message>
+    <message>
+        <location line="-453"/>
+        <source>Error loading local certificate, %1</source>
+        <translation>NepodaÅilo se nahrÃ¡t mÃ­stnÃ­ osvÄdÄenÃ­, %1</translation>
+    </message>
+    <message>
+        <location line="-23"/>
+        <source>Invalid or empty cipher list (%1)</source>
+        <translation>NeplatnÃœ Äi prÃ¡zdnÃœ seznam se Å¡ifrovacÃ­mi klÃ­Äi (%1)</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Private key does not certificate public key, %1</source>
+        <translation>VystavenÃ­ osvÄdÄenÃ­ k veÅejnÃ©mu klÃ­Äi pÅes soukromÃœ klÃ­Ä se nezdaÅilo, %1</translation>
+    </message>
+    <message>
+        <location line="-67"/>
+        <source>Error creating SSL context (%1)</source>
+        <translation>NepodaÅilo se vytvoÅit ÅŸÃ¡dnÃœ kontext SSL (%1)</translation>
+    </message>
+    <message>
+        <location line="+405"/>
+        <source>Error while reading: %1</source>
+        <translation>PÅi ÄtenÃ­ se vyskytla chyba: %1</translation>
+    </message>
+    <message>
+        <location line="-345"/>
+        <source>Error loading private key, %1</source>
+        <translation>SoukromÃœ klÃ­Ä se nepodaÅilo nahrÃ¡t, %1</translation>
+    </message>
+</context>
+<context>
+    <name>QStateMachine</name>
+    <message>
+        <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/>
+        <source>Missing initial state in compound state &apos;%1&apos;</source>
+        <translation>ChybÃ­ poÄÃ¡teÄnÃ­ stav sloÅŸenÃ©ho stavu &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Missing default state in history state &apos;%1&apos;</source>
+        <translation>ChybÃ­ vÃœchozÃ­ stav ve vÃœvoji stavu &apos;%1&apos;</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
+        <translation>CÃ­l a zdroj pÅechodu ze stavu &apos;%1&apos; nemajÃ­ ÅŸÃ¡dnÃœ spoleÄnÃœ pÅ¯vod</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Unknown error</source>
+        <translation>NeznÃ¡mÃ¡ chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QSystemSemaphore</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-46"/>
+        <source>%1: does not exist</source>
+        <translation>%1: Neexistuje</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>%1: already exists</source>
+        <translation>%1: JiÅŸ existuje</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+73"/>
+        <source>%1: unknown error %2</source>
+        <translation>%1: NeznÃ¡mÃ¡ chyba %2</translation>
+    </message>
+    <message>
+        <location line="-17"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="-3"/>
+        <source>%1: permission denied</source>
+        <translation>%1: PÅÃ­stup odepÅen</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="-4"/>
+        <source>%1: out of resources</source>
+        <translation>%1: Nejsou jiÅŸ pouÅŸitelnÃ© zdroje</translation>
+    </message>
+</context>
+<context>
+    <name>QTDSDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/>
+        <source>Unable to open connection</source>
+        <translation>NepodaÅilo se otevÅÃ­t spojenÃ­ s databÃ¡zÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Unable to use database</source>
+        <translation>DatatbÃ¡zi se nepodaÅilo pouÅŸÃ­t</translation>
+    </message>
+</context>
+<context>
+    <name>QTabBar</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="-326"/>
+        <source>Scroll Left</source>
+        <translation>ProjÃ­ÅŸdÄt doleva</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll Right</source>
+        <translation>ProjÃ­ÅŸdÄt doprava</translation>
+    </message>
+</context>
+<context>
+    <name>QTcpServer</name>
+    <message>
+        <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/>
+        <source>Operation on socket is not supported</source>
+        <translation>Tato zÃ¡suvkovÃ¡ (socket) operace nenÃ­ podporovÃ¡na</translation>
+    </message>
+</context>
+<context>
+    <name>QTextControl</name>
+    <message>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+2013"/>
+        <source>Cu&amp;t</source>
+        <translation>Vyj&amp;mout</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Znovu</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;ZpÄt</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Select All</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="-16"/>
+        <source>Copy &amp;Link Location</source>
+        <translation>&amp;KopÃ­rovat adresu odkazu</translation>
+    </message>
+</context>
+<context>
+    <name>QToolButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+312"/>
+        <location line="+8"/>
+        <source>Open</source>
+        <translation>OtevÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <location line="+6"/>
+        <source>Press</source>
+        <translation>Stisknout</translation>
+    </message>
+</context>
+<context>
+    <name>QUdpSocket</name>
+    <message>
+        <location filename="../src/network/socket/qudpsocket.cpp" line="+179"/>
+        <source>This platform does not support IPv6</source>
+        <translation>Tato patforma nepodpotuje IPv6</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoGroup</name>
+    <message>
+        <location filename="../src/gui/util/qundogroup.cpp" line="+413"/>
+        <source>Redo</source>
+        <translation>Znovu</translation>
+    </message>
+    <message>
+        <location line="-28"/>
+        <source>Undo</source>
+        <translation>ZpÄt</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoModel</name>
+    <message>
+        <location filename="../src/gui/util/qundoview.cpp" line="+101"/>
+        <source>&lt;empty&gt;</source>
+        <translation>&lt;prÃ¡zdnÃœ&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoStack</name>
+    <message>
+        <location filename="../src/gui/util/qundostack.cpp" line="+859"/>
+        <source>Redo</source>
+        <translation>Znovu</translation>
+    </message>
+    <message>
+        <location line="-27"/>
+        <source>Undo</source>
+        <translation>ZpÄt</translation>
+    </message>
+</context>
+<context>
+    <name>QUnicodeControlCharacterMenu</name>
+    <message>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+906"/>
+        <source>RLE Start of right-to-left embedding</source>
+        <translation>RLE ZaÄÃ¡tek zapuÅ¡tÄnÃ­ zprava doleva (right-to-left embedding)</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>ZWSP Zero width space</source>
+        <translation>ZWSP Prostor s nulovou Å¡Ã­Åkou (Zero width space)</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Insert Unicode control character</source>
+        <translation>VloÅŸit kontrolnÃ­ znak Unicode</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>LRO Start of left-to-right override</source>
+        <translation>LRO ZaÄÃ¡tek zruÅ¡enÃ­ zleva doprava (left-to-right override)</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>LRE Start of left-to-right embedding</source>
+        <translation>LRE ZaÄÃ¡tek zapuÅ¡tÄnÃ­ zleva doprava (right-to-left embedding)</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>RLM Right-to-left mark</source>
+        <translation>RLM ZnaÄka zprava doleva (Right-to-left mark)</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>PDF Pop directional formatting</source>
+        <translation>PDF Vsunout smÄrovÃ© formÃ¡tovÃ¡nÃ­ (Pop directional formatting)</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>ZWNJ Zero width non-joiner</source>
+        <translation>ZWNJ NespojovaÄ s nulovou Å¡Ã­Åkou (Zero width non-joiner)</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>RLO Start of right-to-left override</source>
+        <translation>RLO ZaÄÃ¡tek zruÅ¡enÃ­ zprava doleva (right-to-left override)</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>ZWJ Zero width joiner</source>
+        <translation>ZWJ SpojovaÄ s nulovou Å¡Ã­Åkou (Zero width joiner)</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>LRM Left-to-right mark</source>
+        <translation>LRM ZnaÄka zleva doprava (Left-to-right mark)</translation>
+    </message>
+</context>
+<context>
+    <name>QWebFrame</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+730"/>
+        <source>Request blocked</source>
+        <translation>PoÅŸadavek byl odmÃ­tnut</translation>
+    </message>
+    <message>
+        <location line="-19"/>
+        <source>Request cancelled</source>
+        <translation>PoÅŸadavek byl zruÅ¡en</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Cannot show URL</source>
+        <translation>Adresu (URL) nelze ukÃ¡zat</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Frame load interrupted by policy change</source>
+        <translation>NahrÃ¡nÃ­ rÃ¡mce bylo pÅeruÅ¡eno zmÄnou smÄrnice</translation>
+    </message>
+    <message>
+        <source>Frame load interruped by policy change</source>
+        <translation type="obsolete">NahrÃ¡nÃ­ rÃ¡mce bylo pÅeruÅ¡eno zmÄnou smÄrnice</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>File does not exist</source>
+        <translation>Soubor neexistuje</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Cannot show mimetype</source>
+        <translation>Tento mime typ nelze ukÃ¡zat</translation>
+    </message>
+</context>
+<context>
+    <name>QWebPage</name>
+    <message>
+        <source>Cut</source>
+        <translation type="obsolete">Vyjmout</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation type="obsolete">Zleva doprava</translation>
+    </message>
+    <message>
+        <source>RTL</source>
+        <translation type="obsolete">Zprava doleva</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+61"/>
+        <source>Top</source>
+        <translation>ZaÄÃ¡tek</translation>
+    </message>
+    <message>
+        <source>Bold</source>
+        <translation type="obsolete">TuÄnÃ©</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation type="obsolete">KopÃ­rovat</translation>
+    </message>
+    <message>
+        <source>Stop</source>
+        <translation type="obsolete">UkonÄit</translation>
+    </message>
+    <message>
+        <source>Open Frame</source>
+        <translation type="obsolete">OtevÅÃ­t rÃ¡mec</translation>
+    </message>
+    <message>
+        <source>Open Image</source>
+        <translation type="obsolete">VyobrazenÃ­ otevÅÃ­t v novÃ©m oknÄ</translation>
+    </message>
+    <message>
+        <source>Fonts</source>
+        <translation type="obsolete">PÃ­sma</translation>
+    </message>
+    <message>
+        <source>Paste</source>
+        <translation type="obsolete">VloÅŸit</translation>
+    </message>
+    <message>
+        <source>Reset</source>
+        <translation type="obsolete">VrÃ¡tit</translation>
+    </message>
+    <message>
+        <source>Inspect</source>
+        <translation type="obsolete">ProvÃ©st prohlÃ­dku</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+2213"/>
+        <source>Select to the start of the block</source>
+        <translation>Vybrat aÅŸ po zaÄÃ¡tek bloku</translation>
+    </message>
+    <message>
+        <location line="-36"/>
+        <source>Move the cursor to the end of the block</source>
+        <translation>Ukazatel polohy posunout aÅŸ na konec bloku</translation>
+    </message>
+    <message>
+        <location line="-469"/>
+        <source>JavaScript Alert - %1</source>
+        <translation>UpozornÄnÃ­ od JavaScriptu - %1</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>JavaScript Confirm - %1</source>
+        <translation>PotvrzenÃ­ od JavaScriptu - %1</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>JavaScript Prompt - %1</source>
+        <translation>VÃœzva od JavaScriptu - %1</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>JavaScript Problem - %1</source>
+        <translation>PotÃ­ÅŸe s JavaScriptem - %1</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>The script on this page appears to have a problem. Do you want to stop the script?</source>
+        <translation>VypadÃ¡ to na to, ÅŸe skript na tÃ©to stranÄ mÃ¡ potÃ­ÅŸe. Chcete tento skript zastavit?</translation>
+    </message>
+    <message>
+        <location line="+419"/>
+        <source>Select all</source>
+        <translation>Vybrat vÅ¡e</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Select to the start of the line</source>
+        <translation>Vybrat aÅŸ po zaÄÃ¡tek ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Insert a new paragraph</source>
+        <translation>VloÅŸit novÃœ odstavec</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Insert a new line</source>
+        <translation>VloÅŸit novÃœ ÅÃ¡dek</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Paste and Match Style</source>
+        <translation>VloÅŸit a odpovÃ­dat stylu</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Remove formatting</source>
+        <translation>Odstranit formÃ¡tovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Strikethrough</source>
+        <translation>PÅeÅ¡krtnuto</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Subscript</source>
+        <translation>DolnÃ­ index</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Superscript</source>
+        <translation>HornÃ­ index</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Insert Bulleted List</source>
+        <translation>VloÅŸit seznam s odrÃ¡ÅŸkami</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Insert Numbered List</source>
+        <translation>VloÅŸit ÄÃ­slovanÃœ seznam</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Indent</source>
+        <translation>Odsadit</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Outdent</source>
+        <translation>ZruÅ¡it odsazenÃ­</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Center</source>
+        <translation>Na stÅed</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Justify</source>
+        <translation>Do bloku</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Align Left</source>
+        <translation>Zarovnat vlevo</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Align Right</source>
+        <translation>Zarovnat vpravo</translation>
+    </message>
+    <message>
+        <source>Look Up In Dictionary</source>
+        <translation type="obsolete">PodÃ­vat se do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <source>Search The Web</source>
+        <translation type="obsolete">Hledat na sÃ­ti</translation>
+    </message>
+    <message>
+        <source>Check Spelling While Typing</source>
+        <translation type="obsolete">Kontrolovat pravopis bÄhem psanÃ­</translation>
+    </message>
+    <message>
+        <source>Add To Dictionary</source>
+        <translation type="obsolete">PÅidat do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location line="-85"/>
+        <source>Delete to the start of the word</source>
+        <translation>Smazat aÅŸ po zaÄÃ¡tek slova</translation>
+    </message>
+    <message>
+        <source>Recent searches</source>
+        <translation type="obsolete">DosavadnÃ­ hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location line="-69"/>
+        <source>Move the cursor to the next word</source>
+        <translation>Ukazatel polohy posunout k nÃ¡sledujÃ­cÃ­mu slovu</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Move the cursor to the next line</source>
+        <translation>Ukazatel polohy posunout k nÃ¡sledujÃ­cÃ­mu ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+9"/>
+        <source>Scroll down</source>
+        <translation>ProjÃ­ÅŸdÄt dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Scroll here</source>
+        <translation>ProjÃ­ÅŸdÄt aÅŸ sem</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Scroll left</source>
+        <translation>ProjÃ­ÅŸdÄt doleva</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+12"/>
+        <source>Move the cursor to the start of the block</source>
+        <translation>Ukazatel polohy posunout na zaÄÃ¡tek bloku</translation>
+    </message>
+    <message>
+        <source>Text Direction</source>
+        <translation type="obsolete">SmÄr psanÃ­</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="-7"/>
+        <source>Bottom</source>
+        <translation>Konec</translation>
+    </message>
+    <message>
+        <source>Ignore</source>
+        <translation type="obsolete">NevÅ¡Ã­mat si</translation>
+    </message>
+    <message>
+        <source>Italic</source>
+        <translation type="obsolete">KurzÃ­vnÃ­</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="-3"/>
+        <source>Move the cursor to the end of the line</source>
+        <translation>Ukazatel polohy posunout na konec ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>Move the cursor to the start of the line</source>
+        <translation>Ukazatel polohy posunout na zaÄÃ¡tek ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <source>Reload</source>
+        <translation type="obsolete">NahrÃ¡t znovu</translation>
+    </message>
+    <message>
+        <source>Submit</source>
+        <translation type="obsolete">Poslat</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/>
+        <source>Web Inspector - %2</source>
+        <translation>Web Inspektor - %2</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+3"/>
+        <source>Page up</source>
+        <translation>O stranu nahoru</translation>
+    </message>
+    <message>
+        <source>Spelling</source>
+        <translation type="obsolete">Pravopis</translation>
+    </message>
+    <message>
+        <source>Outline</source>
+        <translation type="obsolete">Obrys</translation>
+    </message>
+    <message>
+        <source>Check Grammar With Spelling</source>
+        <translation type="obsolete">Kontrolovat mluvnici spoleÄnÄ s pravopisem</translation>
+    </message>
+    <message>
+        <source>No file selected</source>
+        <translation type="obsolete">Nebyl vybrÃ¡n ÅŸÃ¡dnÃœ soubor</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
+        <source>Submit</source>
+        <comment>default label for Submit buttons in forms on web pages</comment>
+        <translation>Poslat</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Reset</source>
+        <comment>default label for Reset buttons in forms on web pages</comment>
+        <translation>VrÃ¡tit</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>This is a searchable index. Enter search keywords: </source>
+        <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
+        <translation>Tento rejstÅÃ­k mÃ¡ funkci hledÃ¡nÃ­. Zadejte nÄjakÃœ hledanÃœ vÃœraz:</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Choose File</source>
+        <comment>title for file button used in HTML forms</comment>
+        <translation>Vybrat soubor</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No file selected</source>
+        <comment>text to display in file button used in HTML forms when no file is selected</comment>
+        <translation>Nebyl vybrÃ¡n ÅŸÃ¡dnÃœ soubor</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open in New Window</source>
+        <comment>Open in New Window context menu item</comment>
+        <translation>OtevÅÃ­t v novÃ©m oknÄ</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save Link...</source>
+        <comment>Download Linked File context menu item</comment>
+        <translation>UloÅŸit odkaz...</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy Link</source>
+        <comment>Copy Link context menu item</comment>
+        <translation>KopÃ­rovat adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Image</source>
+        <comment>Open Image in New Window context menu item</comment>
+        <translation>VyobrazenÃ­ otevÅÃ­t v novÃ©m oknÄ</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save Image</source>
+        <comment>Download Image context menu item</comment>
+        <translation>UloÅŸit vyobrazenÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy Image</source>
+        <comment>Copy Link context menu item</comment>
+        <translation>KopÃ­rovat vyobrazenÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Frame</source>
+        <comment>Open Frame in New Window context menu item</comment>
+        <translation>OtevÅÃ­t rÃ¡mec</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy</source>
+        <comment>Copy context menu item</comment>
+        <translation>KopÃ­rovat</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Go Back</source>
+        <comment>Back context menu item</comment>
+        <translation>JÃ­t zpÄt</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Go Forward</source>
+        <comment>Forward context menu item</comment>
+        <translation>JÃ­t dopÅedu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Stop</source>
+        <comment>Stop context menu item</comment>
+        <translation>Zastavit</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Reload</source>
+        <comment>Reload context menu item</comment>
+        <translation>NahrÃ¡t znovu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Cut</source>
+        <comment>Cut context menu item</comment>
+        <translation>Vyjmout</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Paste</source>
+        <comment>Paste context menu item</comment>
+        <translation>VloÅŸit</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No Guesses Found</source>
+        <comment>No Guesses Found context menu item</comment>
+        <translation>Nebyly nalezeny ÅŸÃ¡dnÃ© nÃ¡vrhy</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Ignore</source>
+        <comment>Ignore Spelling context menu item</comment>
+        <translation>PÅehlÃ­ÅŸet</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Add To Dictionary</source>
+        <comment>Learn Spelling context menu item</comment>
+        <translation>PÅidat do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Search The Web</source>
+        <comment>Search The Web context menu item</comment>
+        <translation>Hledat na sÃ­ti</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Look Up In Dictionary</source>
+        <comment>Look Up in Dictionary context menu item</comment>
+        <translation>PodÃ­vat se do slovnÃ­ku</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Link</source>
+        <comment>Open Link context menu item</comment>
+        <translation>OtevÅÃ­t adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Ignore</source>
+        <comment>Ignore Grammar context menu item</comment>
+        <translation>PÅehlÃ­ÅŸet</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Spelling</source>
+        <comment>Spelling and Grammar context sub-menu item</comment>
+        <translation>Pravopis</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Show Spelling and Grammar</source>
+        <comment>menu item title</comment>
+        <translation>UkÃ¡zat pravopis a mluvnici</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hide Spelling and Grammar</source>
+        <comment>menu item title</comment>
+        <translation>SkrÃœt pravopis a mluvnici</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Spelling</source>
+        <comment>Check spelling context menu item</comment>
+        <translation>OvÄÅenÃ­ pravopisu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Spelling While Typing</source>
+        <comment>Check spelling while typing context menu item</comment>
+        <translation>OvÄÅovat pravopis bÄhem psanÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Grammar With Spelling</source>
+        <comment>Check grammar with spelling context menu item</comment>
+        <translation>OvÄÅovat mluvnici spoleÄnÄ s pravopisem</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Fonts</source>
+        <comment>Font context sub-menu item</comment>
+        <translation>PÃ­sma</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Bold</source>
+        <comment>Bold context menu item</comment>
+        <translation>TuÄnÃ©</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Italic</source>
+        <comment>Italic context menu item</comment>
+        <translation>KurzÃ­va</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Underline</source>
+        <comment>Underline context menu item</comment>
+        <translation>PodtrÅŸenÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Outline</source>
+        <comment>Outline context menu item</comment>
+        <translation>Obrys</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Direction</source>
+        <comment>Writing direction context sub-menu item</comment>
+        <translation>SmÄr</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Text Direction</source>
+        <comment>Text direction context sub-menu item</comment>
+        <translation>SmÄr psanÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Default</source>
+        <comment>Default writing direction context menu item</comment>
+        <translation>VÃœchozÃ­</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Left to Right</source>
+        <comment>Left to Right context menu item</comment>
+        <translation>Zleva doprava</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Right to Left</source>
+        <comment>Right to Left context menu item</comment>
+        <translation>Zprava doleva</translation>
+    </message>
+    <message>
+        <location line="+105"/>
+        <source>Loading...</source>
+        <comment>Media controller status message when the media is loading</comment>
+        <translation>NahrÃ¡vÃ¡ se...</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Live Broadcast</source>
+        <comment>Media controller status message when watching a live broadcast</comment>
+        <translation>ÅœivÃœ pÅenos</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Audio Element</source>
+        <comment>Media controller element</comment>
+        <translation>ZvukovÃœ prvek</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video Element</source>
+        <comment>Media controller element</comment>
+        <translation>Videoprvek</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Mute Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro ztlumenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Unmute Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro zruÅ¡enÃ­ ztlumenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Play Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Pause Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro pozastavenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Slider</source>
+        <comment>Media controller element</comment>
+        <translation>PosuvnÃ­k</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Slider Thumb</source>
+        <comment>Media controller element</comment>
+        <translation>Palec posuvnÃ­ku</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Rewind Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro pÅetoÄenÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Return to Real-time Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro nÃ¡vrat ke skuteÄnÃ©mu Äasu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Elapsed Time</source>
+        <comment>Media controller element</comment>
+        <translation>UplynulÃœ Äas</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Remaining Time</source>
+        <comment>Media controller element</comment>
+        <translation>ZbÃœvajÃ­cÃ­ Äas</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Status Display</source>
+        <comment>Media controller element</comment>
+        <translation>Ãdaj o stavu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Fullscreen Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro zobrazenÃ­ na celou obrazovku</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Seek Forward Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro hledÃ¡nÃ­ dopÅedu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Seek Back Button</source>
+        <comment>Media controller element</comment>
+        <translation>TlaÄÃ­tko pro hledÃ¡nÃ­ dozadu</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Audio element playback controls and status display</source>
+        <comment>Media controller element</comment>
+        <translation>ÅÃ­zenÃ­ pÅehrÃ¡vÃ¡nÃ­ zvuku a zobrazenÃ­ stavu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video element playback controls and status display</source>
+        <comment>Media controller element</comment>
+        <translation>ÅÃ­zenÃ­ pÅehrÃ¡vÃ¡nÃ­ videa a zobrazenÃ­ stavu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Mute audio tracks</source>
+        <comment>Media controller element</comment>
+        <translation>Ztlumit zvukovÃ© stopy</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Unmute audio tracks</source>
+        <comment>Media controller element</comment>
+        <translation>ZruÅ¡it ztlumenÃ­ zvukovÃœch stop</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Begin playback</source>
+        <comment>Media controller element</comment>
+        <translation>ZaÄÃ­t pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Pause playback</source>
+        <comment>Media controller element</comment>
+        <translation>Pozastavit pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Movie time scrubber</source>
+        <comment>Media controller element</comment>
+        <translation>Äas pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Movie time scrubber thumb</source>
+        <comment>Media controller element</comment>
+        <translation>Palec pro nastavenÃ­ Äasu pÅehrÃ¡vÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Rewind movie</source>
+        <comment>Media controller element</comment>
+        <translation>PÅetoÄit film zpÄt</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Return streaming movie to real-time</source>
+        <comment>Media controller element</comment>
+        <translation>VrÃ¡tit film na skuteÄnÃœ Äas</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Current movie time</source>
+        <comment>Media controller element</comment>
+        <translation>Äas pÅehrÃ¡vÃ¡nÃ­ filmu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Remaining movie time</source>
+        <comment>Media controller element</comment>
+        <translation>ZbÃœvajÃ­cÃ­ Äas z pÅehrÃ¡vÃ¡nÃ­ filmu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Current movie status</source>
+        <comment>Media controller element</comment>
+        <translation>Stav filmu</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Play movie in full-screen mode</source>
+        <comment>Media controller element</comment>
+        <translation>PÅehrÃ¡vat film v reÅŸimu zobrazenÃ­ na celou obrazovku</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Seek quickly back</source>
+        <comment>Media controller element</comment>
+        <translation>RychlÃ© zpÄtnÃ© hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Seek quickly forward</source>
+        <comment>Media controller element</comment>
+        <translation>RychlÃ© dopÅednÃ© hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Indefinite time</source>
+        <comment>Media time description</comment>
+        <translation>NeomezenÃœ Äas</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1 days %2 hours %3 minutes %4 seconds</source>
+        <comment>Media time description</comment>
+        <translation>%1 dny %2 hodiny %3 minuty %4 sekundy</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1 hours %2 minutes %3 seconds</source>
+        <comment>Media time description</comment>
+        <translation>%1 hodiny %2 minuty %3 sekundy</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1 minutes %2 seconds</source>
+        <comment>Media time description</comment>
+        <translation>%1 minuty %2 sekundy</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 seconds</source>
+        <comment>Media time description</comment>
+        <translation>%1 sekundy</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <comment>Left to Right context menu item</comment>
+        <translation type="obsolete">Zleva doprava</translation>
+    </message>
+    <message>
+        <source>RTL</source>
+        <comment>Right to Left context menu item</comment>
+        <translation type="obsolete">Zprava doleva</translation>
+    </message>
+    <message>
+        <location line="-210"/>
+        <source>Inspect</source>
+        <comment>Inspect Element context menu item</comment>
+        <translation>ProvÃ©st prohlÃ­dku</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No recent searches</source>
+        <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
+        <translation>NeexistujÃ­ ÅŸÃ¡dnÃ© naposledy hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Recent searches</source>
+        <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+        <translation>DosavadnÃ­ hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Clear recent searches</source>
+        <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
+        <translation>Smazat naposledy hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>Unknown</source>
+        <comment>Unknown filesize FTP directory listing item</comment>
+        <translation>NeznÃ¡mÃœ</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 (%2x%3 pixels)</source>
+        <comment>Title string for images</comment>
+        <translation>%1 (%2x%3 pixelÅ¯)</translation>
+    </message>
+    <message>
+        <source>Save Image</source>
+        <translation type="obsolete">UloÅŸit vyobrazenÃ­</translation>
+    </message>
+    <message>
+        <source>Save Link...</source>
+        <translation type="obsolete">UloÅŸit odkaz...</translation>
+    </message>
+    <message>
+        <source>No recent searches</source>
+        <translation type="obsolete">NeexistujÃ­ ÅŸÃ¡dnÃ© naposledy hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+1"/>
+        <source>Page right</source>
+        <translation>O stranu doprava</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+12"/>
+        <source>Move the cursor to the start of the document</source>
+        <translation>Ukazatel polohy posunout na zaÄÃ¡tek dokumentu</translation>
+    </message>
+    <message>
+        <location line="-30"/>
+        <source>Move the cursor to the next character</source>
+        <translation>Ukazatel polohy posunout k nÃ¡sledujÃ­cÃ­mu znaku</translation>
+    </message>
+    <message>
+        <source>Copy Link</source>
+        <translation type="obsolete">KopÃ­rovat adresu odkazu</translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Select to the previous line</source>
+        <translation>Vybrat aÅŸ po pÅedchozÃ­ ÅÃ¡dek</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Select to the previous word</source>
+        <translation>Vybrat aÅŸ po pÅedchozÃ­ slovo</translation>
+    </message>
+    <message>
+        <source>Check Spelling</source>
+        <translation type="obsolete">Kontrola pravopisu</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Select to the next character</source>
+        <translation>Vybrat aÅŸ po nÃ¡sledujÃ­cÃ­ znak</translation>
+    </message>
+    <message>
+        <source>Show Spelling and Grammar</source>
+        <translation type="obsolete">UkÃ¡zat pravopis a mluvnici</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Delete to the end of the word</source>
+        <translation>Smazat aÅŸ po konec slova</translation>
+    </message>
+    <message>
+        <source>Direction</source>
+        <translation type="obsolete">SmÄr</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Select to the end of the line</source>
+        <translation>Vybrat aÅŸ po zaÄÃ¡tek ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-307"/>
+        <source>Submit</source>
+        <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
+        <translation>Poslat</translation>
+    </message>
+    <message>
+        <source>Choose File</source>
+        <translation type="obsolete">Vybrat soubor</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+3"/>
+        <source>Scroll up</source>
+        <translation>ProjÃ­ÅŸdÄt nahoru</translation>
+    </message>
+    <message>
+        <source>Clear recent searches</source>
+        <translation type="obsolete">Smazat naposledy hledanÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+9"/>
+        <source>Select to the start of the document</source>
+        <translation>Vybrat aÅŸ po zaÄÃ¡tek dokumentu</translation>
+    </message>
+    <message>
+        <source>Default</source>
+        <translation type="obsolete">VÃœchozÃ­</translation>
+    </message>
+    <message>
+        <source>Underline</source>
+        <translation type="obsolete">Podtrhnout</translation>
+    </message>
+    <message>
+        <location line="-66"/>
+        <source>Move the cursor to the previous character</source>
+        <translation>Ukazatel polohy posunout k pÅedchozÃ­mu znaku</translation>
+    </message>
+    <message>
+        <source>Copy Image</source>
+        <translation type="obsolete">KopÃ­rovat vyobrazenÃ­</translation>
+    </message>
+    <message>
+        <location line="+69"/>
+        <source>Select to the end of the document</source>
+        <translation>Vybrat aÅŸ po konec dokumentu</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Select to the end of the block</source>
+        <translation>Vybrat aÅŸ po konec bloku</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+1"/>
+        <source>Scroll right</source>
+        <translation>ProjÃ­ÅŸdÄt doprava</translation>
+    </message>
+    <message>
+        <source>No Guesses Found</source>
+        <translation type="obsolete">Nebyly nalezeny ÅŸÃ¡dnÃ© nÃ¡vrhy</translation>
+    </message>
+    <message>
+        <source>Open Link</source>
+        <translation type="obsolete">OtevÅÃ­t adresu odkazu</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+406"/>
+        <source>Bad HTTP request</source>
+        <translation>NeplatnÃœ poÅŸadavek HTTP</translation>
+    </message>
+    <message>
+        <source>Unknown</source>
+        <translation type="obsolete">NeznÃ¡mÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="-57"/>
+        <source>Move the cursor to the previous word</source>
+        <translation>Ukazatel polohy posunout k pÅedchozÃ­mu slovu</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Move the cursor to the previous line</source>
+        <translation>Ukazatel polohy posunout na pÅedchozÃ­ ÅÃ¡dku</translation>
+    </message>
+    <message>
+        <source>%n file(s)</source>
+        <translation type="obsolete">%n soubor(Å¯)</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="-9"/>
+        <source>Left edge</source>
+        <translation>LevÃœ okraj</translation>
+    </message>
+    <message>
+        <source>Go Forward</source>
+        <translation type="obsolete">JÃ­t dopÅedu</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Page down</source>
+        <translation>O stranu dolÅ¯</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>Page left</source>
+        <translation>O stranu doleva</translation>
+    </message>
+    <message>
+        <source>This is a searchable index. Enter search keywords: </source>
+        <translation type="obsolete">Tento index mÃ¡ funkci hledÃ¡nÃ­. Zadejte nÄjakÃœ hledanÃœ vÃœraz:</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+27"/>
+        <source>Select to the previous character</source>
+        <translation>Vybrat aÅŸ po pÅedchozÃ­ znak</translation>
+    </message>
+    <message>
+        <source>Go Back</source>
+        <translation type="obsolete">JÃ­t zpÄt</translation>
+    </message>
+    <message>
+        <source>Open in New Window</source>
+        <translation type="obsolete">OtevÅÃ­t v novÃ©m oknÄ</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="-3"/>
+        <source>Right edge</source>
+        <translation>PravÃœ okraj</translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="-9"/>
+        <source>Move the cursor to the end of the document</source>
+        <translation>Ukazatel polohy posunout na konec dokumentu</translation>
+    </message>
+    <message>
+        <source>Hide Spelling and Grammar</source>
+        <translation type="obsolete">SkrÃœt pravopis a mluvnici</translation>
+    </message>
+    <message>
+        <source>%1 (%2x%3 pixels)</source>
+        <translation type="obsolete">%1 (%2x%3 pixelÅ¯)</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Select to the next word</source>
+        <translation>Vybrat aÅŸ po nÃ¡sledujÃ­cÃ­ slovo</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Select to the next line</source>
+        <translation>Vybrat aÅŸ po nÃ¡sledujÃ­cÃ­ ÅÃ¡dek</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/>
+        <source>%n file(s)</source>
+        <comment>number of chosen file</comment>
+        <translation>
+            <numerusform>%n soubor(Å¯)</numerusform>
+            <numerusform></numerusform>
+            <numerusform></numerusform>
+        </translation>
+    </message>
+</context>
+<context>
+    <name>QWhatsThisAction</name>
+    <message>
+        <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+527"/>
+        <source>What&apos;s This?</source>
+        <translation>Co je toto?</translation>
+    </message>
+</context>
+<context>
+    <name>QWidget</name>
+    <message>
+        <location filename="../src/gui/kernel/qwidget.cpp" line="+5672"/>
+        <source>*</source>
+        <translation>*</translation>
+    </message>
+</context>
+<context>
+    <name>QWizard</name>
+    <message>
+        <location filename="../src/gui/dialogs/qwizard.cpp" line="+659"/>
+        <source>Done</source>
+        <translation>Hotovo</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Help</source>
+        <translation>NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Help</source>
+        <translation>&amp;NÃ¡povÄda</translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>&amp;Next</source>
+        <translation>&amp;DalÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Cancel</source>
+        <translation>ZruÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Commit</source>
+        <translation>PouÅŸÃ­t</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Continue</source>
+        <translation>PokraÄovat</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>&amp;Finish</source>
+        <translation>Do&amp;konÄit</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>&amp;Next &gt;</source>
+        <translation>&amp;DalÅ¡Ã­ &gt;</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Go Back</source>
+        <translation>JÃ­t zpÄt</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&lt; &amp;Back</source>
+        <translation>&lt; &amp;ZpÄt</translation>
+    </message>
+</context>
+<context>
+    <name>QWorkspace</name>
+    <message>
+        <location filename="../src/gui/widgets/qworkspace.cpp" line="+1090"/>
+        <source>&amp;Move</source>
+        <translation>Po&amp;sunout</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Size</source>
+        <translation>ZmÄnit &amp;velikost</translation>
+    </message>
+    <message>
+        <location line="-978"/>
+        <source>Close</source>
+        <translation>ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Minimize</source>
+        <translation>ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+988"/>
+        <source>Stay on &amp;Top</source>
+        <translation>ZÅ¯stat v &amp;popÅedÃ­</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>&amp;Close</source>
+        <translation>&amp;ZavÅÃ­t</translation>
+    </message>
+    <message>
+        <location line="+790"/>
+        <location line="+60"/>
+        <source>%1 - [%2]</source>
+        <translation>%1 - [%2]</translation>
+    </message>
+    <message>
+        <location line="-841"/>
+        <location line="+1059"/>
+        <source>Sh&amp;ade</source>
+        <translation>&amp;Navinout</translation>
+    </message>
+    <message>
+        <location line="-1076"/>
+        <source>&amp;Restore</source>
+        <translation>&amp;Obnovit</translation>
+    </message>
+    <message>
+        <location line="+1072"/>
+        <source>&amp;Unshade</source>
+        <translation>&amp;Odvinout</translation>
+    </message>
+    <message>
+        <location line="-1068"/>
+        <source>Mi&amp;nimize</source>
+        <translation>&amp;ZmenÅ¡it</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ma&amp;ximize</source>
+        <translation>ZvÄ&amp;tÅ¡it</translation>
+    </message>
+    <message>
+        <location line="-978"/>
+        <source>Restore Down</source>
+        <translation>Obnovit</translation>
+    </message>
+</context>
+<context>
+    <name>QXml</name>
+    <message>
+        <location filename="../src/xml/sax/qxml.cpp" line="+78"/>
+        <source>unparsed entity reference in wrong context</source>
+        <translation>pouÅŸÃ­vÃ¡n nevyhodnocenÃœ odkaz na entitu v nesprÃ¡vnÃ© souvislosti</translation>
+    </message>
+    <message>
+        <location line="-1"/>
+        <source>external parsed general entity reference not allowed in DTD</source>
+        <translation>v DTD nejsou dovoleny ÅŸÃ¡dnÃ© odkazy na vnÄjÅ¡Ã­ obecnou entitu</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>wrong value for standalone declaration</source>
+        <translation>nesprÃ¡vnÃ¡ hodnota pro samostatnÃ© prohlÃ¡Å¡enÃ­</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+        <translation>chybÄjÃ­cÃ­ prohlÃ¡Å¡enÃ­ kÃ³dovÃ¡nÃ­ nebo prohlÃ¡Å¡enÃ­ samostatnosti pÅi ÄtenÃ­ prohlÃ¡Å¡enÃ­ XML</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>no error occurred</source>
+        <translation>ÅŸÃ¡dnÃ¡ chyba</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>error occurred while parsing reference</source>
+        <translation>pÅi vyhodnocenÃ­ odkazu se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>standalone declaration expected while reading the XML declaration</source>
+        <translation>chybÄjÃ­cÃ­ prohlÃ¡Å¡enÃ­ samostatnosti pÅi ÄtenÃ­ prohlÃ¡Å¡enÃ­ XML</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>invalid name for processing instruction</source>
+        <translation>neplatnÃœ nÃ¡zev pro pokyn pro zpracovÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>error triggered by consumer</source>
+        <translation>chyba spuÅ¡tÄnÃ¡ spotÅebitelem</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>error occurred while parsing element</source>
+        <translation>pÅi vyhodnocenÃ­ prvku se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>unexpected character</source>
+        <translation>neoÄekÃ¡vanÃœ znak</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>tag mismatch</source>
+        <translation>ZnaÄky prvkÅ¯ nejsou vklÃ¡dÃ¡ny sprÃ¡vnÄ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing content</source>
+        <translation>pÅi vyhodnocenÃ­ obsahu se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>error occurred while parsing comment</source>
+        <translation>pÅi vyhodnocenÃ­ poznÃ¡mky se vyskytla chyba</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>internal general entity reference not allowed in DTD</source>
+        <translation>v DTD nejsou dovoleny ÅŸÃ¡dnÃ© odkazy na vnitÅnÃ­ obecnou entitu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>recursive entities</source>
+        <translation>rekurzivnÃ­ entity</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>more than one document type definition</source>
+        <translation>vÃ­ce definicÃ­ typu dokumentu</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>version expected while reading the XML declaration</source>
+        <translation>chybÄjÃ­cÃ­ verze pÅi ÄtenÃ­ prohlÃ¡Å¡enÃ­ XML</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>letter is expected</source>
+        <translation>na tomto mÃ­stÄ je potÅeba pÃ­smeno</translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>unexpected end of file</source>
+        <translation>neoÄekÃ¡vanÃœ konec souboru</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>external parsed general entity reference not allowed in attribute value</source>
+        <translation>v hodnotÄ vlastnosti nejsou dovoleny ÅŸÃ¡dnÃ© odkazy na vnÄjÅ¡Ã­ obecnou entitu</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>error in the text declaration of an external entity</source>
+        <translation>Chyba v prohlÃ¡Å¡enÃ­ textu vnÄjÅ¡Ã­ entity</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>error occurred while parsing document type definition</source>
+        <translation>pÅi vyhodnocenÃ­ definice typu dokumentu se vyskytla chyba</translation>
+    </message>
+</context>
+<context>
+    <name>QXmlStream</name>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+1800"/>
+        <source>Reference to unparsed entity &apos;%1&apos;.</source>
+        <translation>Odkaz na nevyhodnocenou entitu &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="+1752"/>
+        <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+        <translation>&apos;%1&apos; nenÃ­ platnÃœm znakem v Ãºdaji veÅejnÃ©ho id, kterÃœ je tvoÅen pÃ­smeny.</translation>
+    </message>
+    <message>
+        <location line="-160"/>
+        <location line="+12"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-109"/>
+        <location line="+53"/>
+        <source>Illegal namespace declaration.</source>
+        <translation>NeplatnÃ© prohlÃ¡Å¡enÃ­ jmennÃ©ho prostoru.</translation>
+    </message>
+    <message>
+        <location line="-613"/>
+        <source>Invalid XML character.</source>
+        <translation>NeplatnÃœ znak XML.</translation>
+    </message>
+    <message>
+        <location line="+1137"/>
+        <source>Expected character data.</source>
+        <translation>Byly oÄekÃ¡vÃ¡ny Ãºdaje o znacÃ­ch.</translation>
+    </message>
+    <message>
+        <location line="-300"/>
+        <source>Standalone accepts only yes or no.</source>
+        <translation>Hodnota pro samostatnou vlastnost mÅ¯ÅŸe bÃœt pouze &quot;ano&quot; nebo &quot;ne&quot;.</translation>
+    </message>
+    <message>
+        <location line="-48"/>
+        <source>Invalid XML version string.</source>
+        <translation>NeplatnÃœ Ãºdaj o verzi XML.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-217"/>
+        <source>Invalid processing instruction name.</source>
+        <translation>NÃ¡zev pokynu pro zpracovÃ¡nÃ­ je neplatnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-221"/>
+        <source>Namespace prefix &apos;%1&apos; not declared</source>
+        <translation>PÅedpona jmennÃ©ho prostoru &apos;%1&apos; nebyla prohlÃ¡Å¡ena</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+260"/>
+        <location line="+61"/>
+        <location line="+40"/>
+        <source>Entity &apos;%1&apos; not declared.</source>
+        <translation>Entita &apos;%1&apos; nenÃ­ prohlÃ¡Å¡ena.</translation>
+    </message>
+    <message>
+        <location line="-372"/>
+        <source>%1 is an invalid processing instruction name.</source>
+        <translation>%1 nenÃ­ platnÃœm nÃ¡zvem pokynu pro zpracovÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="+244"/>
+        <source>The standalone pseudo attribute must appear after the encoding.</source>
+        <translation>SamostatnÃ¡ pseudovlastnost musÃ­ nÃ¡sledovat bezprostÅednÄ po kÃ³dovÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="-553"/>
+        <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+        <translation>Sled znakÅ¯ &apos;]]&gt;&apos; nenÃ­ v obsahu povolen.</translation>
+    </message>
+    <message>
+        <location line="+555"/>
+        <source>%1 is an invalid encoding name.</source>
+        <translation>%1 nenÃ­ platnÃœm nÃ¡zvem pro kÃ³dovÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+94"/>
+        <source>, but got &apos;</source>
+        <translation>oÄekÃ¡vÃ¡no, namÃ­sto toho obdrÅŸeno &apos;</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-225"/>
+        <source>Start tag expected.</source>
+        <translation>OÄekÃ¡vÃ¡n otevÃ­rajÃ­cÃ­ prvek.</translation>
+    </message>
+    <message>
+        <location line="+611"/>
+        <source>Invalid character reference.</source>
+        <translation>Odkaz na neplatnÃœ znak.</translation>
+    </message>
+    <message>
+        <location line="-40"/>
+        <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+        <translation>V hodnotÄ vlastnosti byla odkazovÃ¡na entita &apos;%1&apos;.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-11"/>
+        <source>Expected </source>
+        <translation>Bylo </translation>
+    </message>
+    <message>
+        <location line="-40"/>
+        <source>Invalid document.</source>
+        <translation>NeplatnÃœ dokument.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-80"/>
+        <source>Opening and ending tag mismatch.</source>
+        <translation>PoÄet otevÃ­rajÃ­cÃ­ch prvkÅ¯ neodpovÃ­dÃ¡ neodpovÃ­dÃ¡ poÄtu zavÃ­rajÃ­cÃ­ch prvkÅ¯.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-319"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-703"/>
+        <source>Encountered incorrectly encoded content.</source>
+        <translation>Byl nalezen obsah s neplatnÃœm kÃ³dovÃ¡nÃ­m.</translation>
+    </message>
+    <message>
+        <location line="+301"/>
+        <source>Invalid attribute in XML declaration.</source>
+        <translation>ProhlÃ¡Å¡enÃ­ XML obsahuje neplatnou vlastnost.</translation>
+    </message>
+    <message>
+        <location line="-193"/>
+        <source>Attribute redefined.</source>
+        <translation>Vlastnost byla novÄ vymezena.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/>
+        <source>%1 is an invalid PUBLIC identifier.</source>
+        <translation>%1 nenÃ­ platnÃœm Ãºdajem VEÅEJNÃHO identifikÃ¡toru (id).</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-1026"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+129"/>
+        <source>Extra content at end of document.</source>
+        <translation>PÅebyteÄnÃœ obsah za koncem dokumentu.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-11"/>
+        <source>Invalid XML name.</source>
+        <translation>NeplatnÃœ nÃ¡zev XML.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="+1235"/>
+        <source>Premature end of document.</source>
+        <translation>PÅedÄasnÃœ konec dokumentu.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-246"/>
+        <source>XML declaration not at start of document.</source>
+        <translation>ProhlÃ¡Å¡enÃ­ XML se nenachÃ¡zÃ­ na zaÄÃ¡tku dokumentu.</translation>
+    </message>
+    <message>
+        <location line="-738"/>
+        <source>Recursive entity detected.</source>
+        <translation>Byla zjiÅ¡tÄna rekurzivnÃ­ entita.</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-64"/>
+        <source>Unsupported XML version.</source>
+        <translation>Tato verze XML nenÃ­ podporovÃ¡na.</translation>
+    </message>
+    <message>
+        <location line="+121"/>
+        <source>Unexpected &apos;</source>
+        <translation>Na tomto mÃ­stÄ neplatnÃœ &apos; </translation>
+    </message>
+    <message>
+        <location line="-1021"/>
+        <source>Invalid entity value.</source>
+        <translation>neplatnÃ¡ hodnota entity.</translation>
+    </message>
+    <message>
+        <location line="+930"/>
+        <source>Encoding %1 is unsupported</source>
+        <translation>KÃ³dovÃ¡nÃ­ %1 nenÃ­ podporovÃ¡no</translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+707"/>
+        <source>NDATA in parameter entity declaration.</source>
+        <translation>ParametrickÃ© prohlÃ¡Å¡enÃ­ entitynesmÃ­ obsahovat ÅŸÃ¡dnÃ© NDATA.</translation>
+    </message>
+</context>
+<context>
+    <name>QtXmlPatterns</name>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/>
+        <source>A comment cannot contain %1</source>
+        <translation>PoznÃ¡mka nesmÃ­ obsahovat %1</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+3726"/>
+        <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
+        <translation>Verze %1 nenÃ­ podporovÃ¡na. Podporovanou verzÃ­ XQuery je 1.0.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/>
+        <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
+        <translation>NadÅÃ­zenÃœ uzel druhÃ©ho agumentu funkce %1 musÃ­ bÃœt uzlem dokumentu, coÅŸ nenÃ­ pÅÃ­pad %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="+145"/>
+        <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
+        <translation>Nebyl zadÃ¡n ÅŸÃ¡dnÃœ odpovÃ­dajÃ­cÃ­ %2 pro potÅebnÃœ parametr %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+163"/>
+        <source>Namespace declarations must occur before function, variable, and option declarations.</source>
+        <translation>ProhlÃ¡Å¡enÃ­ jmennÃœch prostorÅ¯ musÃ­ stÃ¡t pÅed prohlÃ¡Å¡enÃ­mi funkcÃ­-, promÄnnÃœch- nebo prohlÃ¡Å¡enÃ­mi voleb.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/>
+        <source>empty</source>
+        <translation>prÃ¡zdnÃœ</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2895"/>
+        <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
+        <translation>JmennÃœ prostor-URI nesmÃ­ bÃœt prÃ¡zdnÃœ, kdyÅŸ je spojen s prefixem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+6"/>
+        <source>A comment cannot end with a %1.</source>
+        <translation>PoznÃ¡mka nesmÃ­ konÄit na %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+2437"/>
+        <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
+        <translation>ÃplnÄ nahoÅe stojÃ­cÃ­ prvky provÃ¡dÄcÃ­ho listu se nesmÃ­ nachÃ¡zet v nulovÃ©m jmennÃ©m prostoru, coÅŸ je pÅÃ­pad %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+65"/>
+        <source>Integer division (%1) by zero (%2) is undefined.</source>
+        <translation>CeloÄÃ­selnÃ© dÄlenÃ­ (%1) nulou (%2) nenÃ­ stanoveno.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+162"/>
+        <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
+        <translation>KnihovnÃ­ modul nemÅ¯ÅŸe bÃœt posouzen pÅÃ­mo, musÃ­ bÃœt zaveden z hlavnÃ­ho modulu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+187"/>
+        <source>Time %1:%2:%3.%4 is invalid.</source>
+        <translation>ÄasovÃœ Ãºdaj %1:%2:%3.%4 je neplatnÃœ.</translation>
+    </message>
+    <message>
+        <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source>
+        <translation type="obsolete">Prvek %2 mÅ¯ÅŸe mÃ­t pouze obvyklÃ© vlastnosti, ne vÅ¡ak %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+91"/>
+        <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
+        <translation>PoÄet mÃ­st hodnoty typu %1 musÃ­ bÃœt stejnÃœ. To nenÃ­ pÅÃ­pad %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+14"/>
+        <source>Modulus division (%1) by zero (%2) is undefined.</source>
+        <translation>DÄlenÃ­ absolutnÃ­ hodnoty (%1) nulou(%2) nenÃ­ stanoveno.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2987"/>
+        <source>No function with signature %1 is available</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ¡ funkce oznaÄenÃ¡ jako %1</translation>
+    </message>
+    <message>
+        <location line="+2154"/>
+        <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
+        <translation>MusÃ­ bÃœt pÅÃ­tomen zÃ¡loÅŸnÃ­ vÃœraz, neboÅ¥ nejsou podporovÃ¡ny ÅŸÃ¡dnÃ© vÄcnÃ© vÃœrazy</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+159"/>
+        <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
+        <translation>V nahrazenÃ­ mÅ¯ÅŸe bÃœt pouÅŸit pouze %1, aby se chrÃ¡nil sÃ¡m, nebo %2, ne vÅ¡ak pro %3</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="+378"/>
+        <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
+        <translation>KÃ³dovacÃ­ bod %1 z %2 s kÃ³dovÃ¡nÃ­m %3 nenÃ­ platnÃœm znakem XML.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/>
+        <source>Network timeout.</source>
+        <translation>ÄasovÃœ limit sÃ­Å¥ovÃ© operace byl pÅekroÄen.</translation>
+    </message>
+    <message>
+        <source>No casting is possible with %1 as the target type.</source>
+        <translation type="obsolete">Nelze provÃ¡dÄt ÅŸÃ¡dnÃ© vÃœbÄrovÃ© (&quot;cast&quot;) operace s typem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-1567"/>
+        <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
+        <translation>ProhlÃ¡Å¡enÃ­ %1 je nepÅÃ­pustnÃ©, protoÅŸe nenÃ­ podporovÃ¡no zavedenÃ­ schÃ©mat.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-1676"/>
+        <source>Attribute %1 and %2 are mutually exclusive.</source>
+        <translation>Vlastnosti %1 a %2 se vzÃ¡jemnÄ vyluÄujÃ­cÃ­.</translation>
+    </message>
+    <message>
+        <location line="-213"/>
+        <source>Parse error: %1</source>
+        <translation>Chyba vyhodnocenÃ­: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+86"/>
+        <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
+        <translation>Nelze zadat ÅŸÃ¡dnou pÅedponu, jestliÅŸe je prvnÃ­ argument prÃ¡zdnÃœ nebo je prÃ¡zdnÃœ ÅetÄzec znakÅ¯ (ÅŸÃ¡dnÃœ jmennÃœ prostor). Byla zadÃ¡na pÅedpona %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+497"/>
+        <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
+        <translation>V XSL-T vyhledÃ¡vacÃ­m vzoru musÃ­ bÃœt prvnÃ­ argument k funkci %1 pÅi pouÅŸitÃ­ k hledÃ¡nÃ­ odkaz tvoÅenÃœ pÃ­smeny nebo promÄnnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/>
+        <location line="+15"/>
+        <source>At least one component must be present.</source>
+        <translation>AlespoÅ jedna souÄÃ¡st musÃ­ bÃœt pÅÃ­tomna.</translation>
+    </message>
+    <message>
+        <source>In a namespace constructor, the value for a namespace value cannot be an empty string.</source>
+        <translation type="obsolete">Ve staviteli jmennÃ©ho prostoru nesmÃ­ mÃœt hodnota jmennÃ©ho prostoru prÃ¡zdnÃœm ÅetÄzcem.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+93"/>
+        <source>An attribute by name %1 has already been created.</source>
+        <translation>JiÅŸ byla vytvoÅena jedna vlastnost s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-204"/>
+        <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
+        <translation>JiÅŸ existuje jeden argument s nÃ¡zvem %1. NÃ¡zvy argumentÅ¯ musÃ­ bÃœt jednoznaÄnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+236"/>
+        <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
+        <translation>%1 nenÃ­ pro regulÃ©rnÃ­ vÃœrazy platnÃœm pÅÃ­znakem. PlatnÃœmi pÅÃ­znaky jsou:</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+673"/>
+        <source>At least one %1-element must occur inside %2.</source>
+        <translation>V %2 se musÃ­ vyskytovat alespoÅ jeden %1-prvek.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/>
+        <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
+        <translation>Je podporovÃ¡n pouze Unicode Codepoint Collation (%1). %2 nenÃ­ podporovÃ¡n.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="-134"/>
+        <source>Matches are case insensitive</source>
+        <translation>Na psanÃ­ velkÃœch/malÃœch pÃ­smen nenÃ­ brÃ¡n zÅetel</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+3057"/>
+        <source>The name of an extension expression must be in a namespace.</source>
+        <translation>NÃ¡zev vÃœrazu rozÅ¡Ã­ÅenÃ­ se musÃ­ nachÃ¡zet ve jmennÃ©m prostoru.</translation>
+    </message>
+    <message>
+        <location line="-1514"/>
+        <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
+        <translation>NÃ¡zvy parametrÅ¯ pÅedloh musÃ­ bÃœt jednoznaÄnÃ©, %1 jiÅŸ existuje.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-185"/>
+        <source>At least one mode must be specified in the %1-attribute on element %2.</source>
+        <translation>Ve %1-vlastnosti prvku %2 musÃ­ bÃœt zadÃ¡n alespoÅ jeden zpÅ¯sob.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="-10"/>
+        <source>%1 matches newline characters</source>
+        <translation>VÃœraz &apos;%1&apos; odpovÃ­dÃ¡ znakÅ¯m pro novÃœ ÅÃ¡dek</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="-107"/>
+        <source>Year %1 is invalid because it begins with %2.</source>
+        <translation>%1 nenÃ­ platnÃœm Ãºdajem pro rok, protoÅŸe zaÄÃ­nÃ¡ %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+285"/>
+        <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+        <translation>DruhÃœ argument %1 nemÅ¯ÅŸe bÃœt typ %2. MusÃ­ to bÃœt typ %3, %4 nebo %5.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+651"/>
+        <source>Element %1 cannot have children.</source>
+        <translation>Prvek %1 nemÅ¯ÅŸe mÃ­t podprvky.</translation>
+    </message>
+    <message>
+        <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source>
+        <translation type="obsolete">Prvek %2 mÅ¯ÅŸe mÃ­t jen vlastnost %3 nebo vlastnosti, kterÃ© jsou obvyklÃ©, ne vÅ¡ak %1.</translation>
+    </message>
+    <message>
+        <location line="-497"/>
+        <source>Only one %1-element can appear.</source>
+        <translation>MÅ¯ÅŸe bÃœt jen jeden jedinÃœ %1-prvek.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="+75"/>
+        <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
+        <translation>NÃ¡zev poÄÃ­tanÃ© vlastnosti nesmÃ­ mÃ­t jmennÃœ prostor-URI %1 s mÃ­stnÃ­m nÃ¡zvem %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="+138"/>
+        <source>A positional predicate must evaluate to a single numeric value.</source>
+        <translation>PoziÄnÃ­ pÅÃ­sudek se musÃ­ vyhodnotit jako jednoduchÃ¡, ÄÃ­selnÃ¡ hodnota.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/>
+        <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
+        <translation>Prvek %1 nemÅ¯ÅŸe bÃœt vydÃ¡vÃ¡n na pokraÄovÃ¡nÃ­, protoÅŸe se objevuje mimo prvky dokumentu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+4"/>
+        <source>%1 and %2 match the start and end of a line.</source>
+        <translation>VÃœrazy %1 a %2 vÅŸdy odpovÃ­dajÃ­ zaÄÃ¡tku nebo konci libovolnÃ©ho ÅÃ¡dku.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-560"/>
+        <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
+        <translation>Je zpracovÃ¡vÃ¡n jeden XSL-T 1.0 stylovÃœ list jednÃ­m procesorem verze 2.0.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-1667"/>
+        <source>A stylesheet function must have a prefixed name.</source>
+        <translation>NÃ¡zev funkce stylovÃ©ho listu musÃ­ mÃ­t pÅedponu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+279"/>
+        <source>%1 cannot be retrieved</source>
+        <translation>%1 nelze urÄit</translation>
+    </message>
+    <message>
+        <source>It&apos;s not possible to cast the value %1 of type %2 to %3</source>
+        <translation type="obsolete">Nelze provÃ©st operaci pÅedvedenÃ­ hodnoty %1 typu %2 k %3</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-20"/>
+        <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
+        <translation>Hodnota XSL-T vlastnosti verze musÃ­ bÃœt hodnotou typu %1, coÅŸ nenÃ­ pÅÃ­pad %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/>
+        <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
+        <translation>Ve staviteli jmennÃ©ho prostoru nesmÃ­ mÃœt hodnota jmennÃ©ho prostoru prÃ¡zdnÃœm ÅetÄzcem.</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>The prefix %1 cannot be bound.</source>
+        <translation>PÅedponu %1 nelze spojit.</translation>
+    </message>
+    <message>
+        <location line="-14"/>
+        <source>The prefix must be a valid %1, which %2 is not.</source>
+        <translation>PÅedpona musÃ­ bÃœt platnÃœ %1, coÅŸ nenÃ­ pÅÃ­pad %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-551"/>
+        <source>The keyword %1 cannot occur with any other mode name.</source>
+        <translation>KlÃ­ÄovÃ© slovo %1 se nemÅ¯ÅŸe pouÅŸÃ­vat dohromady s jinÃœm nÃ¡zvem zpÅ¯sobu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+88"/>
+        <source>Type error in cast, expected %1, received %2.</source>
+        <translation>Chyba psanÃ­ u operace pÅedvedenÃ­, bylo oÄekÃ¡vÃ¡no %1, ale pÅijato %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3555"/>
+        <source>%1 is not a valid numeric literal.</source>
+        <translation>%1 nenÃ­ platnÃœ ÄÃ­selnÃœ Ãºdaj tvoÅenÃœ pÃ­smeny.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/>
+        <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
+        <translation>
+            <numerusform>%1 mÃ¡ jen %n argument; Ãºdaj %2 z tohoto dÅ¯vodu neplatnÃœ.</numerusform>
+            <numerusform>%1 mÃ¡ jen %n argumenty; Ãºdaj %2 z tohoto dÅ¯vodu neplatnÃœ.</numerusform>
+            <numerusform>%1 mÃ¡ jen %n argumenty; Ãºdaj %2 z tohoto dÅ¯vodu neplatnÃœ.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <source>Circularity detected</source>
+        <translation type="obsolete">byla zjiÅ¡tÄna cirkulÃ¡rnÃ­ zÃ¡vislost</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+3971"/>
+        <source>A variable by name %1 has already been declared.</source>
+        <translation>PromÄnnÃ¡ s nÃ¡zvem %1 jiÅŸ byla prohlÃ¡Å¡ena.</translation>
+    </message>
+    <message>
+        <location line="-312"/>
+        <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source>
+        <translation>PÅedpona %1 nemÅ¯ÅŸe bÃœt spojena. Ve vÃœchozÃ­m nastavenÃ­ je jiÅŸ spojena se jmennÃœm prostorem %2.</translation>
+    </message>
+    <message>
+        <source>An %1-attribute must have a valid %2 as value, which %3 isn&apos;t.</source>
+        <translation type="obsolete">Vlastnost s nÃ¡zvem %1 musÃ­ mÃ­t platnou %2-hodnotu. %3 nenÃ­ platnou hodnotou.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+389"/>
+        <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
+        <translation>Prvek %1 nesmÃ­ mÃ­t vlastnost %3 nebo %4, pokud nemÃ¡ vlastnost %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+511"/>
+        <source>A function already exists with the signature %1.</source>
+        <translation>JiÅŸ existuje funkce s podpisem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/>
+        <source>When casting to %1 from %2, the source value cannot be %3.</source>
+        <translation>U operace pÅedvedenÃ­ z %1 do %2 nesmÃ­ bÃœt zdrojovÃ¡ hodnota %3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+60"/>
+        <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
+        <translation>Vlastnost %1 nemÅ¯ÅŸe bÃœt vydÃ¡vÃ¡n na pokraÄovÃ¡nÃ­, protoÅŸe se objevuje na nejvyÅ¡Å¡Ã­ rovinÄ.</translation>
+    </message>
+    <message>
+        <source>No comparisons can be done involving the type %1.</source>
+        <translation type="obsolete">S typem %1 nemohou bÃœt provÃ¡dÄny ÅŸÃ¡dnÃ© srovnÃ¡vacÃ­ operace.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-160"/>
+        <source>No value is available for the external variable by name %1.</source>
+        <translation>Pro vnÄjÅ¡Ã­ promÄnnou s nÃ¡zvem %1 nenÃ­ dostupnÃ¡ ÅŸÃ¡dnÃ¡ hodnota.</translation>
+    </message>
+    <message>
+        <location line="-426"/>
+        <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
+        <translation>Hodnota vlastnosti %1 musÃ­ bÃœt typu %2. %3 nenÃ­ platnou hodnotou.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/>
+        <source>The item %1 did not match the required type %2.</source>
+        <translation>Prvek %1 neodpovÃ­dÃ¡ poÅŸadovanÃ©mu typu %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+1122"/>
+        <source>Element %1 cannot have a sequence constructor.</source>
+        <translation>Prvek %1 nemÅ¯ÅŸe mÃ­t stavitele posloupnosti.</translation>
+    </message>
+    <message>
+        <location line="-842"/>
+        <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
+        <translation>Nelze pouÅŸÃ­vat ÅŸÃ¡dnÃ©ho stavitele posloupnosti, kdyÅŸ %2 mÃ¡ vlastnost %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+6"/>
+        <source>one or more</source>
+        <translation>jeden nebo vÃ­ce</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-289"/>
+        <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
+        <translation>KÃ³dovÃ¡nÃ­ %1 je neplatnÃ©; smÃ­ sestÃ¡vat pouze z latinskÃœch pÃ­smen a musÃ­ odpovÃ­dat pravidelnÃ©u vÃœrazu %2.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+11"/>
+        <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
+        <translation>
+            <numerusform>%1 vyÅŸaduje alespoÅ %n argument; Ãºdaj %2 je z toho dÅ¯vodu neplatnÃœ.</numerusform>
+            <numerusform>%1 vyÅŸaduje alespoÅ %n argumenty; Ãºdaj %2 je z toho dÅ¯vodu neplatnÃœ.</numerusform>
+            <numerusform>%1 vyÅŸaduje alespoÅ %n argumenty; Ãºdaj %2 je z toho dÅ¯vodu neplatnÃœ.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/>
+        <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source>
+        <translation>%2 nenÃ­ platnÃœm cÃ­lovÃœm nÃ¡zvem pokynu pro zpracovÃ¡nÃ­, protoÅŸe tento nesmÃ­ bÃœt %1 (nehledÄ na psanÃ­ velkÃœch/malÃœch pÃ­smen).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+156"/>
+        <source>The focus is undefined.</source>
+        <translation>NenÃ­ stanoveno ohnisko.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3390"/>
+        <location line="+7323"/>
+        <source>%1 is an unknown schema type.</source>
+        <translation>%1 je neznÃ¡mÃœm typem schematu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+1206"/>
+        <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
+        <translation>Hodnota vlastnosti %1 prvku %2 mÅ¯ÅŸe bÃœt jen %3 nebo %4, ne vÅ¡ak %5.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="-26"/>
+        <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
+        <translation>V nahrazovacÃ­m ÅetÄzci musÃ­ po %1 nÃ¡sledovat alespoÅ jedna ÄÃ­slice, kdyÅŸ nenÃ­ chrÃ¡nÄn znakem Escape.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2712"/>
+        <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
+        <translation>V XSL-T vyhledÃ¡vacÃ­m vzoru se smÄjÃ­ pouÅŸÃ­vat jen osy %2 nebo %3, ne vÅ¡ak %1.</translation>
+    </message>
+    <message>
+        <location line="-401"/>
+        <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+        <translation>JmennÃœ prostor uÅŸivatelem stanovenÃ© funkce nesmÃ­ bÃœt prÃ¡zdnÃœ (pro tento ÃºÄel je pÅedstanovenÃ¡ pÅedpona %1)</translation>
+    </message>
+    <message>
+        <source>The first operand in an integer division, %1, cannot be infinity (%2).</source>
+        <translation type="obsolete">PrvnÃ­ veliÄina, operand, celoÄÃ­selnÃ©ho dÄlenÃ­ %1 nesmÃ­ bÃœt nekoneÄno (%2).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/>
+        <source>%1 is not a valid value of type %2.</source>
+        <translation>%1 nenÃ­ platnou hodnotou typu %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+166"/>
+        <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
+        <translation>NÃ¡sobenÃ­ hodnoty typu %1 s %2 nebo %3 (kladnÃ© nebo zÃ¡pornÃ© nekoneÄno) nenÃ­ pÅÃ­pustnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/>
+        <source>The variable %1 is unused</source>
+        <translation>PromÄnnÃ¡ %1 se nepouÅŸÃ­vÃ¡</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+1787"/>
+        <source>The %1-axis is unsupported in XQuery</source>
+        <translation>Osa %1 nenÃ­ v XQuery podporovÃ¡na</translation>
+    </message>
+    <message>
+        <location line="+644"/>
+        <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
+        <translation>Byl nalezen chybnÃœ stavitel pÅÃ­mÃ©ho prvku. %1 konÄÃ­ %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="-32"/>
+        <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
+        <translation>DÄlenÃ­ hodnoty typu %1 prostÅednictvÃ­m %2 nebo %3 (kladnÃ¡ nebo zÃ¡pornÃ¡ nula) nenÃ­ pÅÃ­pustnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+20"/>
+        <source>Attribute %1 cannot have the value %2.</source>
+        <translation>Vlastnost %1 nesmÃ­ mÃ­t hodnotu %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/>
+        <source>It will not be possible to retrieve %1.</source>
+        <translation>%1 nelze urÄit.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2103"/>
+        <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
+        <translation>V XSL-T vyhledÃ¡vacÃ­m vzoru nesmÃ­ mÃ­t funkce %1 tÅetÃ­ argument.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="-9"/>
+        <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
+        <translation>URI jmennÃ©ho prostoru v nÃ¡zvu vypoÄÃ­tanÃ© vlastnosti nesmÃ­ bÃœt %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+24"/>
+        <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
+        <translation>%1 nenÃ­ platnÃœm cÃ­lovÃœm nÃ¡zvem pokynu pro zpracovÃ¡nÃ­. MusÃ­ to bÃœt hodnota %2 jakou je napÅÃ­klad %3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2571"/>
+        <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
+        <translation>%1 je sloÅŸenÃœm typem. Operace pÅedvedenÃ­ u sloÅŸenÃœch typÅ¯ nenÃ­ moÅŸnÃ¡. Mohou se ovÅ¡em provÃ¡dÄt operace obsazenÃ­ u atomÃ¡rnÃ­ch typÅ¯ jako %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="-4"/>
+        <source>zero or one</source>
+        <translation>ÅŸÃ¡dnÃœ nebo jeden</translation>
+    </message>
+    <message>
+        <source>No operand in an integer division, %1, can be %2.</source>
+        <translation type="obsolete">U celoÄÃ­selnÃ©ho dÄlenÃ­ %1 nesmÃ­ bÃœt veliÄina, operand, %2.</translation>
+    </message>
+    <message>
+        <source>The element with local name %1 does not exist in XSL-T.</source>
+        <translation type="obsolete">V XSL-T neexistuje ÅŸÃ¡dnÃœ prvek s mÃ­stnÃ­m nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-634"/>
+        <source>Two namespace declaration attributes have the same name: %1.</source>
+        <translation>Byly nalezeny dvÄ vlastnosti prohlÃ¡Å¡enÃ­ jmennÃ©ho prostoru se stejnÃœm nÃ¡zvem (%1).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/>
+        <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
+        <translation>SkuteÄnÃ¡ BooleanskÃ¡ hodnota nemÅ¯ÅŸe bÃœt vypoÄÃ­tÃ¡na pro posloupnost ze dvou nebo vÃ­ce atomÃ¡rnÃ­ch hodnot.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+168"/>
+        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="-17"/>
+        <source>%1 is an invalid %2</source>
+        <translation>%1 je neplatnÃœ %2</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="-165"/>
+        <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
+        <translation>PrvnÃ­ argument k %1 nesmÃ­ bÃœt typu %2; musÃ­ to bÃœt ÄÃ­selnÃœ typ, xs:yearMonthDuration nebo xs:dayTimeDuration.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="-141"/>
+        <source>Division (%1) by zero (%2) is undefined.</source>
+        <translation>DÄlenÃ­ (%1) nulou (%2) nenÃ­ stanoveno.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+40"/>
+        <source>No template by name %1 exists.</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ¡ pÅedloha s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <source>The attribute %1 must appear on element %2.</source>
+        <translation type="obsolete">Prvek %2 musÃ­ mÃ­t vlastnost %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+105"/>
+        <source>An attribute by name %1 has already appeared on this element.</source>
+        <translation>Prvek mÃ¡ jiÅŸ vlastnost s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="-13"/>
+        <source>The default collection is undefined</source>
+        <translation>Pro sbÃ­rku nenÃ­ stanovena ÅŸÃ¡dnÃ¡ pÅedloha</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+24"/>
+        <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
+        <translation>S %2 mÅ¯ÅŸe bÃœt spojena pouze pÅedpona %1 (a obrÃ¡cenÄ).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/>
+        <source>Value %1 of type %2 exceeds maximum (%3).</source>
+        <translation>Hodnota %1 typu %2 pÅekraÄuje maximum (%3).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+10"/>
+        <source>Whitespace characters are removed, except when they appear in character classes</source>
+        <translation>PrÃ¡zdnÃ© znaky jsou odstranÄny v pÅÃ­padÄ, ÅŸe se neobjevÃ­ ve znakovÃœch tÅÃ­dÃ¡ch</translation>
+    </message>
+    <message>
+        <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source>
+        <translation type="obsolete">Nemohou se provÃ¡dÄt ÅŸÃ¡dnÃ© operace pÅedvedenÃ­ k typu %1, protoÅŸe je to abstraktnÃ­ typ ist a nelze je doloÅŸit pÅÃ­kladem.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+207"/>
+        <source>Operator %1 cannot be used on type %2.</source>
+        <translation>OperÃ¡tor %1 nelze pouÅŸÃ­t na typ %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2361"/>
+        <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
+        <translation>JmennÃœ prostor %1 je vyhrazen a z toho dÅ¯vodu jej nemohou pouÅŸÃ­vat uÅŸivatelem stanovenÃ© funkce (pro tento ÃºÄel je tu pÅedstanovenÃ¡ pÅedpona %2).</translation>
+    </message>
+    <message>
+        <location line="-174"/>
+        <source>The target namespace of a %1 cannot be empty.</source>
+        <translation>CÃ­lovÃœ jmennÃœ prostor %1 nesmÃ­ bÃœt prÃ¡zdnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="-39"/>
+        <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
+        <translation>Po %1 musÃ­ nÃ¡sledovat %2 nebo %3; nesmÃ­ se objevit na konci nahrazovacÃ­ho ÅetÄzce.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2394"/>
+        <source>%1 is an invalid namespace URI.</source>
+        <translation>%1 nenÃ­ platnÃœm jmennÃœm prostorem-URI.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-298"/>
+        <location line="+9"/>
+        <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
+        <translation>%2 nesmÃ­ mÃ­t vlastnost %1 v pÅÃ­padÄ, ÅŸe je potomkem %3.</translation>
+    </message>
+    <message>
+        <location line="+347"/>
+        <source>The attribute %1 can only appear on the first %2 element.</source>
+        <translation>Pouze prvnÃ­ %2-prvek smÃ­ mÃ­t vlastnost %1.</translation>
+    </message>
+    <message>
+        <location line="-1271"/>
+        <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
+        <translation>Prvek %1 musÃ­ mÃ­t buÄ jednu %2-vlastnost nebo se musÃ­ pouÅŸÃ­vat stavitel posloupnosti.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2891"/>
+        <source>Module imports must occur before function, variable, and option declarations.</source>
+        <translation>ZavedenÃ­ modulÅ¯ musÃ­ nastat pÅed prohlÃ¡Å¡enÃ­mi funkcÃ­, promÄnnÃœch a voleb.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+19"/>
+        <source>Day %1 is outside the range %2..%3.</source>
+        <translation>Ãdaj dne %1 je mimo rozsah %2..%3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="-18"/>
+        <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
+        <translation>%1 obsahuje oktety, kterÃ© v kÃ³dovÃ¡nÃ­ %2 nejsou pÅÃ­pustnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+125"/>
+        <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
+        <translation>VÃœchozÃ­ hodnota poÅŸadovanÃ©ho parametru nemÅ¯ÅŸe bÃœt zadÃ¡na ani prostÅednictvÃ­m %1-vlastnosti ani pÅes stavitele posloupnosti.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+967"/>
+        <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
+        <translation>V XSL-T vyhledÃ¡vacÃ­m vzoru musÃ­ bÃœt prvnÃ­ argument k funkci %1 pÅi pouÅŸitÃ­ k hledÃ¡nÃ­ ÅetÄzec tvoÅenÃœ pÃ­smeny.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-889"/>
+        <source>Text nodes are not allowed at this location.</source>
+        <translation>Na tomto mÃ­stÄ nesmÃ­ stÃ¡t ÅŸÃ¡dnÃ© textovÃ© uzly.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="-32"/>
+        <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
+        <translation>Hodnoty typu %1 nesmÃ­ Ãœt pÅÃ­sudkem. Pro pÅÃ­sudky jsou pÅÃ­pustnÃ© pouze typ ÄÃ­selnÃœ nebo ÃºÄinnÃœ booleÃ¡nskÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2679"/>
+        <source>%1 is not a valid name for a processing-instruction.</source>
+        <translation>%1 nenÃ­ platnÃœm nÃ¡zvem pokynu pro zpracovÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/>
+        <source>%1 was called.</source>
+        <translation>%1 byl volÃ¡n.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="-7"/>
+        <source>It&apos;s not possible to add attributes after any other kind of node.</source>
+        <translation>Vlastnosti nesmÃ­ nÃ¡sledovat za jinÃœmi druhy uzlÅ¯.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+655"/>
+        <source>At least one %1-element must occur before %2.</source>
+        <translation>PÅed %2 musÃ­ stÃ¡t alespoÅ jeden %1-prvek.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/>
+        <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
+        <translation>Tato forma normalizovÃ¡nÃ­ %1 nenÃ­ podporovÃ¡na. PodporovanÃœmi formami normalizovÃ¡nÃ­ jsou %2, %3, %4 a %5, a &quot;ÅŸÃ¡dnÃœ&quot; (prÃ¡zdnÃœ znakovÃœ ÅetÄzec zastupuje &quot;ÅŸÃ¡dnÃ© normalizovÃ¡nÃ­&quot;).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+29"/>
+        <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
+        <translation>U operace pÅedstavenÃ­ k typu %1 nebo odvozenÃœch typÅ¯ musÃ­ bÃœt zdrojovou hodnotou ÅetÄzec znakÅ¯ tvoÅenÃœ pÃ­smeny nebo hodnota stejnÃ©ho typu. Typ %2 je neplatnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+1048"/>
+        <source>A parameter in a function cannot be declared to be a tunnel.</source>
+        <translation>Parameter funkce nelze prohlÃ¡sit za tunel.</translation>
+    </message>
+    <message>
+        <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source>
+        <translation type="obsolete">XSL-T vlastnosti XSL-T prvku musÃ­ bÃœt v nulovÃ©m jmennÃ©m prostoru, nikoli v XSL-T jmennÃ©m prostoru, jako %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2963"/>
+        <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
+        <translation>JmennÃœ prostor uÅŸivatelem stanovenÃ© funkce v modulu knihovny musÃ­ odpovÃ­dat jmennÃ©mu prostoru modulu (JinÃœmi slovy by mÄl bÃœt %1 namÃ­sto %2) </translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+26"/>
+        <source>Day %1 is invalid for month %2.</source>
+        <translation>Çdaj o dni %1 je neplatnÃœm pro mÄsÃ­c %2.</translation>
+    </message>
+    <message>
+        <location line="-9"/>
+        <source>Overflow: Can&apos;t represent date %1.</source>
+        <translation>Nelze pÅedstavit datum %1 (PÅeteÄenÃ­).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-1304"/>
+        <source>In a simplified stylesheet module, attribute %1 must be present.</source>
+        <translation>Ve zjednoduÅ¡enÃ©m modulu stylovÃ©ho listu musÃ­ bÃœt pÅÃ­tomna vlastnost %1.</translation>
+    </message>
+    <message>
+        <location line="-189"/>
+        <source>Unknown XSL-T attribute %1.</source>
+        <translation>NeznÃ¡mÃ¡ XSL-T vlastnost: %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-483"/>
+        <source>It is not possible to redeclare prefix %1.</source>
+        <translation>PÅedponu %1 nelze prohlÃ¡sit.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+2"/>
+        <source>exactly one</source>
+        <translation>pÅesnÄ jeden</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+100"/>
+        <source>%1 is an invalid regular expression pattern: %2</source>
+        <translation>%1 nenÃ­ platnÃœm pravidelnÃœm vÃœrazem: %2</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-219"/>
+        <source>Element %1 is not allowed at this location.</source>
+        <translation>Prvek %1 nesmÃ­ stÃ¡t na tomto mÃ­stÄ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+1811"/>
+        <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
+        <translation>%1-vÃœrazy se nemohou pouÅŸÃ­vat, protoÅŸe funkce prohlÃ¡Å¡enÃ­ schÃ©matu platnÃœm nenÃ­ podporovÃ¡na.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+2143"/>
+        <source>At least one %1 element must appear as child of %2.</source>
+        <translation>AlespoÅ jeden %1-prvek musÃ­ bÃœt potomkem %2.</translation>
+    </message>
+    <message>
+        <location line="-282"/>
+        <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
+        <translation>%1 se nemÅ¯ÅŸe pouÅŸÃ­vat, protoÅŸe tento procesor nepodporuje ÅŸÃ¡dnÃ© schÃ©ma.</translation>
+    </message>
+    <message>
+        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source>
+        <translation type="obsolete">Prvek %2 mÅ¯ÅŸe mÃ­t jen %3 nebo obvyklÃ© vlastnosti, ne vÅ¡ak %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+129"/>
+        <location line="+32"/>
+        <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
+        <translation>DÄlenÃ­ hodnoty typu %1 prostÅednictvÃ­m %2 (nenÃ­ ÄÃ­selnou hodnotou) nenÃ­ pÅÃ­pustnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/>
+        <source>Required cardinality is %1; got cardinality %2.</source>
+        <translation>PoÅŸadovanÃ© kardinÃ¡lnÃ­ ÄÃ­slo (mohutnost mnoÅŸiny) je %1 (v souÄasnosti %2).</translation>
+    </message>
+    <message>
+        <source>A construct was encountered which only is allowed in XQuery.</source>
+        <translation type="obsolete">Tento vÃœtvor je pÅÃ­pustnÃœ pouze v XQuery.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+771"/>
+        <source>No function by name %1 is available.</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ¡ funkce s nÃ¡zvem %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qunparsedtextfn.cpp" line="+65"/>
+        <source>The URI cannot have a fragment</source>
+        <translation>URI nesmÃ­ obsahovat kousek</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+788"/>
+        <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
+        <translation>%1 nenÃ­ atomÃ¡rnÃ­m typem. Operace pÅedstavenÃ­ se dajÃ­ provÃ¡dÄt pouze s atomÃ¡rnÃ­mi typy.</translation>
+    </message>
+    <message>
+        <source>The first argument to %1 cannot be of type %2.</source>
+        <translation type="obsolete">PrvnÃ­ argument %1 nemÅ¯ÅŸe bÃœt typu %2.</translation>
+    </message>
+    <message>
+        <location line="-554"/>
+        <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
+        <translation>JmennÃœ prostor-URI musÃ­ bÃœt konstantou a nesmÃ­ pouÅŸÃ­vat vloÅŸenÃ© vÃœrazy.</translation>
+    </message>
+    <message>
+        <location line="-2798"/>
+        <source>Prefix %1 is already declared in the prolog.</source>
+        <translation>PÅedpona %1 byla prohlÃ¡Å¡ena jiÅŸ v pÅedmluvÄ (prologu).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qapplytemplate.cpp" line="+119"/>
+        <source>Ambiguous rule match.</source>
+        <translation>VÃ­ceznaÄnÃ© pravidlo.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="-49"/>
+        <source>Promoting %1 to %2 may cause loss of precision.</source>
+        <translation>PostoupenÃ­ od %1 k %2 mÅ¯ÅŸe vÃ©st ke ztrÃ¡tÄ pÅesnosti.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+782"/>
+        <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
+        <translation>V XSL-T vyhledÃ¡vacÃ­m vzoru se smÄjÃ­ pro srovnÃ¡vÃ¡nÃ­ pouÅŸÃ­vat jen funkce %1 a %2, ne vÅ¡ak %3.</translation>
+    </message>
+    <message>
+        <location line="-1031"/>
+        <location line="+10"/>
+        <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
+        <translation>ProhlÃ¡Å¡enÃ­ vÃœchozÃ­ch jmennÃœch prostorÅ¯ musÃ­ stÃ¡t pÅed prohlÃ¡Å¡enÃ­mi funkcÃ­-, promÄnnÃœch- nebo prohlÃ¡Å¡enÃ­mi voleb.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+17"/>
+        <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
+        <translation>OperÃ¡tor %1 se nemÅ¯ÅŸe pouÅŸÃ­vat u atomÃ¡rnÃ­ch hodnot typÅ¯ %2 a %3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+526"/>
+        <source>The module import feature is not supported</source>
+        <translation>Funkce zavedenÃ­ modulu nenÃ­ podporovÃ¡na</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="-71"/>
+        <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃœ odpovÃ­dajÃ­cÃ­ %2 pro pÅedanÃœ parameter %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicvalue.cpp" line="+79"/>
+        <source>A value of type %1 cannot have an Effective Boolean Value.</source>
+        <translation>Hodnota typu %1 nemÅ¯ÅŸe mÃ­t ÅŸÃ¡dnou ÃºÄinnou booleÃ¡nskou hodnotu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/>
+        <source>The data of a processing instruction cannot contain the string %1</source>
+        <translation>Data pokynu pro zpracovÃ¡nÃ­ nesmÃ­ obsahovat ÅetÄzec znakÅ¯ %1</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+58"/>
+        <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
+        <translation>ÄasovÃœ Ãºdaj 24:%1:%2.%3 je neplatnÃœ. U hodinovÃ©ho Ãºdaje je 24, ale minuty, sekundy a milisekundy musÃ­ bÃœt vÅ¡echny 0; </translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3984"/>
+        <source>A template by name %1 has already been declared.</source>
+        <translation>PÅedloha s nÃ¡zvem %1 uÅŸ byla prohlÃ¡Å¡ena.</translation>
+    </message>
+    <message>
+        <location line="+6376"/>
+        <source>It is not possible to bind to the prefix %1</source>
+        <translation>PÅedponu %1 nelze spojit</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+9"/>
+        <source>Value %1 of type %2 is below minimum (%3).</source>
+        <translation>Hodnota %1 typu %2 zÅ¯stÃ¡vÃ¡ pod minimem (%3).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="-44"/>
+        <source>Required type is %1, but %2 was found.</source>
+        <translation>PoÅŸadovanÃœ typ je %1, byl ale zadÃ¡n %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="-16"/>
+        <source>%1 is an unsupported encoding.</source>
+        <translation>KÃ³dovÃ¡nÃ­ %1 nenÃ­ podporovÃ¡no.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-2584"/>
+        <source>The name of an option must have a prefix. There is no default namespace for options.</source>
+        <translation>NÃ¡zev volby musÃ­ mÃ­t pÅedponu. Pro volby nenÃ­ ÅŸÃ¡dnÃ¡ pÅedloha pro jmennÃœ prostor.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-1221"/>
+        <source>Element %1 must come last.</source>
+        <translation>Prvek %1 musÃ­ stÃ¡t jako poslednÃ­.</translation>
+    </message>
+    <message>
+        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source>
+        <translation type="obsolete">Prvek %2 mÅ¯ÅŸe mÃ­t jen vlastnost %3, %4 nebo vlastnosti, kterÃ© jsou obvyklÃ©, ne vÅ¡ak %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="-12"/>
+        <source>No namespace binding exists for the prefix %1 in %2</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ© svÃ¡zÃ¡nÃ­ jmennÃ©ho prostoru pro pÅedponu %1 v %2</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+3238"/>
+        <source>The name %1 does not refer to any schema type.</source>
+        <translation>NÃ¡zev %1 nemÃ¡ ÅŸÃ¡dnou spojitost s jakÃœmkoli typem schÃ©matu.</translation>
+    </message>
+    <message>
+        <location line="-639"/>
+        <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+        <translation>PÅedponu %1 lze spojit pouze s %2. Toto je prohlÃ¡Å¡eno jiÅŸ dopÅedu..</translation>
+    </message>
+    <message>
+        <location line="-6517"/>
+        <source>W3C XML Schema identity constraint selector</source>
+        <translation>PÅepÃ­naÄ omezenÃ­ totoÅŸnosti W3C XML schÃ©ma</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>W3C XML Schema identity constraint field</source>
+        <translation>Pole omezenÃ­ totoÅŸnosti W3C XML schÃ©ma</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>A construct was encountered which is disallowed in the current language(%1).</source>
+        <translation>Narazilo se na vÃœtvor, kterÃœ v nynÄjÅ¡Ã­m jazyce nenÃ­ povolen (%1).</translation>
+    </message>
+    <message>
+        <location line="+520"/>
+        <source>The initialization of variable %1 depends on itself</source>
+        <translation>Inicializace promÄnnÃ© %1 je zÃ¡vislÃ¡ na jejÃ­ vlastnÃ­ hodnotÄ</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qdocumentcontentvalidator.cpp" line="+86"/>
+        <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
+        <translation>Uzel vlastnosti se nesmÃ­ objevit jako potomek uzlu dokumentu. Objevil se uzel vlastnosti s nÃ¡zvem %1, kterÃœ je proto nevhodnÃœ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="-68"/>
+        <source>Month %1 is outside the range %2..%3.</source>
+        <translation>Ãdaj o mÄsÃ­ci %1 je mimo rozsah %2..%3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+4311"/>
+        <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
+        <translation>NÃ¡zev promÄnnÃ© Ãºzce spojenÃ© s pro-vÃœrazem se musÃ­ liÅ¡it od poziÄnÃ­ promÄnnÃ©. DvÄ promÄnnÃ© s nÃ¡zvem %1 se z tohoto dÅ¯vodu stÅetÃ¡vajÃ­.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/>
+        <source>No namespace binding exists for the prefix %1</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ© svÃ¡zÃ¡nÃ­ jmennÃ©ho prostoru pro pÅedponu %1</translation>
+    </message>
+    <message>
+        <source>An %1-attribute with value %2 has already been declared.</source>
+        <translation type="obsolete">Prvek mÃ¡ jiÅŸ jednu vlastnost s nÃ¡zvem %1 s hodnotou %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+19"/>
+        <source>%1 is not valid as a value of type %2.</source>
+        <translation>%1 nenÃ­ platnÃœ jako hodnota typu %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+4"/>
+        <source>zero or more</source>
+        <translation>ÅŸÃ¡dnÃœ nebo vÃ­ce</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2482"/>
+        <location line="+71"/>
+        <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
+        <translation>%1 se nenachÃ¡zÃ­ v oblasti pod prohlÃ¡Å¡enÃ­m vlastnostÃ­. VÅ¡imnÄte si, ÅŸe funkce zavedenÃ­ schÃ©matu nenÃ­ podporovÃ¡na.</translation>
+    </message>
+    <message>
+        <location line="-2830"/>
+        <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
+        <translation>PÅi pouÅŸitÃ­ funkce %1 k vyhodnocovÃ¡nÃ­ uvnitÅ vyhledÃ¡vacÃ­ho vzoru musÃ­ bÃœt argumentem odkaz na promÄnnou nebo ÅetÄzec tvoÅenÃœ pÃ­smeny.</translation>
+    </message>
+    <message>
+        <location line="+233"/>
+        <source>%1 is an invalid template mode name.</source>
+        <translation>%1 nenÃ­ platnÃœm nÃ¡zvem pro ÅeÅŸim pÅedlohy.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="-7"/>
+        <source>At least one time component must appear after the %1-delimiter.</source>
+        <translation>Po %1-oddÄlovaÄi se musÃ­ objevit alespoÅ jedna sloÅŸka Äasu.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+196"/>
+        <source>Overflow: Date can&apos;t be represented.</source>
+        <translation>Nelze pÅedstavit datum (PÅeteÄenÃ­).</translation>
+    </message>
+    <message>
+        <source>Operator %1 is not available between atomic values of type %2 and %3.</source>
+        <translation type="obsolete">OperÃ¡tor %1 se nemÅ¯ÅŸe pouÅŸÃ­vat u atomÃ¡rnÃ­ch hodnot typÅ¯ %2 a %3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+87"/>
+        <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
+        <translation>RozdÃ­l v ÄasovÃ© zÃ³nÄ musÃ­ leÅŸet v oblasti %1..%2 (vÄetnÄ). %3 leÅŸÃ­ mimo oblast.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/>
+        <source>%1 is not a valid XML 1.0 character.</source>
+        <translation>%1 nenÃ­ platnÃœ znak XML 1.0.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+74"/>
+        <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+        <translation>PrvnÃ­ argument %1 nemÅ¯ÅŸe bÃœt typu %2. MusÃ­ to bÃœt typ %3, %4 nebo %5.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+12"/>
+        <source>%1 is not a whole number of minutes.</source>
+        <translation>%1 nenÃ­ celoÄÃ­selnÃœm Ãºdajem o minutÃ¡ch.</translation>
+    </message>
+    <message>
+        <source>Failure when casting from %1 to %2: %3</source>
+        <translation type="obsolete">Operace pÅedvedenÃ­ od %1 do %2 se nepodaÅila: %3</translation>
+    </message>
+    <message>
+        <source>It is not possible to cast from %1 to %2.</source>
+        <translation type="obsolete">Nelze provÃ¡dÄt ÅŸÃ¡dnou operaci pÅedvedenÃ­ od %1 do %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-4204"/>
+        <source>No variable by name %1 exists</source>
+        <translation>Neexistuje ÅŸÃ¡dnÃ¡ promÄnnÃ¡ s nÃ¡zvem %1</translation>
+    </message>
+    <message>
+        <location line="+5919"/>
+        <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+        <translation>JmennÃœ prostor %1 lze spojit pouze s %2. Toto je stanoveno jiÅŸ dopÅedu.</translation>
+    </message>
+    <message>
+        <source>The second operand in a division, %1, cannot be zero (%2).</source>
+        <translation type="obsolete">DruhÃ¡ veliÄina, operand, dÄlenÃ­ %1 nesmÃ­ bÃœt nula (%2).</translation>
+    </message>
+    <message>
+        <location line="-6170"/>
+        <source>Only one %1 declaration can occur in the query prolog.</source>
+        <translation>PÅedmluva k dotazu (prolog) smÃ­ obsahovat pouze jedno %1-prohlÃ¡Å¡enÃ­.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="-151"/>
+        <source>Element %1 must have at least one of the attributes %2 or %3.</source>
+        <translation>Prvek %1 musÃ­ mÃ­t alespoÅ jednu z vlastnostÃ­ %2 nebo %3.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/>
+        <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
+        <translation>KdyÅŸ jsou zadÃ¡ny obÄ hodnoty s ÄasovÃœmi zÃ³nami, musÃ­ mÃ­t ten samÃœ rozdÃ­l v ÄasovÃ© zÃ³nÄ. %1 a %2 nejsou to samÃ© a jsou tÃ­m pÃ¡dem nepÅÃ­pustnÃ©.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+4006"/>
+        <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
+        <translation>Nejsou podporovÃ¡ny vnÄjÅ¡Ã­ funkce. VÅ¡echny podporovanÃ© funkce se dajÃ­ pouÅŸÃ­vat pÅÃ­mo, bez toho, ÅŸe by byly nejprve prohlÃ¡Å¡eny za vnÄjÅ¡Ã­</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qpath.cpp" line="+109"/>
+        <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
+        <translation>PoslednÃ­ krok cesty musÃ­ obsahovat buÄ jen uzly nebo jen atomÃ¡rnÃ­ hodnoty. NesmÃ­ se vyskytovat spoleÄnÄ.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdparticlechecker.cpp" line="+165"/>
+        <source>Empty particle cannot be derived from non-empty particle.</source>
+        <translation>PrÃ¡zdnou ÄÃ¡stici nelze odvodit z ÄÃ¡stice, kterÃ¡ nenÃ­ prÃ¡zdnÃ¡.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Derived particle is missing element %1.</source>
+        <translation>V odvozenÃ© ÄÃ¡stici chybÃ­ prvek %1.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Derived element %1 is missing value constraint as defined in base particle.</source>
+        <translation>V odvozenÃ©m prvku %1 chybÃ­ omezenÃ­ hodnoty, jak je to stanoveno v zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Derived element %1 has weaker value constraint than base particle.</source>
+        <translation>OdvozenÃœ prvek %1 mÃ¡ slabÅ¡Ã­ omezenÃ­ hodnoty neÅŸ mÃ¡ zÃ¡kladnÃ­ ÄÃ¡stice.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source>
+        <translation>PevnÃ© omezenÃ­ hodnoty prvku %1 se liÅ¡Ã­ od omezenÃ­ hodnoty zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Derived element %1 cannot be nillable as base element is not nillable.</source>
+        <translation>OdvozenÃœ prvek %1 nemÅ¯ÅŸe mÃ­t ÅŸÃ¡dnou vlastnost &apos;nillable&apos;, neboÅ¥ zÃ¡kladnÃ­ prvek ÅŸÃ¡dnou nestanovuje.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source>
+        <translation>OmezenÃ­ bloku odvozenÃ©ho prvku %1 nesmÃ­ bÃœt slabÅ¡Ã­ neÅŸ v zÃ¡kladnÃ­m prvku.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Simple type of derived element %1 cannot be validly derived from base element.</source>
+        <translation>JednoduchÃœ typ odvozenÃ©ho prvku %1 nemÅ¯ÅŸe bÃœt platnÄ odvozen ze zÃ¡kladnÃ­ho prvku.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Complex type of derived element %1 cannot be validly derived from base element.</source>
+        <translation>SloÅŸitÃœ typ odvozenÃ©ho prvku %1 nemÅ¯ÅŸe bÃœt platnÄ odvozen ze zÃ¡kladnÃ­ho prvku.</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Element %1 is missing in derived particle.</source>
+        <translation>Prvek %1 chybÃ­ v odvozenÃ© ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Element %1 does not match namespace constraint of wildcard in base particle.</source>
+        <translation>Prvek %1 neodpovÃ­dÃ¡ omezenÃ­ jmennÃ©ho prostoru zÃ¡stupnÃ©ho symbolu (vzor hledÃ¡nÃ­) v zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source>
+        <translation>ZÃ¡stupnÃœ symbol (vzor hledÃ¡nÃ­) v odvozenÃ© ÄÃ¡stici nenÃ­ platnou dÃ­lÄÃ­ mnoÅŸinou zÃ¡stupnÃ©ho symbolu v zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source>
+        <translation>Vlastnost processContent zÃ¡stupnÃ©ho symbolu (vzor hledÃ¡nÃ­) odvozenÃ© ÄÃ¡stice je slabÅ¡Ã­ neÅŸ zÃ¡stupnÃœ symbol (vzor hledÃ¡nÃ­) v zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location line="+240"/>
+        <source>Derived particle allows content that is not allowed in the base particle.</source>
+        <translation>OdvozenÃ¡ ÄÃ¡stice dovoluje obsah, kterÃœ nenÃ­ pÅÃ­pustnÃœ pro zÃ¡kladnÃ­ ÄÃ¡stici.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdschemachecker.cpp" line="+227"/>
+        <source>%1 has inheritance loop in its base type %2.</source>
+        <translation>%1 mÃ¡ ve svÃ©m zÃ¡kladnÃ­m typu  %2 v kruzÃ­ch provÃ¡dÄnou dÄdiÄnost.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location line="+24"/>
+        <source>Circular inheritance of base type %1.</source>
+        <translation>V kruzÃ­ch provÃ¡dÄnÃ¡ dÄdiÄnost v zÃ¡kladnÃ­m typu %1.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Circular inheritance of union %1.</source>
+        <translation>V kruzÃ­ch provÃ¡dÄnÃ¡ dÄdiÄnost pÅi sjednocenÃ­ %1.</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source>
+        <translation>%1 nenÃ­ dovoleno odvodit z %2 pomocÃ­ omezenÃ­, neboÅ¥ poslednÄ uvedenÃœ ji urÄuje jako koneÄnou.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source>
+        <translation>%1 nenÃ­ dovoleno odvodit z %2 pomocÃ­ rozÅ¡Ã­ÅenÃ­, neboÅ¥ poslednÄ uvedenÃœ ji urÄuje jako koneÄnou.</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Base type of simple type %1 cannot be complex type %2.</source>
+        <translation>SloÅŸitÃœ typ %2 nemÅ¯ÅŸe bÃœt zÃ¡kladnÃ­m typem jednoduchÃ©ho typu %1.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Simple type %1 cannot have direct base type %2.</source>
+        <translation>JednoduchÃœ typ %1 nemÅ¯ÅŸe mÃ­t pÅÃ­mÃœ zÃ¡kladnÃ­ typ %2.</translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <location line="+9"/>
+        <source>Simple type %1 is not allowed to have base type %2.</source>
+        <translation>JednoduchÃœ typ %1 nesmÃ­ mÃ­t zÃ¡kladnÃ­ typ %2.</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Simple type %1 can only have simple atomic type as base type.</source>
+        <translation>JednoduchÃœ typ %1 mÅ¯ÅŸe mÃ­t jen jednoduchÃœ malinkÃœ zÃ¡kladnÃ­ typ.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
+        <translation>JednoduchÃœ typ %1 nesmÃ­ bÃœt odvozen z %2 , neboÅ¥ poslednÃ­ urÄuje omezenÃ­ jako koneÄnÃ©.</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location line="+484"/>
+        <source>Variety of item type of %1 must be either atomic or union.</source>
+        <translation>Rozmanitost sloÅŸkovÃœch typÅ¯ %1 musÃ­ bÃœt buÄ malinkÃ¡ nebo sjednocenÃ­.</translation>
+    </message>
+    <message>
+        <location line="-474"/>
+        <location line="+483"/>
+        <source>Variety of member types of %1 must be atomic.</source>
+        <translation>Rozmanitost ÄlenskÃœch typÅ¯ %1 musÃ­ bÃœt malinkÃ¡.</translation>
+    </message>
+    <message>
+        <location line="-470"/>
+        <location line="+451"/>
+        <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
+        <translation>%1 nenÃ­ dovoleno odvodit z %2 pomocÃ­ seznamu, neboÅ¥ poslednÄ uvedenÃœ ji urÄuje jako koneÄnou.</translation>
+    </message>
+    <message>
+        <location line="-431"/>
+        <source>Simple type %1 is only allowed to have %2 facet.</source>
+        <translation>JednoduchÃœ typ %1 mÅ¯ÅŸe mÃ­t jen strÃ¡nky %2.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Base type of simple type %1 must have variety of type list.</source>
+        <translation>ZÃ¡kladnÃ­ typ jednoduchÃ©ho typu %1 musÃ­ mÃ­t rozmanitost seznamu typÅ¯.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Base type of simple type %1 has defined derivation by restriction as final.</source>
+        <translation>ZÃ¡kladnÃ­ typ jednoduchÃ©ho typu %1 urÄuje sjednocenÃ­ pomocÃ­ omezenÃ­ jako koneÄnÃ©.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Item type of base type does not match item type of %1.</source>
+        <translation>SloÅŸkovÃœ typ zÃ¡kladnÃ­ho typu neodpovÃ­dÃ¡ sloÅŸkovÃ©mu typu %1.</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <location line="+93"/>
+        <source>Simple type %1 contains not allowed facet type %2.</source>
+        <translation>JednoduchÃœ typ %1 obsahuje nedovolenÃœ typ strÃ¡nky %2.</translation>
+    </message>
+    <message>
+        <location line="-72"/>
+        <location line="+413"/>
+        <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source>
+        <translation>%1 nenÃ­ dovoleno odvodit z %2 pomocÃ­ sjednocenÃ­, neboÅ¥ poslednÄ uvedenÃœ ji urÄuje jako koneÄnou.</translation>
+    </message>
+    <message>
+        <location line="-404"/>
+        <source>%1 is not allowed to have any facets.</source>
+        <translation>%1 nesmÃ­ mÃ­t ÅŸÃ¡dnÃ© strÃ¡nky.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Base type %1 of simple type %2 must have variety of union.</source>
+        <translation>ZÃ¡kladnÃ­ typ %1 jednoduchÃ©ho typu %2 musÃ­ mÃ­t rozmanitost sjednocenÃ­ typÅ¯.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
+        <translation>ZÃ¡kladnÃ­ typ %1 jednoduchÃ©ho typu %2 nesmÃ­ mÃ­t ÅŸÃ¡dnÃ© omezenÃ­ vlastnosti %3.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Member type %1 cannot be derived from member type %2 of %3&apos;s base type %4.</source>
+        <translation>ÄlenskÃœ typ %1 nemÅ¯ÅŸe bÃœt odvozen z ÄlenskÃ©ho typu %2 ze zÃ¡kladnÃ­ho typu %4 %3.</translation>
+    </message>
+    <message>
+        <location line="+65"/>
+        <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
+        <translation>RozÅ¡Ã­ÅenÃ­ s musÃ­ pouÅŸÃ­vat jako zpÅ¯sob dÄdiÄnosti (odvozenÃ­) pro %1, neboÅ¥ zÃ¡kladnÃ­ typ %2 je jednoduchÃœm typem.</translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>Complex type %1 has duplicated element %2 in its content model.</source>
+        <translation>SloÅŸitÃœ typ %1 mÃ¡ zdvojenÃœ prvek %2 ve svÃ©m modelu obsahu.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Complex type %1 has non-deterministic content.</source>
+        <translation>SloÅŸitÃœ typ %1 mÃ¡ ne-nemÄnnÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source>
+        <translation>Vlastnosti sloÅŸitÃ©ho typu %1 nejsou ÅŸÃ¡dnÃœm platnÃœm rozÅ¡Ã­ÅenÃ­m vlastnostÃ­ zÃ¡kladnÃ­ho typu %2: %3.</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>Content model of complex type %1 is not a valid extension of content model of %2.</source>
+        <translation>Model obsahu sloÅŸitÃ©ho typu %1 nenÃ­ ÅŸÃ¡dnÃœm platnÃœm rozÅ¡Ã­ÅenÃ­m modelu obsahu %2.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Complex type %1 must have simple content.</source>
+        <translation>SloÅŸitÃœ typ %1 musÃ­ mÃ­t jednoduchÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Complex type %1 must have the same simple type as its base class %2.</source>
+        <translation>SloÅŸitÃœ typ %1 musÃ­ mÃ­t jednoduchÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>Complex type %1 cannot be derived from base type %2%3.</source>
+        <translation>SloÅŸitÃœ typ %2 nemÅ¯ÅŸe bÃœt odvozen ze zÃ¡kladnÃ­ho typu %2%3.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source>
+        <translation>Vlastnosti sloÅŸitÃ©ho typu %1  nejsou ÅŸÃ¡dnÃœm platnÃœm omezenÃ­m vlastnostÃ­ zÃ¡kladnÃ­ho typu %2: %3.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
+        <translation>SloÅŸitÃœ typ %1 s jednoduchÃœm obsahem nemÅ¯ÅŸe bÃœt odvozen ze sloÅŸitÃ©ho zÃ¡kladnÃ­ho typu %2.</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <source>Item type of simple type %1 cannot be a complex type.</source>
+        <translation>SloÅŸkovÃœ typ jednoduchÃ©ho typu %1 nemÅ¯ÅŸe bÃœt sloÅŸitÃœm typem.</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Member type of simple type %1 cannot be a complex type.</source>
+        <translation>ÄlenskÃœ typ jednoduchÃ©ho typu %1 nemÅ¯ÅŸe bÃœt sloÅŸitÃœm typem.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>%1 is not allowed to have a member type with the same name as itself.</source>
+        <translation>%1 nesmÃ­ mÃ­t ÄlenskÃœ typ se stejnÃœm nÃ¡zvem, jakÃœ mÃ¡ sÃ¡m.</translation>
+    </message>
+    <message>
+        <location line="+83"/>
+        <location line="+29"/>
+        <location line="+34"/>
+        <source>%1 facet collides with %2 facet.</source>
+        <translation>StrÃ¡nka %1 se stÅetÃ¡vÃ¡ se strÃ¡nkou %2.</translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <source>%1 facet must have the same value as %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ mÃ­t tutÃ©ÅŸ hodnotu, jakou mÃ¡ strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>%1 facet must be equal or greater than %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt stejnÃ¡ nebo vÄtÅ¡Ã­ neÅŸ strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <location line="+125"/>
+        <location line="+55"/>
+        <location line="+12"/>
+        <location line="+91"/>
+        <location line="+58"/>
+        <location line="+34"/>
+        <location line="+35"/>
+        <source>%1 facet must be less than or equal to %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt menÅ¡Ã­ nebo stejnÃ¡ jako strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="-389"/>
+        <source>%1 facet contains invalid regular expression</source>
+        <translation>StrÃ¡nka %1 obsahuje neplatnÃœ pravidelnÃœ vÃœraz</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unknown notation %1 used in %2 facet.</source>
+        <translation>StrÃ¡nka %2 obsahuje neplatnÃ© zaznamenÃ¡nÃ­ %1.</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>%1 facet contains invalid value %2: %3.</source>
+        <translation>StrÃ¡nka %1 obsahuje neplatnou hodnotu %2: %3.</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source>
+        <translation>StrÃ¡nka %1 nesmÃ­ bÃœt %2 nebo %3, pokud je strÃ¡nka %4 zÃ¡kladnÃ­ho typu %5.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
+        <translation>StrÃ¡nka %1 nesmÃ­ bÃœt %2, pokud je strÃ¡nka %3 zÃ¡kladnÃ­ho typu %4.</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <location line="+55"/>
+        <location line="+230"/>
+        <source>%1 facet must be less than or equal to %2 facet.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt menÅ¡Ã­ nebo stejnÃ¡ jako strÃ¡nka %2.</translation>
+    </message>
+    <message>
+        <location line="-257"/>
+        <location line="+134"/>
+        <location line="+82"/>
+        <source>%1 facet must be less than %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt menÅ¡Ã­ neÅŸ strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="-201"/>
+        <location line="+79"/>
+        <source>%1 facet and %2 facet cannot appear together.</source>
+        <translation>StrÃ¡nky %1 a %2 se nemohou objevit spolu.</translation>
+    </message>
+    <message>
+        <location line="-27"/>
+        <location line="+12"/>
+        <location line="+113"/>
+        <source>%1 facet must be greater than %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt vÄtÅ¡Ã­ neÅŸ strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="-86"/>
+        <location line="+58"/>
+        <source>%1 facet must be less than %2 facet.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt menÅ¡Ã­ neÅŸ strÃ¡nka %2.</translation>
+    </message>
+    <message>
+        <location line="-42"/>
+        <location line="+58"/>
+        <source>%1 facet must be greater than or equal to %2 facet of base type.</source>
+        <translation>StrÃ¡nka %1 musÃ­ bÃœt vÄtÅ¡Ã­ nebo stejnÃ¡ jako strÃ¡nka %2 zÃ¡kladnÃ­ho typu.</translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>Simple type contains not allowed facet %1.</source>
+        <translation>JednoduchÃœ typ obsahuje nedovolenou strÃ¡nku %1.</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
+        <translation>StrÃ¡nky %1, %2, %3, %4, %5 a %6 nejsou pÅi odvozenÃ­ (dÄdiÄnosti) pomocÃ­ seznamu dovoleny.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Only %1 and %2 facets are allowed when derived by union.</source>
+        <translation>PÅi odvozenÃ­ (dÄdiÄnosti) pomocÃ­ sjednocenÃ­ jsou dovoleny pouze strÃ¡nky %1 a %2.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <location line="+16"/>
+        <source>%1 contains %2 facet with invalid data: %3.</source>
+        <translation>%1 obsahuje strÃ¡nku %2 s neplatnÃœmi daty: %3.</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Attribute group %1 contains attribute %2 twice.</source>
+        <translation>Skupina vlastnostÃ­ %1 obsahuje vlastnost %2 dvakrÃ¡t.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
+        <translation>Skupina vlastnostÃ­ %1 obsahuje dvÄ rozdÃ­lnÃ© vlastnosti, obÄ s typy, kterÃ© jsou odvozeny z %2.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+        <translation>Skupina vlastnostÃ­ %1 obsahuje vlastnost %2 s omezenÃ­m hodnoty, typ je ale odvozen z %3.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Complex type %1 contains attribute %2 twice.</source>
+        <translation>SloÅŸitÃœ typ %1 obsahuje vlastnost %2 dvakrÃ¡t.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
+        <translation>SloÅŸitÃœ typ %1 obsahuje dvÄ rozdÃ­lnÃ© vlastnosti, obÄ s typy, kterÃ© jsou odvozeny z %2.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+        <translation>SloÅŸitÃœ typ %1 obsahuje vlastnost %2 s omezenÃ­m hodnoty, typ je ale odvozen z %3.</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
+        <translation>Prvek %1 nesmÃ­ mÃ­t omezenÃ­ hodnoty, kdyÅŸ je zÃ¡kladnÃ­ typ sloÅŸitÃœ.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source>
+        <translation>Prvek %1 nesmÃ­ mÃ­t omezenÃ­ hodnoty, kdyÅŸ je jeho typ odvozen z %2.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+11"/>
+        <source>Value constraint of element %1 is not of elements type: %2.</source>
+        <translation>OmezenÃ­ hodnoty prvku %1 nenÃ­ z typu prvku: %2.</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source>
+        <translation>Prvek %1 nesmÃ­ patÅit k skupinÄ nahrazenÃ­, neboÅ¥ nenÃ­ celkovÃœm prvkem.</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source>
+        <translation>Typ prvku %1 nemÅ¯ÅŸe bÃœt odvozen z typu pÅÃ­sluÅ¡nÃ© skupiny nahrazenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Value constraint of attribute %1 is not of attributes type: %2.</source>
+        <translation>OmezenÃ­ hodnoty vlastnosti %1 nenÃ­ z typu vlastnosti: %2.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Attribute %1 has value constraint but has type derived from %2.</source>
+        <translation>Vlastnost %1 mÃ¡ mezenÃ­ hodnoty, ale jejÃ­ typ je odvozen z %2.</translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>%1 attribute in derived complex type must be %2 like in base type.</source>
+        <translation>Vlastnost %1 v odvozenÃ©m sloÅŸitÃ©m typu musÃ­ bÃœt jako v zÃ¡kladnÃ­m typu %2.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source>
+        <translation>Vlastnost %1 v odvozenÃ©m sloÅŸitÃ©m typu musÃ­ mÃ­t omezenÃ­ hodnoty jako v zÃ¡kladnÃ­m typu %2.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source>
+        <translation>Vlastnost %1 v odvozenÃ©m sloÅŸitÃ©m typu musÃ­ mÃ­t stejnÃ© omezenÃ­ hodnoty %2 jako v zÃ¡kladnÃ­m typu.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Attribute %1 in derived complex type must have %2 value constraint.</source>
+        <translation>Vlastnost %1 v odvozenÃ©m sloÅŸitÃ©m typu musÃ­ omezenÃ­ hodnoty %2.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>processContent of base wildcard must be weaker than derived wildcard.</source>
+        <translation>Vlastnost &apos;processContent&apos; zÃ¡kladnÃ­ho zÃ¡stupnÃ©ho symbolu (vzor hledÃ¡nÃ­) musÃ­ bÃœt slabÅ¡Ã­ neÅŸ odvozenÃœ zÃ¡stupnÃœ symbol (vzor hledÃ¡nÃ­).</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <location line="+15"/>
+        <source>Element %1 exists twice with different types.</source>
+        <translation>Prvek %1 existuje dvakrÃ¡t s rozdÃ­lnÃœmi typy.</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Particle contains non-deterministic wildcards.</source>
+        <translation>ÄÃ¡stice obsahuje ne-nemÄnnÃ© zÃ¡stupnÃ© symboly (vzory hledÃ¡nÃ­).</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdschemahelper.cpp" line="+691"/>
+        <location line="+63"/>
+        <source>Base attribute %1 is required but derived attribute is not.</source>
+        <translation>ZÃ¡kladnÃ­ vlastnost %1 je vyÅŸadovÃ¡na, ale odvozenÃ¡ vlastnost nenÃ­.</translation>
+    </message>
+    <message>
+        <location line="-57"/>
+        <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source>
+        <translation>Typ odvozenÃ© vlastnosti %1 nemÅ¯ÅŸe bÃœt platnÄ odvozen z typu zÃ¡kladnÃ­ vlastnosti.</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source>
+        <translation>OmezenÃ­ hodnoty odvozenÃ© vlastnosti %1 neodpovÃ­dÃ¡ omezenÃ­ hodnoty zÃ¡kladnÃ­ vlastnosti.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Derived attribute %1 does not exists in the base definition.</source>
+        <translation>OdvozenÃ¡ vlastnost %1 neexistuje v zÃ¡kladnÃ­m vymezenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Derived attribute %1 does not match the wildcard in the base definition.</source>
+        <translation>OdvozenÃ¡ vlastnost %1 neodpovÃ­dÃ¡ zÃ¡stupnÃ©mu symbolu (vzoru hledÃ¡nÃ­) v zÃ¡kladnÃ­m vymezenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Base attribute %1 is required but missing in derived definition.</source>
+        <translation>ZÃ¡kladnÃ­ vlastnost %1 je vyÅŸadovÃ¡na, ale chybÃ­ v odvozenÃ©m vymezenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Derived definition contains an %1 element that does not exists in the base definition</source>
+        <translation>OdvozenÃ© vymezenÃ­ obsahuje prvek %1, kterÃœ v zÃ¡kladnÃ­m vymezenÃ­ neexistuje</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Derived wildcard is not a subset of the base wildcard.</source>
+        <translation>OdvozenÃœ zÃ¡stupnÃœ symbol (vzor hledÃ¡nÃ­) nenÃ­ ÅŸÃ¡dnou dÃ­lÄÃ­ mnoÅŸinou zÃ¡kladnÃ­ho zÃ¡stupnÃ©ho symbolu (vzoru hledÃ¡nÃ­).</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source>
+        <translation>Vlastnost %1 odvozenÃ©ho zÃ¡stupnÃ©ho symbolu (vzoru hledÃ¡nÃ­) nenÃ­ platnÃœm omezenÃ­m %2 zÃ¡kladnÃ­ho zÃ¡stupnÃ©ho symbolu (vzoru hledÃ¡nÃ­)</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Attribute %1 from base type is missing in derived type.</source>
+        <translation>Vlastnost %1 zÃ¡kladnÃ­ho typu chybÃ­ v odvozenÃ©m typu.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Type of derived attribute %1 differs from type of base attribute.</source>
+        <translation>Typ odvozenÃ© vlastnosti %1 se liÅ¡Ã­ od typu zÃ¡kladnÃ­ vlastnosti.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Base definition contains an %1 element that is missing in the derived definition</source>
+        <translation>ZÃ¡kladnÃ­ vymezenÃ­ obsahuje prvek %1, kterÃœ v odvozenÃ©m vymezenÃ­ chybÃ­</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdschemaparser.cpp" line="+170"/>
+        <source>Can not process unknown element %1, expected elements are: %2.</source>
+        <translation>Nelze zpracovat neznÃ¡mÃœ prvek %1, oÄekÃ¡vanÃœmi prvky jsou: %2.</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Element %1 is not allowed in this scope, possible elements are: %2.</source>
+        <translation>Prvek %1 nenÃ­ v tÃ©to oblasti dovolen; moÅŸnÃœmi prvky jsou: %2.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Child element is missing in that scope, possible child elements are: %1.</source>
+        <translation>Podprvek v oblasti chybÃ­; moÅŸnÃœmi podprvky jsou: %1.</translation>
+    </message>
+    <message>
+        <location line="+127"/>
+        <source>Document is not a XML schema.</source>
+        <translation>Dokument nenÃ­ schÃ©matem XML.</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source>
+        <translation>Vlastnost %1 prvku %2 obsahuje neplatnÃœ obsah: {%3} nenÃ­ hodnotou typu %4.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>%1 attribute of %2 element contains invalid content: {%3}.</source>
+        <translation>Vlastnost %1 prvku %2 obsahuje neplatnÃœ obsah: {%3}.</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source>
+        <translation>CÃ­lovÃœ jmennÃœ prostor %1 zahrnutÃ©ho schÃ©matu se liÅ¡Ã­ od jÃ­m vymezenÃ©ho cÃ­lovÃ©ho jmennÃ©ho prostoru %2.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <location line="+11"/>
+        <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source>
+        <translation>CÃ­lovÃœ jmennÃœ prostor %1 zavedenÃ©ho schÃ©matu se liÅ¡Ã­ od jÃ­m vymezenÃ©ho cÃ­lovÃ©ho jmennÃ©ho prostoru %2.</translation>
+    </message>
+    <message>
+        <location line="+237"/>
+        <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source>
+        <translation>Prvek %1 nemÅ¯ÅŸe stanovit cÃ­lovÃœ jmennÃœ prostor %3 jako hodnotu vlastnosti %2.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source>
+        <translation>Ve schÃ©matu bez jmennÃ©ho prostoru musÃ­ mÃ­t prvek %1 vlastnost %2.</translation>
+    </message>
+    <message>
+        <location line="+833"/>
+        <location line="+158"/>
+        <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
+        <translation>KdyÅŸ je pÅÃ­tomna vlastnost %3, nesmÃ­ se vyskytovat prvek %1 v prvku %2.</translation>
+    </message>
+    <message>
+        <location line="-97"/>
+        <location line="+119"/>
+        <location line="+92"/>
+        <source>%1 element has neither %2 attribute nor %3 child element.</source>
+        <translation>Prvek %1 nemÃ¡ ani vlastnost %2 ani podprvek %3.</translation>
+    </message>
+    <message>
+        <location line="+835"/>
+        <location line="+1474"/>
+        <location line="+232"/>
+        <location line="+7"/>
+        <location line="+260"/>
+        <location line="+17"/>
+        <location line="+258"/>
+        <location line="+6"/>
+        <location line="+17"/>
+        <location line="+6"/>
+        <location line="+17"/>
+        <location line="+11"/>
+        <location line="+11"/>
+        <location line="+11"/>
+        <source>%1 element with %2 child element must not have a %3 attribute.</source>
+        <translation>Prvek %1 nesmÃ­ mÃ­t vlastnost %3, kdyÅŸ existuje podprvek %2.</translation>
+    </message>
+    <message>
+        <location line="-1325"/>
+        <source>%1 attribute of %2 element must be %3 or %4.</source>
+        <translation>Vlastnost %1 prvku %2 mÅ¯ÅŸe bÃœt jen %3 nebo %4.</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>%1 attribute of %2 element must have a value of %3.</source>
+        <translation>Vlastnost %1 prvku %2 musÃ­ mÃ­t hodnotu %3.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location line="+34"/>
+        <source>%1 attribute of %2 element must have a value of %3 or %4.</source>
+        <translation>Vlastnost %1 prvku %2 mÅ¯ÅŸe mÃ­t jen jednu z hodnot %3 nebo %4.</translation>
+    </message>
+    <message>
+        <location line="+319"/>
+        <location line="+129"/>
+        <location line="+9"/>
+        <location line="+7"/>
+        <location line="+7"/>
+        <location line="+327"/>
+        <location line="+203"/>
+        <location line="+6"/>
+        <location line="+6"/>
+        <location line="+6"/>
+        <location line="+6"/>
+        <location line="+6"/>
+        <location line="+6"/>
+        <location line="+77"/>
+        <source>%1 element must not have %2 and %3 attribute together.</source>
+        <translation>Vlastnosti %2 a %3 se v prvku %1 nemohou objevit spoleÄnÄ.</translation>
+    </message>
+    <message>
+        <location line="-768"/>
+        <location line="+222"/>
+        <source>Content of %1 attribute of %2 element must not be from namespace %3.</source>
+        <translation>Obsah vlastnosti %1 prvku %2 nemÅ¯ÅŸe pochÃ¡zet ze jmennÃ©ho prostoru %3.</translation>
+    </message>
+    <message>
+        <location line="-215"/>
+        <location line="+222"/>
+        <source>%1 attribute of %2 element must not be %3.</source>
+        <translation>Vlastnost %1 prvku %2 nemÅ¯ÅŸe bÃœt %3.</translation>
+    </message>
+    <message>
+        <location line="-64"/>
+        <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source>
+        <translation>Vlastnost %1 prvku %2 musÃ­ mÃ­t hodnotu %3, protoÅŸe je nastavena vlastnost %4.</translation>
+    </message>
+    <message>
+        <location line="+187"/>
+        <source>Specifying use=&apos;prohibited&apos; inside an attribute group has no effect.</source>
+        <translation>ZadÃ¡nÃ­ use=&apos;prohibited&apos; ve skupinÄ vlastnostÃ­ nemÃ¡ naprosto ÅŸÃ¡dnÃœ ÃºÄinek.</translation>
+    </message>
+    <message>
+        <location line="+353"/>
+        <source>%1 element must have either %2 or %3 attribute.</source>
+        <translation>Prvek %1 musÃ­ mÃ­t buÄ vlastnost %2 nebo %3.</translation>
+    </message>
+    <message>
+        <location line="+554"/>
+        <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source>
+        <translation>Prvek %1 musÃ­ mÃ­t buÄ vlastnost %2, nebo mÃ­t %3 nebo %4 jako podprvek.</translation>
+    </message>
+    <message>
+        <location line="+55"/>
+        <source>%1 element requires either %2 or %3 attribute.</source>
+        <translation>Prvek %1 vyÅŸaduje buÄ vlastnost %2 nebo %3.</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Text or entity references not allowed inside %1 element</source>
+        <translation>Text nebo odkazy na entitu nejsou v prvku %1 dovoleny</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <location line="+112"/>
+        <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source>
+        <translation>Vlastnost %1 prvku %2 musÃ­ obsahovat %3, %4 nebo seznam adres (URL).</translation>
+    </message>
+    <message>
+        <location line="+126"/>
+        <source>%1 element is not allowed in this context.</source>
+        <translation>Prvek %1 nenÃ­ v tÃ©to souvislosti dovolen.</translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>%1 attribute of %2 element has larger value than %3 attribute.</source>
+        <translation>Hodnota vlastnosti %1 prvku %2 je vÄtÅ¡Ã­ neÅŸ hodnota vlastnosti %3.</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Prefix of qualified name %1 is not defined.</source>
+        <translation>PÅedpona zpÅ¯sobilÃ©ho nÃ¡zvu %1 nenÃ­ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+65"/>
+        <location line="+61"/>
+        <source>%1 attribute of %2 element must either contain %3 or the other values.</source>
+        <translation>Hodnota vlastnosti %1 prvku %2 musÃ­ obsahovat buÄ %3 nebo jinÃ© hodnoty.</translation>
+    </message>
+    <message>
+        <location line="+131"/>
+        <source>Component with id %1 has been defined previously.</source>
+        <translation>SouÄÃ¡st s ID %1 je jiÅŸ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Element %1 already defined.</source>
+        <translation>Prvek %1 je jiÅŸ stanoven.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Attribute %1 already defined.</source>
+        <translation>Vlastnost %1 je jiÅŸ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Type %1 already defined.</source>
+        <translation>Typ %1 je jiÅŸ stanoven.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Attribute group %1 already defined.</source>
+        <translation>Skupina vlastnostÃ­ %1 je jiÅŸ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Element group %1 already defined.</source>
+        <translation>Skupina prvkÅ¯ %1 je jiÅŸ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Notation %1 already defined.</source>
+        <translation>ZÃ¡pis %1 je jiÅŸ stanoven.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Identity constraint %1 already defined.</source>
+        <translation>OmezenÃ­ totoÅŸnosti %1 je jiÅŸ stanoveno.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Duplicated facets in simple type %1.</source>
+        <translation>ZdvojenÃ© strÃ¡nky v jednoduchÃ©m typu %1.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdschemaresolver.cpp" line="+354"/>
+        <source>%1 references unknown %2 or %3 element %4.</source>
+        <translation>%1 odkazuje na neznÃ¡mÃœ prvek %4 (%2 nebo %3).</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>%1 references identity constraint %2 that is no %3 or %4 element.</source>
+        <translation>%1 odkazuje na omezenÃ­ totoÅŸnosti %2, kterÃ© nenÃ­ ani prvek &apos;%3&apos; ani &apos;%4&apos;.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>%1 has a different number of fields from the identity constraint %2 that it references.</source>
+        <translation>U %1 se liÅ¡Ã­ poÄet polÃ­ od omezenÃ­ totoÅŸnosti %2, na kterou odkazuje.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Base type %1 of %2 element cannot be resolved.</source>
+        <translation>ZÃ¡kladnÃ­ typ %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="+84"/>
+        <source>Item type %1 of %2 element cannot be resolved.</source>
+        <translation>SloÅŸkovÃœ typ %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Member type %1 of %2 element cannot be resolved.</source>
+        <translation>ÄlenskÃœ typ %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <location line="+408"/>
+        <location line="+30"/>
+        <source>Type %1 of %2 element cannot be resolved.</source>
+        <translation>Typ %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="-416"/>
+        <source>Base type %1 of complex type cannot be resolved.</source>
+        <translation>ZÃ¡kladnÃ­ typ %1 sloÅŸitÃ©ho typu nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1 cannot have complex base type that has a %2.</source>
+        <translation>%1 nelze mÃ­t ÅŸÃ¡dnÃœ sloÅŸitÃœ zÃ¡kladnÃ­ typ, kterÃœ mÃ¡ %2.</translation>
+    </message>
+    <message>
+        <location line="+279"/>
+        <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source>
+        <translation>Model obsahu sloÅŸitÃ©ho typu %1 obsahuje prvek %2; nelze jej proto odvodit pomocÃ­ rozÅ¡Ã­ÅenÃ­ z ne-prÃ¡zdnÃ©ho typu.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source>
+        <translation>SloÅŸitÃœ typ %1 nemÅ¯ÅŸe bÃœt odvozen pomocÃ­ rozÅ¡Ã­ÅenÃ­ z %2, neboÅ¥ poslednÃ­ obsahuje prvek &apos;%3&apos; ve svÃ©m modelu obsahu.</translation>
+    </message>
+    <message>
+        <location line="+101"/>
+        <source>Type of %1 element must be a simple type, %2 is not.</source>
+        <translation>Typ prvku %1 musÃ­ bÃœt jednoduchÃœm prvkem, coÅŸ %2 nenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>Substitution group %1 of %2 element cannot be resolved.</source>
+        <translation>Skupina nahrazenÃ­ %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡ena.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Substitution group %1 has circular definition.</source>
+        <translation>Skupina nahrazenÃ­ %1 mÃ¡ v kruzÃ­ch provÃ¡dÄnÃ© vymezenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+120"/>
+        <location line="+7"/>
+        <source>Duplicated element names %1 in %2 element.</source>
+        <translation>NÃ¡zev prvku %1 se vyskytuje v prvku %2 vÃ­cekrÃ¡t.</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <location line="+52"/>
+        <location line="+71"/>
+        <location line="+28"/>
+        <source>Reference %1 of %2 element cannot be resolved.</source>
+        <translation>Odkaz %1 prvku %2 nemÅ¯ÅŸe bÃœt vyÅeÅ¡en.</translation>
+    </message>
+    <message>
+        <location line="-138"/>
+        <source>Circular group reference for %1.</source>
+        <translation>V kruzÃ­ch provÃ¡dÄnÃœ skupinovÃœ odkaz pro %1.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>%1 element is not allowed in this scope</source>
+        <translation>Prvek %1 nenÃ­ v tÃ©to oblasti dovolen</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 element cannot have %2 attribute with value other than %3.</source>
+        <translation>Hodnota vlastnosti %2 prvku %1 mÅ¯ÅŸe bÃœt pouze %3.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source>
+        <translation>Hodnota vlastnosti %2 prvku %1 mÅ¯ÅŸe bÃœt pouze %3 nebo %4.</translation>
+    </message>
+    <message>
+        <location line="+91"/>
+        <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source>
+        <translation>Vlastnost %1 nebo %2 odkazu %3 neodpovÃ­dÃ¡ prohlÃ¡Å¡enÃ­ vlastnosti %4.</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Attribute group %1 has circular reference.</source>
+        <translation>Skupina vlastnosti %1 mÃ¡ kruzÃ­ch provÃ¡dÄnÃœ odkaz.</translation>
+    </message>
+    <message>
+        <location line="+131"/>
+        <source>%1 attribute in %2 must have %3 use like in base type %4.</source>
+        <translation>Vlastnost %1 v %2 musÃ­ mÃ­t pouÅŸitÃ­ &apos;%3&apos; jako v zÃ¡kladnÃ­m typu %4.</translation>
+    </message>
+    <message>
+        <location line="+52"/>
+        <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source>
+        <translation>ZÃ¡stupnÃœ symbol vlastnosti (vzor hledÃ¡nÃ­) %1nenÃ­ platnÃœm omezenÃ­m zÃ¡stupnÃ©ho symbolu vlastnosti (vzoru hledÃ¡nÃ­) zÃ¡kladnÃ­ho typu %2.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>%1 has attribute wildcard but its base type %2 has not.</source>
+        <translation>%1 mÃ¡ zÃ¡stupnÃœ symbol vlastnosti (vzor hledÃ¡nÃ­), ale jeho zÃ¡kladnÃ­ typ %2 nemÃ¡.</translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source>
+        <translation>SjednocenÃ­ zÃ¡stupnÃ©ho symbolu vlastnosti (vzoru hledÃ¡nÃ­) typu %1 a zÃ¡stupnÃ©ho symbolu vlastnosti (vzoru hledÃ¡nÃ­) jeho zÃ¡kladnÃ­ho typu %2 nenÃ­ vyjÃ¡dÅitelnÃ©.</translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source>
+        <translation>VÃœÄtovÃ¡ strÃ¡nka obsahuje neplatnÃœ obsah: {%1} nenÃ­ hodnotou typu %2.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Namespace prefix of qualified name %1 is not defined.</source>
+        <translation>PÅedpona jmennÃ©ho prostoru zpÅ¯sobilÃ©ho nÃ¡zvu %1 nenÃ­ stanovena.</translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <location line="+18"/>
+        <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source>
+        <translation>Prvek %2 (%1) nenÃ­ platnÃœm omezenÃ­m pÅepisovanÃ©ho prvku (%3): %4.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdtypechecker.cpp" line="+233"/>
+        <location line="+7"/>
+        <location line="+21"/>
+        <source>%1 is not valid according to %2.</source>
+        <translation>%1 je podle %2 neplatnÃ©.</translation>
+    </message>
+    <message>
+        <location line="+167"/>
+        <source>String content does not match the length facet.</source>
+        <translation>Obsah ÅetÄzce znakÅ¯ neodpovÃ­dÃ¡ strÃ¡nce dÃ©lky.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>String content does not match the minLength facet.</source>
+        <translation>Obsah ÅetÄzce znakÅ¯ neodpovÃ­dÃ¡ strÃ¡nce dÃ©lky (nejmenÅ¡Ã­ Ãºdaj, &apos;minLength&apos;).</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>String content does not match the maxLength facet.</source>
+        <translation>Obsah ÅetÄzce znakÅ¯ neodpovÃ­dÃ¡ strÃ¡nce dÃ©lky (nejvÄtÅ¡Ã­ Ãºdaj; &apos;maxLength&apos;).</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>String content does not match pattern facet.</source>
+        <translation>Obsah ÅetÄzce znakÅ¯ neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>String content is not listed in the enumeration facet.</source>
+        <translation>Obsah ÅetÄzce znakÅ¯ nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Signed integer content does not match the maxInclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce &apos;maxInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Signed integer content does not match the maxExclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce &apos;maxExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Signed integer content does not match the minInclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce &apos;minInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Signed integer content does not match the minExclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce &apos;minExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Signed integer content is not listed in the enumeration facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem nenÃ­ obsaÅŸena ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Signed integer content does not match pattern facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Signed integer content does not match in the totalDigits facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota oznaÄenÃ¡ znamÃ©nkem neodpovÃ­dÃ¡ strÃ¡nce &apos;totalDigits&apos;.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unsigned integer content does not match the maxInclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce &apos;maxInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Unsigned integer content does not match the maxExclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce &apos;maxExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Unsigned integer content does not match the minInclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce &apos;minInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Unsigned integer content does not match the minExclusive facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce &apos;minExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Unsigned integer content is not listed in the enumeration facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka nenÃ­ obsaÅŸena ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Unsigned integer content does not match pattern facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Unsigned integer content does not match in the totalDigits facet.</source>
+        <translation>CeloÄÃ­selnÃ¡ hodnota jsoucÃ­ bez znamÃ©nka neodpovÃ­dÃ¡ strÃ¡nce &apos;totalDigits&apos;.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Double content does not match the maxInclusive facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou neodpovÃ­dÃ¡ strÃ¡nce &apos;maxInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Double content does not match the maxExclusive facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou neodpovÃ­dÃ¡ strÃ¡nce &apos;maxExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Double content does not match the minInclusive facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou neodpovÃ­dÃ¡ strÃ¡nce &apos;minInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Double content does not match the minExclusive facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou neodpovÃ­dÃ¡ strÃ¡nce &apos;minExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Double content is not listed in the enumeration facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou nenÃ­ obsaÅŸeno ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Double content does not match pattern facet.</source>
+        <translation>ÄÃ­slo s pohyblivou ÄÃ¡rkou neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Decimal content does not match in the fractionDigits facet.</source>
+        <translation>DesetinnÃ© ÄÃ­slo neodpovÃ­dÃ¡ strÃ¡nce &apos;fractionDigits&apos;.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Decimal content does not match in the totalDigits facet.</source>
+        <translation>DesetinnÃ© ÄÃ­slo neodpovÃ­dÃ¡ strÃ¡nce &apos;totalDigits&apos;.</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Date time content does not match the maxInclusive facet.</source>
+        <translation>Ãdaj o datu neodpovÃ­dÃ¡ strÃ¡nce &apos;maxInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Date time content does not match the maxExclusive facet.</source>
+        <translation>Ãdaj o datu neodpovÃ­dÃ¡ strÃ¡nce &apos;maxExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Date time content does not match the minInclusive facet.</source>
+        <translation>Ãdaj o datu neodpovÃ­dÃ¡ strÃ¡nce &apos;minInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Date time content does not match the minExclusive facet.</source>
+        <translation>Ãdaj o datu neodpovÃ­dÃ¡ strÃ¡nce &apos;minExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Date time content is not listed in the enumeration facet.</source>
+        <translation>Ãdaj o datu nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Date time content does not match pattern facet.</source>
+        <translation>Ãdaj o datu neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Duration content does not match the maxInclusive facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ neodpovÃ­dÃ¡ strÃ¡nce &apos;maxInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Duration content does not match the maxExclusive facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ neodpovÃ­dÃ¡ strÃ¡nce &apos;maxExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Duration content does not match the minInclusive facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ neodpovÃ­dÃ¡ strÃ¡nce &apos;minInclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Duration content does not match the minExclusive facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ neodpovÃ­dÃ¡ strÃ¡nce &apos;minExclusive&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Duration content is not listed in the enumeration facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Duration content does not match pattern facet.</source>
+        <translation>Ãdaj o dobÄ trvÃ¡nÃ­ neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Boolean content does not match pattern facet.</source>
+        <translation>BooleÃ¡nskÃ¡ hodnota neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Binary content does not match the length facet.</source>
+        <translation>BinÃ¡rnÃ­ obsah neodpovÃ­dÃ¡ strÃ¡nce dÃ©lky.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Binary content does not match the minLength facet.</source>
+        <translation>BinÃ¡rnÃ­ obsah neodpovÃ­dÃ¡ strÃ¡nce &apos;minLength&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Binary content does not match the maxLength facet.</source>
+        <translation>BinÃ¡rnÃ­ obsah neodpovÃ­dÃ¡ strÃ¡nce &apos;maxLength&apos;.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Binary content is not listed in the enumeration facet.</source>
+        <translation>BinÃ¡rnÃ­ obsah nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Invalid QName content: %1.</source>
+        <translation>Obsah zpÅ¯sobilÃ©ho nÃ¡zvu (&apos;QName&apos;) je neplatnÃœ: %1.</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>QName content is not listed in the enumeration facet.</source>
+        <translation>Obsah zpÅ¯sobilÃ©ho nÃ¡zvu (&apos;QName&apos;) nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>QName content does not match pattern facet.</source>
+        <translation>Obsah zpÅ¯sobilÃ©ho nÃ¡zvu (&apos;QName&apos;) neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Notation content is not listed in the enumeration facet.</source>
+        <translation>Obsah zÃ¡pisu nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>List content does not match length facet.</source>
+        <translation>Obsah seznamu neodpovÃ­dÃ¡ strÃ¡nce dÃ©lky.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>List content does not match minLength facet.</source>
+        <translation>Obsah seznamu neodpovÃ­dÃ¡ strÃ¡nce &apos;minLength&apos;.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>List content does not match maxLength facet.</source>
+        <translation>Obsah seznamu neodpovÃ­dÃ¡ strÃ¡nce &apos;maxLength&apos;.</translation>
+    </message>
+    <message>
+        <location line="+90"/>
+        <source>List content is not listed in the enumeration facet.</source>
+        <translation>Obsah seznamu nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>List content does not match pattern facet.</source>
+        <translation>Obsah seznamu neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Union content is not listed in the enumeration facet.</source>
+        <translation>Obsah sjednocenÃ­ nenÃ­ obsaÅŸen ve vÃœÄtovÃ© strÃ¡nce.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Union content does not match pattern facet.</source>
+        <translation>Obsah sjednocenÃ­ neodpovÃ­dÃ¡ strÃ¡nce vzoru pro hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Data of type %1 are not allowed to be empty.</source>
+        <translation>Data typu %1 nemohou bÃœt prÃ¡zdnÃ¡.</translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp" line="+160"/>
+        <source>Element %1 is missing child element.</source>
+        <translation>U prvku %1 chybÃ­ podprvek.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>There is one IDREF value with no corresponding ID: %1.</source>
+        <translation>Existuje hodnota IDREF, pro kterou neexistuje pÅÃ­sluÅ¡nÃ© ID: %1.</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Loaded schema file is invalid.</source>
+        <translation>NahranÃœ soubor se schÃ©matem je neplatnÃœ.</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>%1 contains invalid data.</source>
+        <translation>%1 obsahuje neplatnÃ¡ data.</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source>
+        <translation>JmennÃœ prostor xsi:schemaLocation %1 byl jiÅŸ dÅÃ­ve v pÅÃ­padovÃ©m dokumentu stanoven.</translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source>
+        <translation>xsi:noNamespaceSchemaLocation se nemÅ¯ÅŸe objevit po prvnÃ­m prvku nebo vlastnosti bez jmennÃ©ho prostoru.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>No schema defined for validation.</source>
+        <translation>Pro schvÃ¡lenÃ­ nenÃ­ stanoveno ÅŸÃ¡dnÃ© schÃ©ma.</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>No definition for element %1 available.</source>
+        <translation>Pro prvek %1 nenÃ­ dostupnÃ© ÅŸÃ¡dnÃ© vymezenÃ­.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <location line="+49"/>
+        <location line="+142"/>
+        <source>Specified type %1 is not known to the schema.</source>
+        <translation>ZadanÃœ typ %1 nenÃ­ ve schÃ©matu stanoven.</translation>
+    </message>
+    <message>
+        <location line="-176"/>
+        <source>Element %1 is not defined in this scope.</source>
+        <translation>Prvek %1 nenÃ­ v tÃ©to oblasti stanoven.</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Declaration for element %1 does not exist.</source>
+        <translation>Pro prvek %1 nenÃ­ dostupnÃ© ÅŸÃ¡dnÃ© prohlÃ¡Å¡enÃ­.</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Element %1 contains invalid content.</source>
+        <translation>Prvek %1 obsahuje neplatnÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+73"/>
+        <source>Element %1 is declared as abstract.</source>
+        <translation>Prvek %1 je prohlÃ¡Å¡en jako abstraktnÃ­.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Element %1 is not nillable.</source>
+        <translation>Prvek %1 nemÃ¡ zadÃ¡nu vlastnost &apos;nillable&apos;.</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Attribute %1 contains invalid data: %2</source>
+        <translation>Vlastnost %1 obsahuje neplatnÃ¡ data: %2</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Element contains content although it is nillable.</source>
+        <translation>Prvek mÃ¡ obsah, aÄkoli je &apos;nillable&apos;.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Fixed value constrained not allowed if element is nillable.</source>
+        <translation>PevnÃ© omezenÃ­ hodnoty nenÃ­ dovoleno, pokud je prvek &apos;nillable&apos;.</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Specified type %1 is not validly substitutable with element type %2.</source>
+        <translation>ZadanÃœ typ %1 nenÃ­ platnÄ nahraditelnÃœ typem prvku %2.</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Complex type %1 is not allowed to be abstract.</source>
+        <translation>SloÅŸitÃœ typ %1 nemÅ¯ÅŸe bÃœt abstraktnÃ­.</translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Element %1 contains not allowed attributes.</source>
+        <translation>Prvek %1 obsahuje nepÅÃ­pustnÃ© vlastnosti.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+97"/>
+        <source>Element %1 contains not allowed child element.</source>
+        <translation>Prvek %1 obsahuje nepÅÃ­pustnÃœ podprvek.</translation>
+    </message>
+    <message>
+        <location line="-76"/>
+        <location line="+93"/>
+        <source>Content of element %1 does not match its type definition: %2.</source>
+        <translation>Obsah prvku %1 neodpovÃ­dÃ¡ vymezenÃ­ svÃ©ho typu: %2.</translation>
+    </message>
+    <message>
+        <location line="-85"/>
+        <location line="+92"/>
+        <location line="+41"/>
+        <source>Content of element %1 does not match defined value constraint.</source>
+        <translation>Obsah prvku %1 neodpovÃ­dÃ¡ stanovenÃ©mu omezenÃ­ hodnoty.</translation>
+    </message>
+    <message>
+        <location line="-73"/>
+        <source>Element %1 contains not allowed child content.</source>
+        <translation>Prvek %1 obsahuje nepÅÃ­pustnÃœ podobsah.</translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Element %1 contains not allowed text content.</source>
+        <translation>Prvek %1 obsahuje nepÅÃ­pustnÃœ textovÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Element %1 can not contain other elements, as it has a fixed content.</source>
+        <translation>Prvek %1 nesmÃ­ obsahovat ÅŸÃ¡dnÃ© podprvky, protoÅŸe mÃ¡ pevnÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Element %1 is missing required attribute %2.</source>
+        <translation>U prvkuk %1 chybÃ­ vyÅŸadovanÃ¡ vlastnost %2.</translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Attribute %1 does not match the attribute wildcard.</source>
+        <translation>Vlastnost %1 neodpovÃ­dÃ¡ zÃ¡stupnÃ©mu symbolu (vzoru hledÃ¡nÃ­) vlastnosti.</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Declaration for attribute %1 does not exist.</source>
+        <translation>Pro vlastnost %1 nenÃ­ dostupnÃ© ÅŸÃ¡dnÃ© prohlÃ¡Å¡enÃ­.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Element %1 contains two attributes of type %2.</source>
+        <translation>Prvek %1 obsahuje dvÄ vlastnosti typu %2.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Attribute %1 contains invalid content.</source>
+        <translation>Vlastnost %1 obsahuje neplatnÃœ obsah.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Element %1 contains unknown attribute %2.</source>
+        <translation>Prvek %1 obsahuje neznÃ¡mou vlastnost %2.</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <location line="+46"/>
+        <source>Content of attribute %1 does not match its type definition: %2.</source>
+        <translation>Obsah vlastnosti %1 neodpovÃ­dÃ¡ vymezenÃ­ svÃ©ho typu: %2.</translation>
+    </message>
+    <message>
+        <location line="-38"/>
+        <location line="+46"/>
+        <source>Content of attribute %1 does not match defined value constraint.</source>
+        <translation>Obsah vlastnosti %1 neodpovÃ­dÃ¡ stanovenÃ©mu omezenÃ­ hodnoty.</translation>
+    </message>
+    <message>
+        <location line="+88"/>
+        <source>Non-unique value found for constraint %1.</source>
+        <translation>Pro omezenÃ­ %1 byla nalezena ne jednoznaÄnÄ stanovenÃ¡ hodnota.</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Key constraint %1 contains absent fields.</source>
+        <translation>OmezenÃ­ klÃ­Äe %1 obsahuje nepÅÃ­tomnÃ¡ pole.</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Key constraint %1 contains references nillable element %2.</source>
+        <translation>OmezenÃ­ klÃ­Äe %1 obsahuje odkazy na prvek %2, kterÃœ je &apos;nillable&apos;.</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>No referenced value found for key reference %1.</source>
+        <translation>Odkazovanou hodnotu odkazu na klÃ­Ä %1 se nepodaÅilo najÃ­t.</translation>
+    </message>
+    <message>
+        <location line="+64"/>
+        <source>More than one value found for field %1.</source>
+        <translation>Pro pole %1 bylo nalezeno vÃ­ce hodnot.</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Field %1 has no simple type.</source>
+        <translation>Pole %1 nemÃ¡ ÅŸÃ¡dnÃœ jednoduchÃœ typ.</translation>
+    </message>
+    <message>
+        <location line="+73"/>
+        <source>ID value &apos;%1&apos; is not unique.</source>
+        <translation>Hodnota ID %1 nenÃ­ jednoznaÄnÃ¡.</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
+        <translation>Vlastnost %1 obsahuje neplatnÃœ zpÅ¯sobilÃœ nÃ¡zev: %2.</translation>
+    </message>
+</context>
+<context>
+    <name>VolumeSlider</name>
+    <message>
+        <source>Muted</source>
+        <translation type="obsolete">ZtlumenÃ­</translation>
+    </message>
+    <message>
+        <source>Volume: %1%</source>
+        <translation type="obsolete">Hlasitost: %1%</translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/qt_de.ts
===================================================================
--- /trunk/translations/qt_de.ts	(revision 768)
+++ /trunk/translations/qt_de.ts	(revision 769)
@@ -7573,5 +7573,5 @@
         <source>Play movie in full-screen mode</source>
         <comment>Media controller element</comment>
-        <translation>FIlm im Vollbildmodus abspielen</translation>
+        <translation>Film im Vollbildmodus abspielen</translation>
     </message>
     <message>
@@ -8246,5 +8246,5 @@
         <location filename="../src/xmlpatterns/api/qcoloringmessagehandler.cpp" line="+87"/>
         <source>Warning in %1, at line %2, column %3: %4</source>
-        <translation>Fehler in %1, bei Zeile %2, Spalte %3: %4</translation>
+        <translation>Warnung in %1, bei Zeile %2, Spalte %3: %4</translation>
     </message>
     <message>
@@ -9467,5 +9467,5 @@
         <location line="+451"/>
         <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
-        <translation>%1 darf nicht durch Listen von %2 abgeleitet werden, da sie letzterer sie als final deklariert.</translation>
+        <translation>%1 darf nicht durch Listen von %2 abgeleitet werden, da letzterer sie als final deklariert.</translation>
     </message>
     <message>
@@ -9918,5 +9918,5 @@
         <location line="+6"/>
         <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source>
-        <translation>Der komplexe Typ % kann nicht durch Erweiterung von %2 abgeleitet werden, da letzterer ein &apos;%3&apos;-Element in seinem Inhaltsmodell hat.</translation>
+        <translation>Der komplexe Typ %1 kann nicht durch Erweiterung von %2 abgeleitet werden, da letzterer ein &apos;%3&apos;-Element in seinem Inhaltsmodell hat.</translation>
     </message>
     <message>
Index: /trunk/translations/qt_he.ts
===================================================================
--- /trunk/translations/qt_he.ts	(revision 769)
+++ /trunk/translations/qt_he.ts	(revision 769)
@@ -0,0 +1,7781 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+    <name>AudioOutput</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+375"/>
+        <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Revert back to device &apos;%1&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2251"/>
+        <source>Close Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>PPDOptionsModel</name>
+    <message>
+        <source>Name</source>
+        <translation type="obsolete">×©×</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/>
+        <source>Notifications</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Music</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Communication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Games</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Accessibility</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::Gstreamer::Backend</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/>
+        <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
+          Some video features have been disabled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Warning: You do not seem to have the base GStreamer plugins installed.
+          All audio and video support has been disabled</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::Gstreamer::MediaObject</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/>
+        <source>Cannot start playback. 
+
+Check your Gstreamer installation and make sure you 
+have libgstreamer-plugins-base installed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+113"/>
+        <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+676"/>
+        <location line="+8"/>
+        <location line="+15"/>
+        <location line="+9"/>
+        <location line="+6"/>
+        <location line="+19"/>
+        <location line="+335"/>
+        <location line="+24"/>
+        <source>Could not open media source.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-403"/>
+        <source>Invalid source type.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+377"/>
+        <source>Could not locate media source.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Could not open audio device. The device is already in use.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Could not decode media source.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::VolumeSlider</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/>
+        <location line="+18"/>
+        <source>Volume: %1%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-15"/>
+        <location line="+18"/>
+        <location line="+54"/>
+        <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Q3Accel</name>
+    <message>
+        <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/>
+        <source>%1, %2 not defined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Ambiguous %1 not handled</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Q3DataTable</name>
+    <message>
+        <location filename="../src/qt3support/sql/q3datatable.cpp" line="+285"/>
+        <source>True</source>
+        <translation type="unfinished">×××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>False</source>
+        <translation type="unfinished">×©×§×š</translation>
+    </message>
+    <message>
+        <location line="+505"/>
+        <source>Insert</source>
+        <translation type="unfinished">×××¡×£</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Update</source>
+        <translation type="unfinished">×¢×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete</source>
+        <translation type="unfinished">×××§</translation>
+    </message>
+</context>
+<context>
+    <name>Q3FileDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+864"/>
+        <source>Copy or Move a File</source>
+        <translation type="unfinished">××¢×ª×§ ×× ××¢××š ×§×××¥</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Read: %1</source>
+        <translation type="unfinished">×§×š×: %1</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+30"/>
+        <source>Write: %1</source>
+        <translation type="unfinished">××ª××: %1</translation>
+    </message>
+    <message>
+        <location line="-22"/>
+        <location line="+1575"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+    <message>
+        <location line="-157"/>
+        <location line="+49"/>
+        <location line="+2153"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+110"/>
+        <source>All Files (*)</source>
+        <translation type="unfinished">×× ××§××Š×× (*)</translation>
+    </message>
+    <message>
+        <location line="-2089"/>
+        <source>Name</source>
+        <translation type="unfinished">×©×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Size</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Type</source>
+        <translation type="unfinished">×¡××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Date</source>
+        <translation type="unfinished">×ª××š××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Attributes</source>
+        <translation type="unfinished">×××€××× ××</translation>
+    </message>
+    <message>
+        <location line="+35"/>
+        <location line="+2031"/>
+        <source>&amp;OK</source>
+        <translation type="unfinished">&amp;×××©××š</translation>
+    </message>
+    <message>
+        <location line="-1991"/>
+        <source>Look &amp;in:</source>
+        <translation type="unfinished">&amp;××€×© ×:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <location line="+1981"/>
+        <location line="+16"/>
+        <source>File &amp;name:</source>
+        <translation type="unfinished">&amp;×©× ××§×××¥:</translation>
+    </message>
+    <message>
+        <location line="-1996"/>
+        <source>File &amp;type:</source>
+        <translation type="unfinished">&amp;×¡×× ××§×××¥:</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Back</source>
+        <translation type="unfinished">××××š×</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>One directory up</source>
+        <translation type="unfinished">×¡×€×š×× ×××ª ×××¢××</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Create New Folder</source>
+        <translation type="unfinished">×Š××š ×ª××§×× ×××©×</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>List View</source>
+        <translation type="unfinished">×ª×Š×××ª ×š×©×××</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Detail View</source>
+        <translation type="unfinished">×ª×Š×××ª ×€×š×××</translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Preview File Info</source>
+        <translation type="unfinished">×ª×Š××× ××§×××× ×©× ×€×š×× ××§×××¥</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Preview File Contents</source>
+        <translation type="unfinished">×ª×Š××× ××§×××× ×©× ×ª××× ××§×××¥</translation>
+    </message>
+    <message>
+        <location line="+88"/>
+        <source>Read-write</source>
+        <translation type="unfinished">×§×š×××-××ª×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Read-only</source>
+        <translation type="unfinished">×§×š×××-××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Write-only</source>
+        <translation type="unfinished">××ª×××-××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Inaccessible</source>
+        <translation type="unfinished">×× × ×××©</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Symlink to File</source>
+        <translation type="unfinished">×§××©××š ×¡××× ××§×××¥</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Symlink to Directory</source>
+        <translation type="unfinished">×§××©××š ×¡××× ××¡×€×š××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Symlink to Special</source>
+        <translation type="unfinished">×§××©××š ×¡××× ××€×š×× ×××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>File</source>
+        <translation type="unfinished">×§×××¥</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Dir</source>
+        <translation type="unfinished">×¡×€×š××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Special</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+    <message>
+        <location line="+704"/>
+        <location line="+2100"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+337"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+    <message>
+        <location line="-1990"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+84"/>
+        <source>Save As</source>
+        <translation type="unfinished">×©×××š× ××©×</translation>
+    </message>
+    <message>
+        <location line="+642"/>
+        <location line="+5"/>
+        <location line="+355"/>
+        <source>&amp;Open</source>
+        <translation type="unfinished">&amp;×€×ª×</translation>
+    </message>
+    <message>
+        <location line="-357"/>
+        <location line="+341"/>
+        <source>&amp;Save</source>
+        <translation type="unfinished">&amp;×©×××š</translation>
+    </message>
+    <message>
+        <location line="-334"/>
+        <source>&amp;Rename</source>
+        <translation type="unfinished">×©&amp;× × ×©×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Delete</source>
+        <translation type="unfinished">&amp;×××§</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>R&amp;eload</source>
+        <translation type="unfinished">&amp;××¢× ××××©</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Sort by &amp;Name</source>
+        <translation type="unfinished">×¡××š ××€× ×©&amp;×</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Sort by &amp;Size</source>
+        <translation type="unfinished">×¡××š ××€× &amp;××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Sort by &amp;Date</source>
+        <translation type="unfinished">×¡××š ××€× &amp;×ª××š××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Unsorted</source>
+        <translation type="unfinished">&amp;××× ×¡××š</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Sort</source>
+        <translation type="unfinished">×¡××š</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Show &amp;hidden files</source>
+        <translation type="unfinished">××Š× ×§××Š×× &amp;×××¡×ª×š××</translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>the file</source>
+        <translation type="unfinished">××§×××¥</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>the directory</source>
+        <translation type="unfinished">××¡×€×š××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>the symlink</source>
+        <translation type="unfinished">××§××©××š ××¡×××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete %1</source>
+        <translation type="unfinished">×××§ ××ª %1</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
+        <translation type="unfinished">&lt;qt&gt;××× ××ª× ×××× ×©××š×Š×× × ×××××§ %1 &quot;%2&quot;?&lt;/qt&gt;</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Yes</source>
+        <translation type="unfinished">&amp;××</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;No</source>
+        <translation type="unfinished">&amp;××</translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>New Folder 1</source>
+        <translation type="unfinished">×ª××§×× ×××©× 1</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>New Folder</source>
+        <translation type="unfinished">×ª××§×× ×××©×</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>New Folder %1</source>
+        <translation type="unfinished">×ª××§×× ×××©× %1</translation>
+    </message>
+    <message>
+        <location line="+98"/>
+        <source>Find Directory</source>
+        <translation type="unfinished">××€×© ×¡×€×š××</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location line="+108"/>
+        <source>Directories</source>
+        <translation type="unfinished">×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location line="-2"/>
+        <source>Directory:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <location line="+1110"/>
+        <source>Error</source>
+        <translation type="unfinished">×©××××</translation>
+    </message>
+    <message>
+        <location line="-1109"/>
+        <source>%1
+File not found.
+Check path and filename.</source>
+        <translation type="unfinished">%1
+××§×××¥ ×× × ××Š×.
+××××§ ××ª ×× ×ª×× ×××ª ×©× ××§×××¥.</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="-289"/>
+        <source>All Files (*.*)</source>
+        <translation type="unfinished">×× ××§××Š×× (*.*)</translation>
+    </message>
+    <message>
+        <location line="+375"/>
+        <source>Open </source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+    <message>
+        <location line="+155"/>
+        <source>Select a Directory</source>
+        <translation type="unfinished">×××š ×¡×€×š××</translation>
+    </message>
+</context>
+<context>
+    <name>Q3LocalFs</name>
+    <message>
+        <location filename="../src/qt3support/network/q3localfs.cpp" line="+130"/>
+        <location line="+10"/>
+        <source>Could not read directory
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Could not create directory
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>Could not remove file or directory
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Could not rename
+%1
+to
+%2</source>
+        <translation type="unfinished">×× × ××ª× ××©× ××ª ××ª ××©× ×©×
+%1
+××
+%2</translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Could not open
+%1</source>
+        <translation type="unfinished">×× × ××ª× ××€×ª×× ××ª
+%1</translation>
+    </message>
+    <message>
+        <location line="+68"/>
+        <source>Could not write
+%1</source>
+        <translation type="unfinished">×× × ××ª× ×××ª×× ××ª
+%1</translation>
+    </message>
+</context>
+<context>
+    <name>Q3MainWindow</name>
+    <message>
+        <location filename="../src/qt3support/widgets/q3mainwindow.cpp" line="+2051"/>
+        <source>Line up</source>
+        <translation type="unfinished">×¡××š ××©××š×</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Customize...</source>
+        <translation type="unfinished">××ª××× ×××©××ª...</translation>
+    </message>
+</context>
+<context>
+    <name>Q3NetworkProtocol</name>
+    <message>
+        <location filename="../src/qt3support/network/q3networkprotocol.cpp" line="+854"/>
+        <source>Operation stopped by the user</source>
+        <translation type="unfinished">××€×¢××× ×××€×¡×§× ×¢× ××× ×××©×ª××©</translation>
+    </message>
+</context>
+<context>
+    <name>Q3ProgressDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3progressdialog.cpp" line="+224"/>
+        <location line="+61"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TabDialog</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3tabdialog.cpp" line="+189"/>
+        <location line="+814"/>
+        <source>OK</source>
+        <translation type="unfinished">×××©××š</translation>
+    </message>
+    <message>
+        <location line="-356"/>
+        <source>Apply</source>
+        <translation type="unfinished">×××</translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Defaults</source>
+        <translation type="unfinished">××š××š××ª ××××</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TextEdit</name>
+    <message>
+        <location filename="../src/qt3support/text/q3textedit.cpp" line="+5429"/>
+        <source>&amp;Undo</source>
+        <translation type="unfinished">&amp;×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Redo</source>
+        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished">&amp;××××š</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished">××¢&amp;×ª×§</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished">×&amp;×××§</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Clear</source>
+        <translation type="unfinished">× ×§×</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location line="+2"/>
+        <source>Select All</source>
+        <translation type="unfinished">×××š ×××</translation>
+    </message>
+</context>
+<context>
+    <name>Q3TitleBar</name>
+    <message>
+        <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+246"/>
+        <source>System</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Restore up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Minimize</source>
+        <translation type="unfinished">×××¢×š</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Restore down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Maximize</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Contains commands to manipulate the window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Puts a minimized back to normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Moves the window out of the way</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Puts a maximized window back to normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Makes the window full screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Closes the window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Displays the name of the window and contains controls to manipulate it</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Q3ToolBar</name>
+    <message>
+        <location filename="../src/qt3support/widgets/q3toolbar.cpp" line="+692"/>
+        <source>More...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Q3UrlOperator</name>
+    <message>
+        <location filename="../src/qt3support/network/q3urloperator.cpp" line="+386"/>
+        <location line="+260"/>
+        <location line="+4"/>
+        <source>The protocol `%1&apos; is not supported</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ××× × × ×ª××</translation>
+    </message>
+    <message>
+        <location line="-260"/>
+        <source>The protocol `%1&apos; does not support listing directories</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××Š××ª ×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The protocol `%1&apos; does not support creating new directories</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××Š××š×ª ×¡×€×š×××ª ×××©××ª</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The protocol `%1&apos; does not support removing files or directories</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¡×š×ª ×§××Š×× ×× ×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The protocol `%1&apos; does not support renaming files or directories</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ××©×× ×× ×©×××ª××× ×©× ×§××Š×× ×× ×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The protocol `%1&apos; does not support getting files</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ××××š××ª ×§××Š××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The protocol `%1&apos; does not support putting files</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¢×××ª ×§××Š××</translation>
+    </message>
+    <message>
+        <location line="+243"/>
+        <location line="+4"/>
+        <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
+        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¢×ª×§× ×× ××¢××š× ×©× ×§××Š×× ×× ×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location line="+237"/>
+        <location line="+1"/>
+        <source>(unknown)</source>
+        <translation type="unfinished">(×× ××××¢)</translation>
+    </message>
+</context>
+<context>
+    <name>Q3Wizard</name>
+    <message>
+        <location filename="../src/qt3support/dialogs/q3wizard.cpp" line="+177"/>
+        <source>&amp;Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt; &amp;Back</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Next &gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Finish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSocket</name>
+    <message>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+868"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+615"/>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+657"/>
+        <location line="+26"/>
+        <source>Host not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+3"/>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+4"/>
+        <source>Connection refused</source>
+        <translation type="unfinished">××××××š × ×××</translation>
+    </message>
+    <message>
+        <location line="+141"/>
+        <source>Connection timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-547"/>
+        <location line="+787"/>
+        <location line="+208"/>
+        <source>Operation on socket is not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+137"/>
+        <source>Socket operation timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+380"/>
+        <source>Socket is not connected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-8"/>
+        <source>Network unreachable</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSpinBox</name>
+    <message>
+        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1199"/>
+        <source>&amp;Step up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Step &amp;down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>&amp;Select All</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QApplication</name>
+    <message>
+        <location filename="../src/gui/kernel/qapplication.cpp" line="+2248"/>
+        <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>RTL</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.h" line="+352"/>
+        <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Incompatible Qt Library Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/>
+        <source>Activate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Activates the program&apos;s main window</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QAxSelect</name>
+    <message>
+        <location filename="../src/activeqt/container/qaxselect.ui"/>
+        <source>Select ActiveX Control</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>OK</source>
+        <translation type="unfinished">×××©××š</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>COM &amp;Object:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QCheckBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/>
+        <source>Uncheck</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Check</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Toggle</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QColorDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1253"/>
+        <source>Hu&amp;e:</source>
+        <translation>&amp;××××:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Sat:</source>
+        <translation>&amp;××š××××:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Val:</source>
+        <translation>&amp;×¢×š×:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Red:</source>
+        <translation>&amp;××××:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Green:</source>
+        <translation>&amp;××š××§:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Bl&amp;ue:</source>
+        <translation>&amp;××××:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A&amp;lpha channel:</source>
+        <translation>×¢&amp;×š××¥ ×××€×:</translation>
+    </message>
+    <message>
+        <location line="+101"/>
+        <source>Select Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+137"/>
+        <source>&amp;Basic colors</source>
+        <translation>&amp;×Š××¢×× ××¡××¡×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Custom colors</source>
+        <translation>×Š××¢×× &amp;×××ª×××× ×××©××ª</translation>
+    </message>
+    <message>
+        <source>&amp;Define Custom Colors &gt;&gt;</source>
+        <translation type="obsolete">&amp;××××š ×Š××¢×× ×××ª×××× ×××©××ª &gt;&gt;</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="obsolete">×××©××š</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">×××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Add to Custom Colors</source>
+        <translation>×&amp;××¡×£ ××Š××¢×× ×××ª×××× ×××©××ª</translation>
+    </message>
+    <message>
+        <source>Select color</source>
+        <translation type="obsolete">××××š×ª ×Š××¢</translation>
+    </message>
+</context>
+<context>
+    <name>QComboBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/>
+        <location line="+65"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="+544"/>
+        <source>False</source>
+        <translation type="unfinished">×©×§×š</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>True</source>
+        <translation type="unfinished">×××ª</translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+0"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+</context>
+<context>
+    <name>QCoreApplication</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/>
+        <source>%1: key is empty</source>
+        <comment>QSystemSemaphore</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1: unable to make key</source>
+        <comment>QSystemSemaphore</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1: ftok failed</source>
+        <comment>QSystemSemaphore</comment>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Driver</name>
+    <message>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1276"/>
+        <source>Unable to connect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+303"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to set autocommit</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Result</name>
+    <message>
+        <location line="-1043"/>
+        <location line="+243"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-206"/>
+        <source>Unable to prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+196"/>
+        <source>Unable to bind variable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+92"/>
+        <source>Unable to fetch record %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to fetch next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Unable to fetch first</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDateTimeEdit</name>
+    <message>
+        <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2295"/>
+        <source>AM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>am</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>PM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>pm</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDial</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/>
+        <source>QDial</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>SpeedoMeter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>SliderHandle</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qdialog.cpp" line="+597"/>
+        <source>What&apos;s This?</source>
+        <translation>×× ××?</translation>
+    </message>
+    <message>
+        <location line="-115"/>
+        <source>Done</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDialogButtonBox</name>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1866"/>
+        <location line="+464"/>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+561"/>
+        <source>OK</source>
+        <translation type="unfinished">×××©××š</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+3"/>
+        <source>Save</source>
+        <translation type="unfinished">×©×××š</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Save</source>
+        <translation type="unfinished">&amp;×©×××š</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Close</source>
+        <translation type="unfinished">&amp;×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Apply</source>
+        <translation type="unfinished">×××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Don&apos;t Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Discard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Yes</source>
+        <translation type="unfinished">&amp;××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Yes to &amp;All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;No</source>
+        <translation type="unfinished">&amp;××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>N&amp;o to All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Save All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Abort</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Retry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Ignore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Restore Defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-29"/>
+        <source>Close without Saving</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-27"/>
+        <source>&amp;OK</source>
+        <translation type="unfinished">&amp;×××©××š</translation>
+    </message>
+</context>
+<context>
+    <name>QDirModel</name>
+    <message>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+453"/>
+        <source>Name</source>
+        <translation type="unfinished">×©×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Size</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Kind</source>
+        <comment>Match OS X Finder</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Type</source>
+        <comment>All other platforms</comment>
+        <translation type="unfinished">×¡××</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Date Modified</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDockWidget</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/qaccessiblewidgets.cpp" line="+1239"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Dock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Float</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QDoubleSpinBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-537"/>
+        <source>More</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Less</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QErrorMessage</name>
+    <message>
+        <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+391"/>
+        <source>&amp;Show this message again</source>
+        <translation>&amp;××Š× ××××¢× ×× ×©× ××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;OK</source>
+        <translation>&amp;×××©××š</translation>
+    </message>
+    <message>
+        <location line="-200"/>
+        <source>Debug Message:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Warning:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Fatal Error:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QFile</name>
+    <message>
+        <location filename="../src/corelib/io/qfile.cpp" line="+708"/>
+        <location line="+141"/>
+        <source>Destination file exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-108"/>
+        <source>Cannot remove source file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+120"/>
+        <source>Cannot open %1 for input</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Cannot open for output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Failure to write block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Cannot create %1 for output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QFileDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+515"/>
+        <location line="+444"/>
+        <source>All Files (*)</source>
+        <translation>×× ××§××Š×× (*)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Back</source>
+        <translation type="unfinished">××××š×</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>List View</source>
+        <translation type="unfinished">×ª×Š×××ª ×š×©×××</translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Detail View</source>
+        <translation type="unfinished">×ª×Š×××ª ×€×š×××</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+414"/>
+        <location line="+1"/>
+        <source>File</source>
+        <translation type="unfinished">×§×××¥</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-461"/>
+        <source>Open</source>
+        <translation>×€×ª×</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save As</source>
+        <translation type="unfinished">×©×××š× ××©×</translation>
+    </message>
+    <message>
+        <location line="+678"/>
+        <location line="+50"/>
+        <location line="+1471"/>
+        <location line="+75"/>
+        <source>&amp;Open</source>
+        <translation>&amp;×€×ª×</translation>
+    </message>
+    <message>
+        <location line="-1596"/>
+        <location line="+50"/>
+        <source>&amp;Save</source>
+        <translation>&amp;×©×××š</translation>
+    </message>
+    <message>
+        <location line="-699"/>
+        <source>&amp;Rename</source>
+        <translation type="unfinished">×©&amp;× × ×©×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Delete</source>
+        <translation type="unfinished">&amp;×××§</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Show &amp;hidden files</source>
+        <translation type="unfinished">××Š× ×§××Š×× &amp;×××¡×ª×š××</translation>
+    </message>
+    <message>
+        <location line="+1964"/>
+        <source>New Folder</source>
+        <translation type="unfinished">×ª××§×× ×××©×</translation>
+    </message>
+    <message>
+        <location line="-1999"/>
+        <source>Find Directory</source>
+        <translation type="unfinished">××€×© ×¡×€×š××</translation>
+    </message>
+    <message>
+        <location line="+685"/>
+        <source>Directories</source>
+        <translation>×¡×€×š×××ª</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+160"/>
+        <source>All Files (*.*)</source>
+        <translation type="unfinished">×× ××§××Š×× (*.*)</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+832"/>
+        <source>%1 already exists.
+Do you want to replace it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/>
+        <source>My Computer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Parent Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Files of type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1496"/>
+        <location line="+648"/>
+        <source>Directory:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+794"/>
+        <location line="+862"/>
+        <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-218"/>
+        <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Are sure you want to delete &apos;%1&apos;?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Could not delete directory.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+407"/>
+        <source>Recent Places</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="-4"/>
+        <source>Drive</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Unknown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2525"/>
+        <source>Show </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+7"/>
+        <source>&amp;New Folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+656"/>
+        <location line="+38"/>
+        <source>&amp;Choose</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qsidebar.cpp" line="+418"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-687"/>
+        <location line="+652"/>
+        <source>File &amp;name:</source>
+        <translation type="unfinished">&amp;×©× ××§×××¥:</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Look in:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
+        <source>Create New Folder</source>
+        <translation type="unfinished">×Š××š ×ª××§×× ×××©×</translation>
+    </message>
+</context>
+<context>
+    <name>QFileSystemModel</name>
+    <message>
+        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+744"/>
+        <source>%1 TB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1 GB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1 MB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>%1 KB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>%1 bytes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+77"/>
+        <source>Invalid filename</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+63"/>
+        <source>Name</source>
+        <translation type="unfinished">×©×</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Size</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Kind</source>
+        <comment>Match OS X Finder</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Type</source>
+        <comment>All other platforms</comment>
+        <translation type="unfinished">×¡××</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Date Modified</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+234"/>
+        <source>My Computer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Computer</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QFontDatabase</name>
+    <message>
+        <location filename="../src/gui/text/qfontdatabase.cpp" line="+90"/>
+        <location line="+1176"/>
+        <source>Normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1173"/>
+        <location line="+12"/>
+        <location line="+1149"/>
+        <source>Bold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1158"/>
+        <location line="+1160"/>
+        <source>Demi Bold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1157"/>
+        <location line="+18"/>
+        <location line="+1135"/>
+        <source>Black</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1145"/>
+        <source>Demi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location line="+1145"/>
+        <source>Light</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1004"/>
+        <location line="+1007"/>
+        <source>Italic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1004"/>
+        <location line="+1006"/>
+        <source>Oblique</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+705"/>
+        <source>Any</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Latin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Greek</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cyrillic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Armenian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Hebrew</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Arabic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Syriac</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Thaana</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Devanagari</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Bengali</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Gurmukhi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Gujarati</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Oriya</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Tamil</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Telugu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Kannada</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Malayalam</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Sinhala</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Thai</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Lao</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Tibetan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Myanmar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Georgian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Khmer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Simplified Chinese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Traditional Chinese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Japanese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Korean</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Symbol</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Ogham</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Runic</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QFontDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+772"/>
+        <source>&amp;Font</source>
+        <translation>&amp;×××€×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Font st&amp;yle</source>
+        <translation>&amp;×¡×× ×× ×××€×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Size</source>
+        <translation>××&amp;××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Effects</source>
+        <translation>××€×§×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Stri&amp;keout</source>
+        <translation>×§× &amp;×××Š×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Underline</source>
+        <translation>×§× &amp;×ª××ª×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Sample</source>
+        <translation>×××××</translation>
+    </message>
+    <message>
+        <location line="-603"/>
+        <location line="+247"/>
+        <source>Select Font</source>
+        <translation>×××š ×××€×</translation>
+    </message>
+    <message>
+        <location line="+357"/>
+        <source>Wr&amp;iting System</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QFtp</name>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+2303"/>
+        <source>Host %1 found</source>
+        <translation type="unfinished">××××š× %1 × ××Š×</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Host found</source>
+        <translation type="unfinished">××××š× × ××Š×</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="+1003"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1456"/>
+        <location line="+1451"/>
+        <source>Connected to host %1</source>
+        <translation>×××××š ××××š× %1</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+7"/>
+        <source>Connected to host</source>
+        <translation type="unfinished">×××××š ××××š×</translation>
+    </message>
+    <message>
+        <location line="-5"/>
+        <source>Connection to %1 closed</source>
+        <translation type="unfinished">××××××š ×× %1 × ×¡××š</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qftp.cpp" line="+1375"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-243"/>
+        <location line="+250"/>
+        <source>Connection closed</source>
+        <translation>××××××š × ×¡××š</translation>
+    </message>
+    <message>
+        <location line="-1487"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1566"/>
+        <source>Host %1 not found</source>
+        <translation type="unfinished">××××š× %1 ×× × ××Š×</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+4"/>
+        <source>Connection refused to host %1</source>
+        <translation type="unfinished">××××××š ×× ××××š× %1 × ×××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Connection timed out to host %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+501"/>
+        <location line="+29"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+458"/>
+        <location line="+728"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+889"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/>
+        <source>Connecting to host failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Login failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Listing directory failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Changing directory failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Downloading file failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Uploading file failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Removing file failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Creating directory failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
+        <source>Removing directory failed:
+%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-1524"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1356"/>
+        <source>Not connected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+396"/>
+        <location filename="../src/qt3support/network/q3ftp.cpp" line="+332"/>
+        <source>Connection refused for data connection</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfo</name>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfoAgent</name>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+178"/>
+        <location line="+9"/>
+        <location line="+64"/>
+        <location line="+31"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+180"/>
+        <location line="+9"/>
+        <location line="+40"/>
+        <location line="+27"/>
+        <source>Host not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-44"/>
+        <location line="+39"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-34"/>
+        <location line="+29"/>
+        <source>Unknown address type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-19"/>
+        <location line="+27"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QHttp</name>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+876"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+1836"/>
+        <source>Connection refused</source>
+        <translation>××××××š × ×××</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="+2631"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+3"/>
+        <source>Host %1 not found</source>
+        <translation>××××š× %1 ×× × ××Š×</translation>
+    </message>
+    <message>
+        <location line="-62"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-45"/>
+        <source>Wrong content length</source>
+        <translation>×××š× ×ª××× ×©×××</translation>
+    </message>
+    <message>
+        <location line="-2204"/>
+        <source>HTTPS connection requested but SSL support not compiled in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2286"/>
+        <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 × ××©××</translation>
+    </message>
+    <message>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+450"/>
+        <source>Host %1 found</source>
+        <translation type="unfinished">××××š× %1 × ××Š×</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Host found</source>
+        <translation type="unfinished">××××š× × ××Š×</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>Connected to host %1</source>
+        <translation type="unfinished">×××××š ××××š× %1</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Connected to host</source>
+        <translation type="unfinished">×××××š ××××š×</translation>
+    </message>
+    <message>
+        <location line="-11"/>
+        <source>Connection to %1 closed</source>
+        <translation type="unfinished">××××××š ×× %1 × ×¡××š</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+14"/>
+        <source>Connection closed</source>
+        <translation type="unfinished">××××××š × ×¡××š</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttp.cpp" line="-1077"/>
+        <location line="+820"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-1152"/>
+        <location line="+567"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-568"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="-370"/>
+        <source>Request aborted</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+579"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+381"/>
+        <source>No server set to connect to</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+168"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+60"/>
+        <source>Server closed connection unexpectedly</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+151"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+113"/>
+        <source>Invalid HTTP response header</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Unknown authentication method</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+97"/>
+        <location line="+48"/>
+        <location filename="../src/qt3support/network/q3http.cpp" line="+40"/>
+        <location line="+47"/>
+        <source>Invalid HTTP chunked body</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Error writing response to device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-173"/>
+        <source>Proxy authentication required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Authentication required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-138"/>
+        <source>Connection refused (or timed out)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+6"/>
+        <source>Proxy requires authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Host requires authentication</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Data corrupted</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unknown protocol specified</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>SSL handshake failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QHttpSocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="-89"/>
+        <source>Did not receive HTTP response from proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Error parsing authentication request from proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Authentication required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Proxy denied connection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Error communicating with HTTP proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Proxy server not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Proxy connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Proxy server connection timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Proxy connection closed prematurely</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1428"/>
+        <source>Error opening database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Could not start transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseResult</name>
+    <message>
+        <location line="-1097"/>
+        <source>Unable to create BLOB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unable to write BLOB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Unable to open BLOB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Unable to read BLOB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+125"/>
+        <location line="+189"/>
+        <source>Could not find array</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-157"/>
+        <source>Could not get array data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+212"/>
+        <source>Could not get query info</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Could not start transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Could not allocate statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Could not prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location line="+7"/>
+        <source>Could not describe input statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Could not describe statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+115"/>
+        <source>Unable to close statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Unable to execute query</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+46"/>
+        <source>Could not fetch next item</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+160"/>
+        <source>Could not get statement info</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QIODevice</name>
+    <message>
+        <location filename="../src/corelib/global/qglobal.cpp" line="+1869"/>
+        <source>Permission denied</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Too many open files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>No such file or directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>No space left on device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qiodevice.cpp" line="+1536"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QInputContext</name>
+    <message>
+        <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+242"/>
+        <source>XIM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>XIM input method</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Windows input method</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mac OS X input method</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QInputDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/>
+        <source>Enter a value:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QLibrary</name>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary.cpp" line="+378"/>
+        <source>Could not mmap &apos;%1&apos;: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>Plugin verification data mismatch in &apos;%1&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Could not unmap &apos;%1&apos;: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+302"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+340"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-377"/>
+        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+280"/>
+        <source>The shared library was not found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+209"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+99"/>
+        <source>Cannot load library %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+26"/>
+        <source>Cannot unload library %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/>
+        <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QLineEdit</name>
+    <message>
+        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2680"/>
+        <source>&amp;Undo</source>
+        <translation type="unfinished">&amp;×××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Redo</source>
+        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished">&amp;××××š</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished">××¢&amp;×ª×§</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished">×&amp;×××§</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Select All</source>
+        <translation type="unfinished">×××š ×××</translation>
+    </message>
+    <message>
+        <location line="-6"/>
+        <source>Delete</source>
+        <translation type="unfinished">×××§</translation>
+    </message>
+</context>
+<context>
+    <name>QLocalServer</name>
+    <message>
+        <location filename="../src/network/socket/qlocalserver.cpp" line="+226"/>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+231"/>
+        <source>%1: Name error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="-8"/>
+        <source>%1: Permission denied</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1: Address in use</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location filename="../src/network/socket/qlocalserver_win.cpp" line="+158"/>
+        <source>%1: Unknown error %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QLocalSocket</name>
+    <message>
+        <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+132"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+134"/>
+        <source>%1: Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Remote closed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/>
+        <location line="+43"/>
+        <source>%1: Invalid name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Socket access error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Socket resource error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Socket operation timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: Datagram too large</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-48"/>
+        <source>%1: Connection error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
+        <source>%1: The socket operation is not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+10"/>
+        <source>%1: Unknown error %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1231"/>
+        <source>Unable to open database &apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Unable to connect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+127"/>
+        <source>Unable to begin transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLResult</name>
+    <message>
+        <location line="-922"/>
+        <source>Unable to fetch data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+176"/>
+        <source>Unable to execute query</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unable to store result</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+190"/>
+        <location line="+8"/>
+        <source>Unable to prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>Unable to reset statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+87"/>
+        <source>Unable to bind value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <location line="+21"/>
+        <source>Unable to bind outvalues</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-12"/>
+        <source>Unable to store statement results</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-253"/>
+        <source>Unable to execute next query</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Unable to store next result</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMdiArea</name>
+    <message>
+        <location filename="../src/gui/widgets/qmdiarea.cpp" line="+290"/>
+        <source>(Untitled)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMdiSubWindow</name>
+    <message>
+        <location filename="../src/gui/widgets/qmdisubwindow.cpp" line="+280"/>
+        <source>%1 - [%2]</source>
+        <translation type="unfinished">%1 - [%2]</translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <source>Minimize</source>
+        <translation type="unfinished">×××¢×š</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Restore Down</source>
+        <translation type="unfinished">×©×××š ××××</translation>
+    </message>
+    <message>
+        <location line="+707"/>
+        <source>&amp;Restore</source>
+        <translation type="unfinished">×©&amp;×××š</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Move</source>
+        <translation type="unfinished">×&amp;××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Size</source>
+        <translation type="unfinished">××&amp;××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Mi&amp;nimize</source>
+        <translation type="unfinished">&amp;×××¢×š</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ma&amp;ximize</source>
+        <translation type="unfinished">&amp;××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Stay on &amp;Top</source>
+        <translation type="unfinished">&amp;×ª××× ×¢××××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Close</source>
+        <translation type="unfinished">&amp;×¡×××š</translation>
+    </message>
+    <message>
+        <location line="-787"/>
+        <source>- [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>Maximize</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unshade</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Shade</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Restore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMenu</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/>
+        <location line="+225"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="-224"/>
+        <location line="+225"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+    <message>
+        <location line="-223"/>
+        <location line="+225"/>
+        <location line="+51"/>
+        <source>Execute</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMenuBar</name>
+    <message>
+        <source>Options</source>
+        <translation type="obsolete">××€×©×š××××ª</translation>
+    </message>
+</context>
+<context>
+    <name>QMessageBox</name>
+    <message>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1964"/>
+        <location line="+852"/>
+        <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/>
+        <location line="+8"/>
+        <source>OK</source>
+        <translation>×××©××š</translation>
+    </message>
+    <message>
+        <location line="+509"/>
+        <source>About Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-508"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="-1097"/>
+        <source>Show Details...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hide Details...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1570"/>
+        <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMultiInputContext</name>
+    <message>
+        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontext.cpp" line="+88"/>
+        <source>Select IM</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QMultiInputContextPlugin</name>
+    <message>
+        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+95"/>
+        <source>Multiple input method switcher</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Multiple input method switcher that uses the context menu of the text widgets</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNativeSocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qnativesocketengine.cpp" line="+206"/>
+        <source>The remote host closed the connection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Network operation timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Out of resources</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unsupported socket operation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Protocol type not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Invalid socket descriptor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Network unreachable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Permission denied</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Connection timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Connection refused</source>
+        <translation type="unfinished">××××××š × ×××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The bound address is already in use</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The address is not available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The address is protected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unable to send a message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unable to receive a message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unable to write</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Network error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Another socket is already listening on the same port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-66"/>
+        <source>Unable to initialize non-blocking socket</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Unable to initialize broadcast socket</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Host unreachable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Datagram was too large to send</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Operation on non-socket</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-3"/>
+        <source>The proxy type is invalid for this operation</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessCacheBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccesscachebackend.cpp" line="+65"/>
+        <source>Error opening %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFileBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+99"/>
+        <source>Request for opening non-local file %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Error opening %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+56"/>
+        <source>Write error writing to %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Cannot open %1: Path is a directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>Read error reading from %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFtpBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessftpbackend.cpp" line="+165"/>
+        <source>No suitable proxy found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Cannot open %1: is a directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+130"/>
+        <source>Logging in to %1 failed: authentication required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>Error while downloading %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Error while uploading %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessHttpBackend</name>
+    <message>
+        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+597"/>
+        <source>No suitable proxy found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReply</name>
+    <message>
+        <location line="+128"/>
+        <source>Error downloading %1 - server replied: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+68"/>
+        <source>Protocol &quot;%1&quot; is unknown</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReplyImpl</name>
+    <message>
+        <location line="+432"/>
+        <location line="+22"/>
+        <source>Operation canceled</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QOCIDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2069"/>
+        <source>Unable to logon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-144"/>
+        <source>Unable to initialize</source>
+        <comment>QOCIDriver</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+215"/>
+        <source>Unable to begin transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QOCIResult</name>
+    <message>
+        <location line="-963"/>
+        <location line="+161"/>
+        <location line="+15"/>
+        <source>Unable to bind column for batch execute</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to execute batch statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+302"/>
+        <source>Unable to goto next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+59"/>
+        <source>Unable to alloc statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Unable to bind value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QODBCDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1785"/>
+        <source>Unable to connect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unable to connect - Driver doesn&apos;t support all needed functionality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+242"/>
+        <source>Unable to disable autocommit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to enable autocommit</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QODBCResult</name>
+    <message>
+        <location line="-1218"/>
+        <location line="+349"/>
+        <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-332"/>
+        <location line="+626"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-555"/>
+        <source>Unable to fetch next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+279"/>
+        <source>Unable to prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+268"/>
+        <source>Unable to bind variable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+194"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-475"/>
+        <location line="+578"/>
+        <source>Unable to fetch last</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-672"/>
+        <source>Unable to fetch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Unable to fetch first</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Unable to fetch previous</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../src/gui/util/qdesktopservices_mac.cpp" line="+165"/>
+        <source>Home</source>
+        <translation type="unfinished">Home</translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/>
+        <source>Operation not supported on %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Invalid URI: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+175"/>
+        <source>Write error writing to %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Read error reading from %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>Socket error on %1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Remote host closed the connection prematurely on %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>Protocol error: packet of size 0 received</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/network/kernel/qhostinfo.cpp" line="+177"/>
+        <location line="+57"/>
+        <source>No host name given</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPPDOptionsModel</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1195"/>
+        <source>Name</source>
+        <translation type="unfinished">×©×</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Value</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/psql/qsql_psql.cpp" line="+763"/>
+        <source>Unable to connect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>Could not begin transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Could not commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Could not rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+358"/>
+        <source>Unable to subscribe</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Unable to unsubscribe</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLResult</name>
+    <message>
+        <location line="-1058"/>
+        <source>Unable to create query</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+374"/>
+        <source>Unable to prepare statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPageSetupWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+304"/>
+        <source>Centimeters (cm)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Millimeters (mm)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Inches (in)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Points (pt)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Paper</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Page size:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Width:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Height:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Paper source:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Orientation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Portrait</source>
+        <translation type="unfinished">××××š×</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Landscape</source>
+        <translation type="unfinished">××š×××</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reverse landscape</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reverse portrait</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Margins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>top margin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>left margin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>right margin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>bottom margin</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPluginLoader</name>
+    <message>
+        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+24"/>
+        <source>Unknown error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-68"/>
+        <source>The plugin was not loaded.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPrintDialog</name>
+    <message>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+98"/>
+        <source>locally connected</source>
+        <translation>×××××š×ª ××§××××ª</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <location line="+225"/>
+        <source>Aliases: %1</source>
+        <translation>×©×××ª × ××¡×€××: %1</translation>
+    </message>
+    <message>
+        <location line="+223"/>
+        <location line="+199"/>
+        <source>unknown</source>
+        <translation>×× ××××¢</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+268"/>
+        <source>OK</source>
+        <translation type="unfinished">×××©××š</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">×××××</translation>
+    </message>
+    <message>
+        <source>Print in color if available</source>
+        <translation type="obsolete">×××€×¡ ××Š××¢ ×× ××××š ××××</translation>
+    </message>
+    <message>
+        <source>Printer</source>
+        <translation type="obsolete">×××€×¡×ª</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+375"/>
+        <source>Print all</source>
+        <translation type="unfinished">×××€×¡ ×××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Print range</source>
+        <translation type="unfinished">×××× ×××€×¡×</translation>
+    </message>
+    <message>
+        <source>Print last page first</source>
+        <translation type="obsolete">×××€×¡ ××ª ××¢××× ××š××©×× ×××š××</translation>
+    </message>
+    <message>
+        <source>Number of copies:</source>
+        <translation type="obsolete">××¡×€×š ×¢××ª×§××:</translation>
+    </message>
+    <message>
+        <source>Paper format</source>
+        <translation type="obsolete">×ª×× ××ª × ×××š</translation>
+    </message>
+    <message>
+        <source>Portrait</source>
+        <translation type="obsolete">××××š×</translation>
+    </message>
+    <message>
+        <source>Landscape</source>
+        <translation type="obsolete">××š×××</translation>
+    </message>
+    <message>
+        <location line="-48"/>
+        <source>A0 (841 x 1189 mm)</source>
+        <translation>A0 (841 x 1189 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A1 (594 x 841 mm)</source>
+        <translation>A1 (594 x 841 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A2 (420 x 594 mm)</source>
+        <translation>A2 (420 x 594 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A3 (297 x 420 mm)</source>
+        <translation>A3 (297 x 420 mm)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>A5 (148 x 210 mm)</source>
+        <translation>A5 (148 x 210 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A6 (105 x 148 mm)</source>
+        <translation>A6 (105 x 148 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A7 (74 x 105 mm)</source>
+        <translation>A7 (74 x 105 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A8 (52 x 74 mm)</source>
+        <translation>A8 (52 x 74 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A9 (37 x 52 mm)</source>
+        <translation>A9 (37 x 52 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B0 (1000 x 1414 mm)</source>
+        <translation>B0 (1000 x 1414 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B1 (707 x 1000 mm)</source>
+        <translation>B1 (707 x 1000 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B2 (500 x 707 mm)</source>
+        <translation>B2 (500 x 707 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B3 (353 x 500 mm)</source>
+        <translation>B3 (353 x 500 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B4 (250 x 353 mm)</source>
+        <translation>B4 (250 x 353 mm)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>B6 (125 x 176 mm)</source>
+        <translation>B6 (125 x 176 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B7 (88 x 125 mm)</source>
+        <translation>B7 (88 x 125 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B8 (62 x 88 mm)</source>
+        <translation>B8 (62 x 88 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B9 (44 x 62 mm)</source>
+        <translation>B9 (44 x 62 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B10 (31 x 44 mm)</source>
+        <translation>B10 (31 x 44 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>C5E (163 x 229 mm)</source>
+        <translation>C5E (163 x 229 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>DLE (110 x 220 mm)</source>
+        <translation>DLE (110 x 220 mm)</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Folio (210 x 330 mm)</source>
+        <translation>Folio (210 x 330 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ledger (432 x 279 mm)</source>
+        <translation>Ledger (432 x 279 mm)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Tabloid (279 x 432 mm)</source>
+        <translation>Tabloid (279 x 432 mm)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>US Common #10 Envelope (105 x 241 mm)</source>
+        <translation>US Common #10 Envelope (105 x 241 mm)</translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+110"/>
+        <location line="+13"/>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/>
+        <source>Print</source>
+        <translation type="unfinished">×××€×¡</translation>
+    </message>
+    <message>
+        <source>File</source>
+        <translation type="obsolete">×§×××¥</translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/>
+        <source>Print To File ...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Other</source>
+        <translation type="obsolete">×××š</translation>
+    </message>
+    <message>
+        <location line="+80"/>
+        <source>File %1 is not writable.
+Please choose a different file name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1 already exists.
+Do you want to overwrite it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-208"/>
+        <source>File exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+227"/>
+        <source>Print selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/>
+        <source>%1 is a directory.
+Please choose a different file name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/>
+        <source>A0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A5</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A6</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A7</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A8</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>A9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B5</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B6</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B7</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B8</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>B10</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>C5E</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>DLE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Executive</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Folio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ledger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Legal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Letter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tabloid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>US Common #10 Envelope</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Custom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-522"/>
+        <location line="+68"/>
+        <source>&amp;Options &gt;&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-63"/>
+        <source>&amp;Print</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+67"/>
+        <source>&amp;Options &lt;&lt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+253"/>
+        <source>Print to File (PDF)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Print to File (Postscript)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Local file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Write %1 file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/>
+        <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPreviewDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/>
+        <location line="+12"/>
+        <source>Page Setup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+252"/>
+        <source>%1%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+79"/>
+        <source>Print Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>Next page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Previous page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>First page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Last page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Fit width</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Fit page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Zoom in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zoom out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Portrait</source>
+        <translation type="unfinished">××××š×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Landscape</source>
+        <translation type="unfinished">××š×××</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Show single page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Show facing pages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Show overview of all pages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Print</source>
+        <translation type="unfinished">×××€×¡</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page setup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+151"/>
+        <source>Export to PDF</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Export to PostScript</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPropertiesDialog</name>
+    <message>
+        <source>Save</source>
+        <translation type="obsolete">×©×××š</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation type="obsolete">×××©××š</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPropertiesWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintpropertieswidget.ui"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Page</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Advanced</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPrintSettingsOutput</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintsettingsoutput.ui"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print range</source>
+        <translation type="unfinished">×××× ×××€×¡×</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Print all</source>
+        <translation type="unfinished">×××€×¡ ×××</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Pages from</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>to</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Output Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Copies:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Collate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Reverse</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Options</source>
+        <translation type="unfinished">××€×©×š××××ª</translation>
+    </message>
+    <message>
+        <location/>
+        <source>Color Mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Duplex Printing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Long side</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Short side</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QPrintWidget</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprintwidget.ui"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Printer</source>
+        <translation type="unfinished">×××€×¡×ª</translation>
+    </message>
+    <message>
+        <location/>
+        <source>&amp;Name:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>P&amp;roperties</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>Output &amp;file:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QProcess</name>
+    <message>
+        <location filename="../src/corelib/io/qprocess_unix.cpp" line="+475"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+147"/>
+        <source>Could not open input redirection for reading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+36"/>
+        <source>Could not open output redirection for writing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+235"/>
+        <source>Resource error (fork failure): %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+259"/>
+        <location line="+53"/>
+        <location line="+74"/>
+        <location line="+67"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+422"/>
+        <location line="+50"/>
+        <location line="+75"/>
+        <location line="+42"/>
+        <location line="+54"/>
+        <source>Process operation timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess.cpp" line="+533"/>
+        <location line="+52"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
+        <location line="+50"/>
+        <source>Error reading from process</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+47"/>
+        <location line="+779"/>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="+140"/>
+        <source>Error writing to process</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-709"/>
+        <source>Process crashed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+912"/>
+        <source>No program defined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/io/qprocess_win.cpp" line="-341"/>
+        <source>Process failed to start</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QProgressDialog</name>
+    <message>
+        <location filename="../src/gui/dialogs/qprogressdialog.cpp" line="+182"/>
+        <source>Cancel</source>
+        <translation>×××××</translation>
+    </message>
+</context>
+<context>
+    <name>QPushButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-8"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+</context>
+<context>
+    <name>QRadioButton</name>
+    <message>
+        <location line="+12"/>
+        <source>Check</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QRegExp</name>
+    <message>
+        <location filename="../src/corelib/tools/qregexp.cpp" line="+64"/>
+        <source>no error occurred</source>
+        <translation type="unfinished">×× ×××š×¢× ×× ×©××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>disabled feature used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>bad char class syntax</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>bad lookahead syntax</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>bad repetition syntax</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>invalid octal value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>missing left delim</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>unexpected end</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>met internal limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Driver</name>
+    <message>
+        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+396"/>
+        <source>Error to open database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <source>Unable to begin transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Unable to rollback Transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Result</name>
+    <message>
+        <location line="-323"/>
+        <source>Unable to fetch results</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+147"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+528"/>
+        <source>Error opening database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Error closing database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Unable to begin transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to commit transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unable to rollback transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteResult</name>
+    <message>
+        <location line="-400"/>
+        <location line="+66"/>
+        <location line="+8"/>
+        <source>Unable to fetch row</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+63"/>
+        <source>Unable to execute statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Unable to reset statement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+45"/>
+        <source>Unable to bind parameters</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Parameter count mismatch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-208"/>
+        <source>No query</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QScrollBar</name>
+    <message>
+        <location filename="../src/gui/widgets/qscrollbar.cpp" line="+448"/>
+        <source>Scroll here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Left edge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Right edge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Page left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+143"/>
+        <source>Page up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+4"/>
+        <source>Page down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Scroll left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Scroll right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-6"/>
+        <source>Line up</source>
+        <translation type="unfinished">×¡××š ××©××š×</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Line down</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSharedMemory</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+207"/>
+        <source>%1: unable to set key on lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+81"/>
+        <source>%1: create size is less then 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+168"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+148"/>
+        <source>%1: unable to lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+22"/>
+        <source>%1: unable to unlock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+78"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/>
+        <source>%1: permission denied</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/>
+        <source>%1: already exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
+        <source>%1: doesn&apos;t exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
+        <source>%1: out of resources</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/>
+        <source>%1: unknown error %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <source>%1: key is empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>%1: unix key file doesn&apos;t exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>%1: ftok failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/>
+        <source>%1: unable to make key</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>%1: system-imposed size restrictions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+53"/>
+        <source>%1: not attached</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-27"/>
+        <source>%1: invalid size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+68"/>
+        <source>%1: key error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>%1: size query failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QShortcut</name>
+    <message>
+        <location filename="../src/gui/kernel/qkeysequence.cpp" line="+373"/>
+        <source>Space</source>
+        <translation type="unfinished">×š×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Esc</source>
+        <translation type="unfinished">Esc</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tab</source>
+        <translation type="unfinished">Tab</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Backtab</source>
+        <translation type="unfinished">Backtab</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Backspace</source>
+        <translation type="unfinished">Backspace</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Return</source>
+        <translation type="unfinished">Return</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Enter</source>
+        <translation type="unfinished">Enter</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ins</source>
+        <translation type="unfinished">Ins</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Del</source>
+        <translation type="unfinished">Del</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Pause</source>
+        <translation type="unfinished">Pause</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Print</source>
+        <translation type="unfinished">×××€×¡</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>SysReq</source>
+        <translation type="unfinished">SysReq</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Home</source>
+        <translation type="unfinished">Home</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>End</source>
+        <translation type="unfinished">End</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Left</source>
+        <translation type="unfinished">×©××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Up</source>
+        <translation type="unfinished">×××¢××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Right</source>
+        <translation type="unfinished">×××× ×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Down</source>
+        <translation type="unfinished">××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>PgUp</source>
+        <translation type="unfinished">PgUp</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>PgDown</source>
+        <translation type="unfinished">PgDown</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>CapsLock</source>
+        <translation type="unfinished">CapsLock</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>NumLock</source>
+        <translation type="unfinished">NumLock</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ScrollLock</source>
+        <translation type="unfinished">ScrollLock</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Back</source>
+        <translation type="unfinished">××××š×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Stop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Volume Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Volume Mute</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Volume Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Bass Boost</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Bass Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Bass Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Treble Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Treble Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Play</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Stop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Previous</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Media Record</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Favorites</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Standby</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Open URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch Mail</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch Media</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (0)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (4)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (5)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (6)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (7)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (8)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (9)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (A)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (B)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (C)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (D)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (E)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Launch (F)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Print Screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Caps Lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Num Lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Number Lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Scroll Lock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Insert</source>
+        <translation type="unfinished">×××¡×£</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete</source>
+        <translation type="unfinished">×××§</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Escape</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>System Request</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Select</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Yes</source>
+        <translation type="unfinished">××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>No</source>
+        <translation type="unfinished">××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Context1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Context4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Call</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hangup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Flip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+527"/>
+        <location line="+122"/>
+        <source>Ctrl</source>
+        <translation type="unfinished">Ctrl</translation>
+    </message>
+    <message>
+        <location line="-121"/>
+        <location line="+125"/>
+        <source>Shift</source>
+        <translation type="unfinished">Shift</translation>
+    </message>
+    <message>
+        <location line="-124"/>
+        <location line="+122"/>
+        <source>Alt</source>
+        <translation type="unfinished">Alt</translation>
+    </message>
+    <message>
+        <location line="-121"/>
+        <location line="+117"/>
+        <source>Meta</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-25"/>
+        <source>+</source>
+        <translation type="unfinished">+</translation>
+    </message>
+    <message>
+        <location line="+46"/>
+        <source>F%1</source>
+        <translation type="unfinished">F%1</translation>
+    </message>
+    <message>
+        <location line="-720"/>
+        <source>Home Page</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSlider</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+151"/>
+        <source>Page left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Page up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Page right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Page down</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSocks5SocketEngine</name>
+    <message>
+        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-67"/>
+        <source>Connection to proxy refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Connection to proxy closed prematurely</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Proxy host not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Connection to proxy timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Proxy authentication failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Proxy authentication failed: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>SOCKS version 5 protocol error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>General SOCKSv5 server failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Connection not allowed by SOCKSv5 server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>TTL expired</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>SOCKSv5 command not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Address type not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+685"/>
+        <source>Network operation timed out</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSpinBox</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-574"/>
+        <source>More</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Less</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSql</name>
+    <message>
+        <location filename="../src/qt3support/sql/q3sqlmanager_p.cpp" line="+890"/>
+        <source>Delete</source>
+        <translation type="unfinished">×××§</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Delete this record?</source>
+        <translation type="unfinished">××× ×××××§ ×š×©××× ××?</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <location line="+16"/>
+        <location line="+36"/>
+        <source>Yes</source>
+        <translation type="unfinished">××</translation>
+    </message>
+    <message>
+        <location line="-51"/>
+        <location line="+16"/>
+        <location line="+36"/>
+        <source>No</source>
+        <translation type="unfinished">××</translation>
+    </message>
+    <message>
+        <location line="-44"/>
+        <source>Insert</source>
+        <translation type="unfinished">×××¡×£</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Update</source>
+        <translation type="unfinished">×¢×××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Save edits?</source>
+        <translation type="unfinished">××× ××©×××š ××ª ××¢×š×××?</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Confirm</source>
+        <translation type="unfinished">×××©××š</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cancel your edits?</source>
+        <translation type="unfinished">××× ×××× ××ª ××¢×š××× ×©××?</translation>
+    </message>
+</context>
+<context>
+    <name>QSslSocket</name>
+    <message>
+        <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+569"/>
+        <source>Unable to write data: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+119"/>
+        <source>Error while reading: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+96"/>
+        <source>Error during SSL handshake: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-524"/>
+        <source>Error creating SSL context (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Invalid or empty cipher list (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>Error creating SSL session, %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Error creating SSL session: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-61"/>
+        <source>Cannot provide a certificate with no key, %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Error loading local certificate, %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Error loading private key, %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Private key does not certificate public key, %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QSystemSemaphore</name>
+    <message>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-41"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+66"/>
+        <source>%1: out of resources</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+4"/>
+        <source>%1: permission denied</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: already exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1: does not exist</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+3"/>
+        <source>%1: unknown error %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QTDSDriver</name>
+    <message>
+        <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/>
+        <source>Unable to open connection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Unable to use database</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QTabBar</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="-326"/>
+        <source>Scroll Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QTcpServer</name>
+    <message>
+        <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/>
+        <source>Operation on socket is not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QTextControl</name>
+    <message>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+1973"/>
+        <source>&amp;Undo</source>
+        <translation type="unfinished">&amp;×××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Redo</source>
+        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished">&amp;××××š</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished">××¢&amp;×ª×§</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy &amp;Link Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished">×&amp;×××§</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete</source>
+        <translation type="unfinished">×××§</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Select All</source>
+        <translation type="unfinished">×××š ×××</translation>
+    </message>
+</context>
+<context>
+    <name>QToolButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/>
+        <location line="+6"/>
+        <source>Press</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <location line="+8"/>
+        <source>Open</source>
+        <translation type="unfinished">×€×ª×</translation>
+    </message>
+</context>
+<context>
+    <name>QUdpSocket</name>
+    <message>
+        <location filename="../src/network/socket/qudpsocket.cpp" line="+169"/>
+        <source>This platform does not support IPv6</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QUndoGroup</name>
+    <message>
+        <location filename="../src/gui/util/qundogroup.cpp" line="+386"/>
+        <source>Undo</source>
+        <translation type="unfinished">×××</translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Redo</source>
+        <translation type="unfinished">×©×××š</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoModel</name>
+    <message>
+        <location filename="../src/gui/util/qundoview.cpp" line="+101"/>
+        <source>&lt;empty&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QUndoStack</name>
+    <message>
+        <location filename="../src/gui/util/qundostack.cpp" line="+834"/>
+        <source>Undo</source>
+        <translation type="unfinished">×××</translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Redo</source>
+        <translation type="unfinished">×©×××š</translation>
+    </message>
+</context>
+<context>
+    <name>QUnicodeControlCharacterMenu</name>
+    <message>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/>
+        <source>LRM Left-to-right mark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>RLM Right-to-left mark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ZWJ Zero width joiner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ZWNJ Zero width non-joiner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>ZWSP Zero width space</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>LRE Start of left-to-right embedding</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>RLE Start of right-to-left embedding</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>LRO Start of left-to-right override</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>RLO Start of right-to-left override</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>PDF Pop directional formatting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Insert Unicode control character</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QWebFrame</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+692"/>
+        <source>Request cancelled</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Request blocked</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Cannot show URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Frame load interruped by policy change</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Cannot show mimetype</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>File does not exist</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QWebPage</name>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+382"/>
+        <source>Bad HTTP request</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
+        <source>Submit</source>
+        <comment>default label for Submit buttons in forms on web pages</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Submit</source>
+        <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Reset</source>
+        <comment>default label for Reset buttons in forms on web pages</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>This is a searchable index. Enter search keywords: </source>
+        <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Choose File</source>
+        <comment>title for file button used in HTML forms</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No file selected</source>
+        <comment>text to display in file button used in HTML forms when no file is selected</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open in New Window</source>
+        <comment>Open in New Window context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save Link...</source>
+        <comment>Download Linked File context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy Link</source>
+        <comment>Copy Link context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Image</source>
+        <comment>Open Image in New Window context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save Image</source>
+        <comment>Download Image context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy Image</source>
+        <comment>Copy Link context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Frame</source>
+        <comment>Open Frame in New Window context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Copy</source>
+        <comment>Copy context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Go Back</source>
+        <comment>Back context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Go Forward</source>
+        <comment>Forward context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Stop</source>
+        <comment>Stop context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Reload</source>
+        <comment>Reload context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Cut</source>
+        <comment>Cut context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Paste</source>
+        <comment>Paste context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No Guesses Found</source>
+        <comment>No Guesses Found context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Ignore</source>
+        <comment>Ignore Spelling context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Add To Dictionary</source>
+        <comment>Learn Spelling context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Search The Web</source>
+        <comment>Search The Web context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Look Up In Dictionary</source>
+        <comment>Look Up in Dictionary context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Open Link</source>
+        <comment>Open Link context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Ignore</source>
+        <comment>Ignore Grammar context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Spelling</source>
+        <comment>Spelling and Grammar context sub-menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Show Spelling and Grammar</source>
+        <comment>menu item title</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hide Spelling and Grammar</source>
+        <comment>menu item title</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Spelling</source>
+        <comment>Check spelling context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Spelling While Typing</source>
+        <comment>Check spelling while typing context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Check Grammar With Spelling</source>
+        <comment>Check grammar with spelling context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Fonts</source>
+        <comment>Font context sub-menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Bold</source>
+        <comment>Bold context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Italic</source>
+        <comment>Italic context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Underline</source>
+        <comment>Underline context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Outline</source>
+        <comment>Outline context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Direction</source>
+        <comment>Writing direction context sub-menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Text Direction</source>
+        <comment>Text direction context sub-menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Default</source>
+        <comment>Default writing direction context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>LTR</source>
+        <comment>Left to Right context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>RTL</source>
+        <comment>Right to Left context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Inspect</source>
+        <comment>Inspect Element context menu item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>No recent searches</source>
+        <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Recent searches</source>
+        <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Clear recent searches</source>
+        <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>Unknown</source>
+        <comment>Unknown filesize FTP directory listing item</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 (%2x%3 pixels)</source>
+        <comment>Title string for images</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+185"/>
+        <source>Web Inspector - %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/>
+        <source>Scroll here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Left edge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Right edge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Page left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Page up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Page right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Page down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Scroll left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Scroll right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Scroll down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/>
+        <source>%n file(s)</source>
+        <comment>number of chosen file</comment>
+        <translation type="unfinished">
+            <numerusform></numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1322"/>
+        <source>JavaScript Alert - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>JavaScript Confirm - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>JavaScript Prompt - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+333"/>
+        <source>Move the cursor to the next character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the previous character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the next word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the previous word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the next line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the previous line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the start of the line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the end of the line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the start of the block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the end of the block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the start of the document</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Move the cursor to the end of the document</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select all</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the next character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the previous character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the next word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the previous word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the next line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the previous line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the start of the line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the end of the line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the start of the block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the end of the block</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the start of the document</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Select to the end of the document</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete to the start of the word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete to the end of the word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>Insert a new paragraph</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Insert a new line</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QWhatsThisAction</name>
+    <message>
+        <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+522"/>
+        <source>What&apos;s This?</source>
+        <translation type="unfinished">×× ××?</translation>
+    </message>
+</context>
+<context>
+    <name>QWidget</name>
+    <message>
+        <location filename="../src/gui/kernel/qwidget.cpp" line="+5326"/>
+        <source>*</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QWizard</name>
+    <message>
+        <location filename="../src/gui/dialogs/qwizard.cpp" line="+649"/>
+        <source>Cancel</source>
+        <translation type="unfinished">×××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Help</source>
+        <translation type="unfinished">×¢××š×</translation>
+    </message>
+    <message>
+        <location line="-14"/>
+        <source>Go Back</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Continue</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Commit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Done</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-10"/>
+        <source>&lt; &amp;Back</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>&amp;Finish</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-8"/>
+        <source>&amp;Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>&amp;Next &gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QWorkspace</name>
+    <message>
+        <location filename="../src/gui/widgets/qworkspace.cpp" line="+1094"/>
+        <source>&amp;Restore</source>
+        <translation type="unfinished">×©&amp;×××š</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Move</source>
+        <translation type="unfinished">×&amp;××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Size</source>
+        <translation type="unfinished">&amp;×©× × ××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Mi&amp;nimize</source>
+        <translation type="unfinished">&amp;×××¢×š</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Ma&amp;ximize</source>
+        <translation type="unfinished">&amp;××××</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Close</source>
+        <translation type="unfinished">&amp;×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Stay on &amp;Top</source>
+        <translation type="unfinished">&amp;×ª××× ×¢××××</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location line="+1059"/>
+        <source>Sh&amp;ade</source>
+        <translation type="unfinished">&amp;××××</translation>
+    </message>
+    <message>
+        <location line="-278"/>
+        <location line="+60"/>
+        <source>%1 - [%2]</source>
+        <translation>%1 - [%2]</translation>
+    </message>
+    <message>
+        <location line="-1837"/>
+        <source>Minimize</source>
+        <translation type="unfinished">×××¢×š</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Restore Down</source>
+        <translation type="unfinished">×©×××š ××××</translation>
+    </message>
+    <message>
+        <location line="-4"/>
+        <source>Close</source>
+        <translation type="unfinished">×¡×××š</translation>
+    </message>
+    <message>
+        <location line="+2053"/>
+        <source>&amp;Unshade</source>
+        <translation type="unfinished">&amp;××× ×××××</translation>
+    </message>
+</context>
+<context>
+    <name>QXml</name>
+    <message>
+        <location filename="../src/xml/sax/qxml.cpp" line="+58"/>
+        <source>no error occurred</source>
+        <translation>×× ×××š×¢× ×× ×©××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error triggered by consumer</source>
+        <translation>× ××š×× ×©×××× ×¢× ××× ××Š×š××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>unexpected end of file</source>
+        <translation>×¡××£ ×§×××¥ ×× ×Š×€××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>more than one document type definition</source>
+        <translation>×××ª×š ×××××š× ×××ª ×©× ×¡×× ××¡××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing element</source>
+        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××š×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>tag mismatch</source>
+        <translation>××-××ª××× ××ª×××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing content</source>
+        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ××ª×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>unexpected character</source>
+        <translation>×ª× ×× ×Š×€××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>invalid name for processing instruction</source>
+        <translation>×©× ×× ×ª×§×£ ×¢×××š ×××š××ª ××¢××××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>version expected while reading the XML declaration</source>
+        <translation>××××ª× ×Š×€××× ×××š×¡× ××¢×ª ×§×š××× ××××š×× ×¢× XML</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>wrong value for standalone declaration</source>
+        <translation>×¢×š× ×©××× ×¢×××š ×××××š× ××¢×Š××××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+        <translation>××××ª× ×Š×€××× ×××š×× ×¢× ×§×××× ×× ×××š×× ×¢×Š××××ª ××¢×ª ×§×š×××ª ××××š×× ×¢× XML</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>standalone declaration expected while reading the XML declaration</source>
+        <translation>××××ª× ×Š×€××× ×××š×× ×¢×Š××××ª ××¢×ª ×§×š×××ª ××××š×× ×¢× XML</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing document type definition</source>
+        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ××××š×ª ×¡×× ×××¡××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>letter is expected</source>
+        <translation>××××ª× ×Š×€××× ×××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing comment</source>
+        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××¢×š×</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error occurred while parsing reference</source>
+        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××ª××××¡××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>internal general entity reference not allowed in DTD</source>
+        <translation>××ª××××¡××ª ××××©××ª ×××××ª ×€× ××××ª ××× × ×××ª×š×ª ×-DTD</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>external parsed general entity reference not allowed in attribute value</source>
+        <translation>××ª××××¡××ª ××××©××ª ×××××ª ××¢××××ª ×××Š×× ××ª ××× × ×××ª×š×ª ××¢×š× ××××€×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>external parsed general entity reference not allowed in DTD</source>
+        <translation>××ª××××¡××ª ××××©××ª ×××××ª ××¢××××ª ×××Š×× ××ª ××× × ×××ª×š×ª ×-DTD</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>unparsed entity reference in wrong context</source>
+        <translation>××ª××××¡××ª ××××©××ª ×× ××¢××××ª ×××§×©×š ×©×××</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>recursive entities</source>
+        <translation>×××©××ª ×š×§××š×¡××××ª</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>error in the text declaration of an external entity</source>
+        <translation>×©×××× ××××š××ª ××§×¡× ×©× ×××©××ª ×××Š×× ××ª</translation>
+    </message>
+</context>
+<context>
+    <name>QXmlStream</name>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="+592"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+1769"/>
+        <source>Extra content at end of document.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+222"/>
+        <source>Invalid entity value.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+107"/>
+        <source>Invalid XML character.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+259"/>
+        <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+309"/>
+        <source>Namespace prefix &apos;%1&apos; not declared</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+78"/>
+        <source>Attribute redefined.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+115"/>
+        <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>Invalid XML version string.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Unsupported XML version.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>%1 is an invalid encoding name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Encoding %1 is unsupported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Standalone accepts only yes or no.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid attribute in XML declaration.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Premature end of document.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid document.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>Expected </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>, but got &apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Unexpected &apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+210"/>
+        <source>Expected character data.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-995"/>
+        <source>Recursive entity detected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+516"/>
+        <source>Start tag expected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+222"/>
+        <source>XML declaration not at start of document.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-31"/>
+        <source>NDATA in parameter entity declaration.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>%1 is an invalid processing instruction name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Invalid processing instruction name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-521"/>
+        <location line="+12"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+164"/>
+        <location line="+53"/>
+        <source>Illegal namespace declaration.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+15"/>
+        <source>Invalid XML name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Opening and ending tag mismatch.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Reference to unparsed entity &apos;%1&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-13"/>
+        <location line="+61"/>
+        <location line="+40"/>
+        <source>Entity &apos;%1&apos; not declared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-26"/>
+        <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>Invalid character reference.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-75"/>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-823"/>
+        <source>Encountered incorrectly encoded content.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+274"/>
+        <source>The standalone pseudo attribute must appear after the encoding.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/>
+        <source>%1 is an invalid PUBLIC identifier.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QtXmlPatterns</name>
+    <message>
+        <location filename="../src/xmlpatterns/acceltree/qacceltreebuilder.cpp" line="+205"/>
+        <source>An %1-attribute with value %2 has already been declared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>An %1-attribute must have a valid %2 as value, which %3 isn&apos;t.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/>
+        <source>Network timeout.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/>
+        <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+60"/>
+        <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+80"/>
+        <source>Year %1 is invalid because it begins with %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>Day %1 is outside the range %2..%3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Month %1 is outside the range %2..%3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Overflow: Can&apos;t represent date %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Day %1 is invalid for month %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Time %1:%2:%3.%4 is invalid.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+115"/>
+        <source>Overflow: Date can&apos;t be represented.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/>
+        <location line="+15"/>
+        <source>At least one component must be present.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>At least one time component must appear after the %1-delimiter.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qabstractfloatmathematician.cpp" line="+64"/>
+        <source>No operand in an integer division, %1, can be %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>The first operand in an integer division, %1, cannot be infinity (%2).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>The second operand in a division, %1, cannot be zero (%2).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/>
+        <source>%1 is not a valid value of type %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/>
+        <source>When casting to %1 from %2, the source value cannot be %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+65"/>
+        <source>Integer division (%1) by zero (%2) is undefined.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Division (%1) by zero (%2) is undefined.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Modulus division (%1) by zero (%2) is undefined.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+122"/>
+        <location line="+32"/>
+        <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-20"/>
+        <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qatomicvalue.cpp" line="+79"/>
+        <source>A value of type %1 cannot have an Effective Boolean Value.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/>
+        <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/>
+        <source>Value %1 of type %2 exceeds maximum (%3).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Value %1 of type %2 is below minimum (%3).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+91"/>
+        <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>%1 is not valid as a value of type %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+207"/>
+        <source>Operator %1 cannot be used on type %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="+66"/>
+        <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+88"/>
+        <source>Type error in cast, expected %1, received %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcastingplatform.cpp" line="+134"/>
+        <source>No casting is possible with %1 as the target type.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>It is not possible to cast from %1 to %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>It&apos;s not possible to cast the value %1 of type %2 to %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Failure when casting from %1 to %2: %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/>
+        <source>A comment cannot contain %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>A comment cannot end with a %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcomparisonplatform.cpp" line="+167"/>
+        <source>No comparisons can be done involving the type %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Operator %1 is not available between atomic values of type %2 and %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qdocumentcontentvalidator.cpp" line="+86"/>
+        <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+169"/>
+        <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>No template by name %1 exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="+106"/>
+        <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+32"/>
+        <source>A positional predicate must evaluate to a single numeric value.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/>
+        <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qpath.cpp" line="+109"/>
+        <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/>
+        <source>The data of a processing instruction cannot contain the string %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/>
+        <source>No namespace binding exists for the prefix %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+156"/>
+        <source>No namespace binding exists for the prefix %1 in %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/>
+        <source>%1 is an invalid %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/>
+        <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
+        <translation type="unfinished">
+            <numerusform></numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location line="+11"/>
+        <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
+        <translation type="unfinished">
+            <numerusform></numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+120"/>
+        <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+74"/>
+        <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+91"/>
+        <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/>
+        <source>%1 is not a valid XML 1.0 character.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qcomparingaggregator.cpp" line="+197"/>
+        <source>The first argument to %1 cannot be of type %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/>
+        <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/>
+        <source>%1 was called.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+94"/>
+        <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/>
+        <source>%1 matches newline characters</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>%1 and %2 match the start and end of a line.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Matches are case insensitive</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Whitespace characters are removed, except when they appear in character classes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+99"/>
+        <source>%1 is an invalid regular expression pattern: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+30"/>
+        <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/>
+        <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+347"/>
+        <source>It will not be possible to retrieve %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/>
+        <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+279"/>
+        <source>The default collection is undefined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>%1 cannot be retrieved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/>
+        <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+87"/>
+        <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>%1 is not a whole number of minutes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/>
+        <source>Required cardinality is %1; got cardinality %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/>
+        <source>The item %1 did not match the required type %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+379"/>
+        <location line="+7253"/>
+        <source>%1 is an unknown schema type.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-6971"/>
+        <source>Only one %1 declaration can occur in the query prolog.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+188"/>
+        <source>The initialization of variable %1 depends on itself</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+63"/>
+        <source>No variable by name %1 exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/>
+        <source>The variable %1 is unused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2841"/>
+        <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+55"/>
+        <source>No function with signature %1 is available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <location line="+10"/>
+        <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Namespace declarations must occur before function, variable, and option declarations.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Module imports must occur before function, variable, and option declarations.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+200"/>
+        <source>It is not possible to redeclare prefix %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Prefix %1 is already declared in the prolog.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+95"/>
+        <source>The name of an option must have a prefix. There is no default namespace for options.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+171"/>
+        <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>The target namespace of a %1 cannot be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>The module import feature is not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+52"/>
+        <source>No value is available for the external variable by name %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-4154"/>
+        <source>A construct was encountered which only is allowed in XQuery.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+118"/>
+        <source>A template by name %1 has already been declared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3581"/>
+        <source>The keyword %1 cannot occur with any other mode name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+29"/>
+        <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+312"/>
+        <source>A variable by name %1 has already been declared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+135"/>
+        <source>A stylesheet function must have a prefixed name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+34"/>
+        <source>A function already exists with the signature %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+37"/>
+        <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+179"/>
+        <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+63"/>
+        <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+126"/>
+        <source>%1 is an invalid template mode name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+758"/>
+        <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+267"/>
+        <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+129"/>
+        <source>The %1-axis is unsupported in XQuery</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1150"/>
+        <source>%1 is not a valid name for a processing-instruction.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-7029"/>
+        <source>%1 is not a valid numeric literal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6165"/>
+        <source>No function by name %1 is available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+102"/>
+        <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>%1 is an invalid namespace URI.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>It is not possible to bind to the prefix %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Two namespace declaration attributes have the same name: %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+89"/>
+        <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>An attribute by name %1 has already appeared on this element.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+61"/>
+        <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+458"/>
+        <source>The name %1 does not refer to any schema type.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+145"/>
+        <location line="+71"/>
+        <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>The name of an extension expression must be in a namespace.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/>
+        <source>empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>zero or one</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>exactly one</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>one or more</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>zero or more</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+63"/>
+        <source>Required type is %1, but %2 was found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Promoting %1 to %2 may cause loss of precision.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+49"/>
+        <source>The focus is undefined.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+86"/>
+        <source>It&apos;s not possible to add attributes after any other kind of node.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>An attribute by name %1 has already been created.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/>
+        <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="+314"/>
+        <source>%1 is an unsupported encoding.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qapplytemplate.cpp" line="+119"/>
+        <source>Ambiguous rule match.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/>
+        <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>The prefix must be a valid %1, which %2 is not.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>The prefix %1 cannot be bound.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qevaluationcache.cpp" line="+117"/>
+        <source>Circularity detected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="+145"/>
+        <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-71"/>
+        <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/functions/qunparsedtextfn.cpp" line="+65"/>
+        <source>The URI cannot have a fragment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+519"/>
+        <source>Element %1 is not allowed at this location.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Text nodes are not allowed at this location.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Parse error: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+108"/>
+        <source>Unknown XSL-T attribute %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Attribute %1 and %2 are mutually exclusive.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+166"/>
+        <source>In a simplified stylesheet module, attribute %1 must be present.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+72"/>
+        <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Element %1 must have at least one of the attributes %2 or %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+28"/>
+        <source>At least one mode must be specified in the %1-attribute on element %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qmaintainingreader.cpp" line="+183"/>
+        <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>The attribute %1 must appear on element %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>The element with local name %1 does not exist in XSL-T.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+123"/>
+        <source>Element %1 must come last.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>At least one %1-element must occur before %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Only one %1-element can appear.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+31"/>
+        <source>At least one %1-element must occur inside %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+125"/>
+        <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+270"/>
+        <source>Element %1 cannot have children.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+434"/>
+        <source>Element %1 cannot have a sequence constructor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+86"/>
+        <location line="+9"/>
+        <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>A parameter in a function cannot be declared to be a tunnel.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+149"/>
+        <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
+        <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Attribute %1 cannot have the value %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+58"/>
+        <source>The attribute %1 can only appear on the first %2 element.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+99"/>
+        <source>At least one %1 element must appear as child of %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VolumeSlider</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+67"/>
+        <source>Muted</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location line="+15"/>
+        <source>Volume: %1%</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/qt_help_cs.ts
===================================================================
--- /trunk/translations/qt_help_cs.ts	(revision 769)
+++ /trunk/translations/qt_help_cs.ts	(revision 769)
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs_CZ">
+<context>
+    <name>QCLuceneResultWidget</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/>
+        <source>Search Results</source>
+        <translation>VÃœsledky hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Note:</source>
+        <translation>PoznÃ¡mka:</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>The search results may not be complete since the documentation is still being indexed!</source>
+        <translation>NemusÃ­ bÃœt ukÃ¡zÃ¡ny vÅ¡echny vÃœsledky, protoÅŸe dokumentace je stÃ¡le jeÅ¡tÄ rejstÅÃ­kovÃ¡na!</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Your search did not match any documents.</source>
+        <translation>Nebyly nalezeny ÅŸÃ¡dnÃ© dokumenty, kterÃ© by odpovÃ­daly vaÅ¡emu hledÃ¡nÃ­.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>(The reason for this might be that the documentation is still being indexed.)</source>
+        <translation>(DÅ¯vodem pro to by mohlo bÃœt, ÅŸe dokumentace je stÃ¡le jeÅ¡tÄ rejstÅÃ­kovÃ¡na.)</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpCollectionHandler</name>
+    <message>
+        <source>The collection file is not set up yet!</source>
+        <translation type="obsolete">Soubor se sbÃ­rkou jeÅ¡tÄ nenÃ­ zÅÃ­zen!</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/>
+        <source>The collection file &apos;%1&apos; is not set up yet!</source>
+        <translation>Soubor se sbÃ­rkou &apos;%1&apos; jeÅ¡tÄ nenÃ­ zÅÃ­zen!</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Cannot load sqlite database driver!</source>
+        <translation>DatabÃ¡zovÃœ ovladaÄ pro SQLite nelze nahrÃ¡t!</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <location line="+49"/>
+        <source>Cannot open collection file: %1</source>
+        <translation>Nelze otevÅÃ­t soubor se sbÃ­rkou: %1</translation>
+    </message>
+    <message>
+        <location line="-40"/>
+        <source>Cannot create tables in file %1!</source>
+        <translation>V souboru %1 nelze vytvoÅit ÅŸÃ¡dnÃ© tabulky!</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>The collection file &apos;%1&apos; already exists!</source>
+        <translation>Soubor se sbÃ­rkou &apos;%1&apos; jiÅŸ existuje!</translation>
+    </message>
+    <message>
+        <location line="+148"/>
+        <source>Unknown filter &apos;%1&apos;!</source>
+        <translation>NeznÃ¡mÃœ filtr &apos;%1&apos;!</translation>
+    </message>
+    <message>
+        <location line="+105"/>
+        <source>Invalid documentation file &apos;%1&apos;!</source>
+        <translation>NeplatnÃœ soubor s dokumentacÃ­ &apos;%1&apos;!</translation>
+    </message>
+    <message>
+        <location line="+167"/>
+        <source>Cannot register namespace &apos;%1&apos;!</source>
+        <translation>Nelze zapsat jmennÃœ prostor %1!</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Cannot open database &apos;%1&apos; to optimize!</source>
+        <translation>DatabÃ¡zi &apos;%1&apos; nelze otevÅÃ­t pro vyladÄnÃ­!</translation>
+    </message>
+    <message>
+        <source>The specified collection file already exists!</source>
+        <translation type="obsolete">ZadanÃœ soubor se sbÃ­rkou jiÅŸ existuje!</translation>
+    </message>
+    <message>
+        <location line="-438"/>
+        <source>Cannot create directory: %1</source>
+        <translation>Nelze vytvoÅit adresÃ¡Å: %1</translation>
+    </message>
+    <message>
+        <location line="+23"/>
+        <source>Cannot copy collection file: %1</source>
+        <translation>Nelze kopÃ­rovat soubor se sbÃ­rkou: %1</translation>
+    </message>
+    <message>
+        <source>Unknown filter!</source>
+        <translation type="obsolete">NeznÃ¡mÃœ filtr!</translation>
+    </message>
+    <message>
+        <location line="+174"/>
+        <source>Cannot register filter %1!</source>
+        <translation>Nelze zapsat filtr %1!</translation>
+    </message>
+    <message>
+        <location line="+44"/>
+        <source>Cannot open documentation file %1!</source>
+        <translation>Nelze otevÅÃ­t soubor s dokumentacÃ­: %1!</translation>
+    </message>
+    <message>
+        <source>Invalid documentation file!</source>
+        <translation type="obsolete">NeplatnÃœ soubor s dokumentacÃ­!</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>The namespace %1 was not registered!</source>
+        <translation>JmennÃœ prostor %1 nebyl zapsÃ¡n!</translation>
+    </message>
+    <message>
+        <location line="+120"/>
+        <source>Namespace %1 already exists!</source>
+        <translation>JmennÃœ prostor %1 jiÅŸ existuje!</translation>
+    </message>
+    <message>
+        <source>Cannot register namespace!</source>
+        <translation type="obsolete">JmennÃœ prostor nelze zapsat!</translation>
+    </message>
+    <message>
+        <source>Cannot open database to optimize!</source>
+        <translation type="obsolete">DatabÃ¡zi nelze otevÅÃ­t pro vyladÄnÃ­!</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpDBReader</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/>
+        <source>Cannot open database &apos;%1&apos; &apos;%2&apos;: %3</source>
+        <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment>
+        <translation>DatabÃ¡zi nelze otevÅÃ­t: &apos;%1&apos; &apos;%2&apos;: %3</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpEngineCore</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/>
+        <source>The specified namespace does not exist!</source>
+        <translation>ZadanÃœ jmennÃœ prostor neexistuje!</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpEngineCorePrivate</name>
+    <message>
+        <location line="-402"/>
+        <source>Cannot open documentation file %1: %2!</source>
+        <translation>Nelze otevÅÃ­t soubor s dokumentacÃ­ %1: %2!</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpGenerator</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+157"/>
+        <source>Invalid help data!</source>
+        <translation>NeplatnÃ¡ data s nÃ¡povÄdou!</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>No output file name specified!</source>
+        <translation>Pro vÃœstupnÃ­ soubor nebyl zadÃ¡n ÅŸÃ¡dnÃœ nÃ¡zev!</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Building up file structure...</source>
+        <translation>VytvÃ¡ÅÃ­ se uspoÅÃ¡dÃ¡nÃ­ souboru...</translation>
+    </message>
+    <message>
+        <location line="-7"/>
+        <source>The file %1 cannot be overwritten!</source>
+        <translation>Soubor %1 nelze pÅepsat!</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Cannot open data base file %1!</source>
+        <translation>Nelze otevÅÃ­t soubor s databÃ¡zÃ­: %1!</translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Cannot register namespace %1!</source>
+        <translation>Nelze zapsat jmennÃœ prostor %1!</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Insert custom filters...</source>
+        <translation>VloÅŸit uÅŸivatelsky stanovenÃ© filtry...</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Insert help data for filter section (%1 of %2)...</source>
+        <translation>VloÅŸit data s nÃ¡povÄdou pro oddÄlenÃ­ s filtrem (%1 von %2) einfÃŒgen...</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Documentation successfully generated.</source>
+        <translation>Dokumentace byla ÃºspÄÅ¡nÄ vytvoÅena.</translation>
+    </message>
+    <message>
+        <location line="+76"/>
+        <source>Some tables already exist!</source>
+        <translation>NÄkterÃ© tabulky jiÅŸ existujÃ­!</translation>
+    </message>
+    <message>
+        <location line="+61"/>
+        <source>Cannot create tables!</source>
+        <translation>Tabulky nelze vytvoÅit!</translation>
+    </message>
+    <message>
+        <location line="+86"/>
+        <source>Cannot register virtual folder!</source>
+        <translation>VirtuÃ¡lnÃ­ adresÃ¡Å nelze zapsat!</translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>Insert files...</source>
+        <translation>VloÅŸit soubory...</translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
+        <translation>OdkazovanÃœ soubor %1 se musÃ­ nachÃ¡zet v adresÃ¡Åi %2 nebo v jeho podadresÃ¡Åi. PÅeskakuje se.</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>The file %1 does not exist! Skipping it.</source>
+        <translation>Soubor %1 neexistuje! PÅeskakuje se.</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Cannot open file %1! Skipping it.</source>
+        <translation>Soubor %1 nelze otevÅÃ­t! PÅeskakuje se.</translation>
+    </message>
+    <message>
+        <location line="+131"/>
+        <source>The filter %1 is already registered!</source>
+        <translation>Filtr %1 je jiÅŸ zapsÃ¡n!</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Cannot register filter %1!</source>
+        <translation>Nelze zapsat filtr %1!</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Insert indices...</source>
+        <translation>VloÅŸit rejstÅÃ­ky...</translation>
+    </message>
+    <message>
+        <location line="+80"/>
+        <source>Insert contents...</source>
+        <translation>VloÅŸit obsah...</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Cannot insert contents!</source>
+        <translation>Obsah nelze vloÅŸit!</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Cannot register contents!</source>
+        <translation>Obsah nelze zapsat!</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpSearchQueryWidget</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+411"/>
+        <source>Search for:</source>
+        <translation>Hledat:</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Previous search</source>
+        <translation>PÅedchozÃ­ hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Next search</source>
+        <translation>DalÅ¡Ã­ hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Search</source>
+        <translation>Hledat</translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Advanced search</source>
+        <translation>RozÅ¡Ã­ÅenÃ© hledÃ¡nÃ­</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>words &lt;B&gt;similar&lt;/B&gt; to:</source>
+        <translation>Slova &lt;B&gt;podobnÃ¡&lt;/B&gt;:</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>&lt;B&gt;without&lt;/B&gt; the words:</source>
+        <translation>&lt;B&gt;beze&lt;/B&gt; slov:</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>with &lt;B&gt;exact phrase&lt;/B&gt;:</source>
+        <translation>s &lt;B&gt;pÅesnou skupinou slov&lt;/B&gt;:</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>with &lt;B&gt;all&lt;/B&gt; of the words:</source>
+        <translation>se &lt;B&gt;vÅ¡emi&lt;/B&gt; slovy:</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>with &lt;B&gt;at least one&lt;/B&gt; of the words:</source>
+        <translation>s &lt;B&gt;jakÃœmkoli&lt;/B&gt; ze slov:</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpSearchResultWidget</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+235"/>
+        <source>0 - 0 of 0 Hits</source>
+        <translation>0 - 0 z 0 zÃ¡sahÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>QHelpSearchResultWidgetPrivate</name>
+    <message>
+        <location line="-61"/>
+        <source>%1 - %2 of %3 Hits</source>
+        <translation>%1 - %2 z %3 zÃ¡sahÅ¯</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/>
+        <source>Untitled</source>
+        <translation>Bez nÃ¡zvu</translation>
+    </message>
+    <message>
+        <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/>
+        <source>Unknown token.</source>
+        <translation>NeznÃ¡mÃœ symbol.</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Unknown token. Expected &quot;QtHelpProject&quot;!</source>
+        <translation>NeznÃ¡mÃœ symbol. Byl oÄekÃ¡vÃ¡n &quot;QtHelpProject&quot;!</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Error in line %1: %2</source>
+        <translation>Chyba na ÅÃ¡dku %1: %2</translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>A virtual folder must not contain a &apos;/&apos; character!</source>
+        <translation>VirtuÃ¡lnÃ­ sloÅŸka nesmÃ­ obsahovat znak &apos;/&apos;!</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>A namespace must not contain a &apos;/&apos; character!</source>
+        <translation>JmennÃœ prostor nesmÃ­ obsahovat znak &apos;/&apos;!</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Missing namespace in QtHelpProject.</source>
+        <translation>ChybÄjÃ­cÃ­ jmennÃœ prostor QtHelpProject.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Missing virtual folder in QtHelpProject</source>
+        <translation>ChybÄjÃ­cÃ­ virtuÃ¡lnÃ­ sloÅŸka v QtHelpProject.</translation>
+    </message>
+    <message>
+        <location line="+88"/>
+        <source>Missing attribute in keyword at line %1.</source>
+        <translation>ChybÄjÃ­cÃ­ vlastnost v klÃ­ÄovÃ©m slovÄ na ÅÃ¡dku %1.</translation>
+    </message>
+    <message>
+        <location line="+123"/>
+        <source>The input file %1 could not be opened!</source>
+        <translation>VstupnÃ­ soubor %1 se nepodaÅilo otevÅÃ­t!</translation>
+    </message>
+</context>
+</TS>
Index: /trunk/translations/qt_help_ru.ts
===================================================================
--- /trunk/translations/qt_help_ru.ts	(revision 768)
+++ /trunk/translations/qt_help_ru.ts	(revision 769)
@@ -34,9 +34,9 @@
     <message>
         <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/>
-        <source>The collection file is not set up yet!</source>
-        <translation type="unfinished">Ð€Ð°Ð¹Ð» ÐœÐ°Ð±ÐŸÑÐ° ÐµÑÑ ÐœÐµ ÑÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœ!</translation>
-    </message>
-    <message>
-        <location line="+22"/>
+        <source>The collection file &apos;%1&apos; is not set up yet!</source>
+        <translation type="unfinished">Ð€Ð°Ð¹Ð» ÐœÐ°Ð±ÐŸÑÐ° &apos;%1&apos; ÐµÑÑ ÐœÐµ ÑÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœ!</translation>
+    </message>
+    <message>
+        <location line="+23"/>
         <source>Cannot load sqlite database driver!</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°Ð³ÑÑÐ·ÐžÑÑ ÐŽÑÐ°Ð¹Ð²ÐµÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
@@ -45,10 +45,10 @@
     <message>
         <location line="+11"/>
-        <location line="+48"/>
+        <location line="+49"/>
         <source>Cannot open collection file: %1</source>
         <translation type="unfinished">ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐŸÑÐºÑÑÑÑ ÑÐ°Ð¹Ð» ÐœÐ°Ð±ÐŸÑÐ°: %1</translation>
     </message>
     <message>
-        <location line="-39"/>
+        <location line="-40"/>
         <source>Cannot create tables in file %1!</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð±Ð»ÐžÑÑ Ð² ÑÐ°Ð¹Ð»Ðµ %1!</translation>
@@ -56,9 +56,30 @@
     <message>
         <location line="+16"/>
-        <source>The specified collection file already exists!</source>
-        <translation type="unfinished">Ð£ÐºÐ°Ð·Ð°ÐœÐœÑÐ¹ ÑÐ°Ð¹Ð»Ð° ÐœÐ°Ð±ÐŸÑÐ° ÑÐ¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ!</translation>
-    </message>
-    <message>
-        <location line="+5"/>
+        <source>The collection file &apos;%1&apos; already exists!</source>
+        <translation type="unfinished">Ð€Ð°Ð¹Ð» ÐœÐ°Ð±ÐŸÑÐ° &apos;%1&apos; ÑÐ¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ!</translation>
+    </message>
+    <message>
+        <location line="+148"/>
+        <source>Unknown filter &apos;%1&apos;!</source>
+        <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÑÐ¹ ÑÐžÐ»ÑÑÑ &apos;%1&apos;!</translation>
+    </message>
+    <message>
+        <location line="+105"/>
+        <source>Invalid documentation file &apos;%1&apos;!</source>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐ°Ð¹Ð» ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÐž &apos;%1&apos;!</translation>
+    </message>
+    <message>
+        <location line="+167"/>
+        <source>Cannot register namespace &apos;%1&apos;!</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°ÑÑ Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸ ÐžÐŒÑÐœ %1!</translation>
+    </message>
+    <message>
+        <location line="+24"/>
+        <source>Cannot open database &apos;%1&apos; to optimize!</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐŸÑÐºÑÑÑÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
+ &apos;%1&apos; ÐŽÐ»Ñ ÐŸÐ¿ÑÐžÐŒÐžÐ·Ð°ÑÐžÐž!</translation>
+    </message>
+    <message>
+        <location line="-438"/>
         <source>Cannot create directory: %1</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐŸÐ·ÐŽÐ°ÑÑ ÐºÐ°ÑÐ°Ð»ÐŸÐ³: %1</translation>
@@ -70,10 +91,5 @@
     </message>
     <message>
-        <location line="+119"/>
-        <source>Unknown filter!</source>
-        <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÑÐ¹ ÑÐžÐ»ÑÑÑ!</translation>
-    </message>
-    <message>
-        <location line="+55"/>
+        <location line="+174"/>
         <source>Cannot register filter %1!</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐžÐ»ÑÑÑ %1!</translation>
@@ -85,10 +101,5 @@
     </message>
     <message>
-        <location line="+6"/>
-        <source>Invalid documentation file!</source>
-        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ ÑÐ°Ð¹Ð» ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÐž!</translation>
-    </message>
-    <message>
-        <location line="+34"/>
+        <location line="+40"/>
         <source>The namespace %1 was not registered!</source>
         <translation>ÐÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸ ÐžÐŒÑÐœ %1 ÐœÐµ Ð·Ð°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°ÐœÐŸ!</translation>
@@ -98,15 +109,4 @@
         <source>Namespace %1 already exists!</source>
         <translation>ÐÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸ ÐžÐŒÑÐœ %1 ÑÐ¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ!</translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Cannot register namespace!</source>
-        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°ÑÐµÐ³ÐžÑÑÑÐžÑÐŸÐ²Ð°ÑÑ Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸ ÐžÐŒÑÐœ!</translation>
-    </message>
-    <message>
-        <location line="+24"/>
-        <source>Cannot open database to optimize!</source>
-        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐŸÑÐºÑÑÑÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
- ÐŽÐ»Ñ ÐŸÐ¿ÑÐžÐŒÐžÐ·Ð°ÑÐžÐž!</translation>
     </message>
 </context>
@@ -124,5 +124,5 @@
     <name>QHelpEngineCore</name>
     <message>
-        <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/>
+        <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+525"/>
         <source>The specified namespace does not exist!</source>
         <translation>Ð£ÐºÐ°Ð·Ð°ÐœÐœÐŸÐµ Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸ ÐžÐŒÑÐœ ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÐµÑ!</translation>
@@ -132,5 +132,5 @@
     <name>QHelpEngineCorePrivate</name>
     <message>
-        <location line="-402"/>
+        <location line="-403"/>
         <source>Cannot open documentation file %1: %2!</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐŸÑÐºÑÑÑÑ ÑÐ°Ð¹Ð» ÐŽÐŸÐºÑÐŒÐµÐœÑÐ°ÑÐžÐž %1: %2!</translation>
@@ -256,30 +256,30 @@
     <name>QHelpSearchQueryWidget</name>
     <message>
-        <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+411"/>
+        <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+125"/>
         <source>Search for:</source>
         <translation>ÐÑÐºÐ°ÑÑ:</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+1"/>
         <source>Previous search</source>
         <translation>ÐÑÐµÐŽÑÐŽÑÑÐžÐ¹ Ð·Ð°Ð¿ÑÐŸÑ</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location line="+1"/>
         <source>Next search</source>
         <translation>Ð¡Ð»ÐµÐŽÑÑÑÐžÐ¹ Ð·Ð°Ð¿ÑÐŸÑ</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="+1"/>
         <source>Search</source>
         <translation>ÐÐŸÐžÑÐº</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="+2"/>
         <source>Advanced search</source>
         <translation>Ð Ð°ÑÑÐžÑÐµÐœÐœÑÐ¹ Ð¿ÐŸÐžÑÐº</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+1"/>
         <source>words &lt;B&gt;similar&lt;/B&gt; to:</source>
         <translation>&lt;B&gt;Ð¿ÐŸÑ
@@ -287,20 +287,20 @@
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+1"/>
         <source>&lt;B&gt;without&lt;/B&gt; the words:</source>
         <translation>&lt;B&gt;ÐœÐµ ÑÐŸÐŽÐµÑÐ¶ÐžÑ&lt;/B&gt; ÑÐ»ÐŸÐ²:</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+1"/>
         <source>with &lt;B&gt;exact phrase&lt;/B&gt;:</source>
         <translation>ÑÐŸÐŽÐµÑÐ¶ÐžÑ &lt;B&gt;ÑÐŸÑÐœÑÑ ÑÑÐ°Ð·Ñ&lt;/B&gt;:</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+1"/>
         <source>with &lt;B&gt;all&lt;/B&gt; of the words:</source>
         <translation>ÑÐŸÐŽÐµÑÐ¶ÐžÑ &lt;B&gt;Ð²ÑÐµ&lt;/B&gt; ÑÐ»ÐŸÐ²Ð°:</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+1"/>
         <source>with &lt;B&gt;at least one&lt;/B&gt; of the words:</source>
         <translation>ÑÐŸÐŽÐµÑÐ¶ÐžÑ &lt;B&gt;Ñ
@@ -326,9 +326,4 @@
 <context>
     <name>QObject</name>
-    <message>
-        <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/>
-        <source>Untitled</source>
-        <translation>ÐÐµÐ·ÑÐŒÑÐœÐœÑÐ¹</translation>
-    </message>
     <message>
         <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/>
Index: unk/translations/qt_iw.ts
===================================================================
--- /trunk/translations/qt_iw.ts	(revision 768)
+++ 	(revision )
@@ -1,7781 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
-    <name>AudioOutput</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+375"/>
-        <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Revert back to device &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>CloseButton</name>
-    <message>
-        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2251"/>
-        <source>Close Tab</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>PPDOptionsModel</name>
-    <message>
-        <source>Name</source>
-        <translation type="obsolete">×©×</translation>
-    </message>
-</context>
-<context>
-    <name>Phonon::</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/>
-        <source>Notifications</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Music</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Video</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Communication</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Games</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Accessibility</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Phonon::Gstreamer::Backend</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/>
-        <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
-          Some video features have been disabled.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Warning: You do not seem to have the base GStreamer plugins installed.
-          All audio and video support has been disabled</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Phonon::Gstreamer::MediaObject</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/>
-        <source>Cannot start playback. 
-
-Check your Gstreamer installation and make sure you 
-have libgstreamer-plugins-base installed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+113"/>
-        <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+676"/>
-        <location line="+8"/>
-        <location line="+15"/>
-        <location line="+9"/>
-        <location line="+6"/>
-        <location line="+19"/>
-        <location line="+335"/>
-        <location line="+24"/>
-        <source>Could not open media source.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-403"/>
-        <source>Invalid source type.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+377"/>
-        <source>Could not locate media source.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Could not open audio device. The device is already in use.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Could not decode media source.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Phonon::VolumeSlider</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/>
-        <location line="+18"/>
-        <source>Volume: %1%</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-15"/>
-        <location line="+18"/>
-        <location line="+54"/>
-        <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Q3Accel</name>
-    <message>
-        <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/>
-        <source>%1, %2 not defined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+36"/>
-        <source>Ambiguous %1 not handled</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Q3DataTable</name>
-    <message>
-        <location filename="../src/qt3support/sql/q3datatable.cpp" line="+285"/>
-        <source>True</source>
-        <translation type="unfinished">×××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>False</source>
-        <translation type="unfinished">×©×§×š</translation>
-    </message>
-    <message>
-        <location line="+505"/>
-        <source>Insert</source>
-        <translation type="unfinished">×××¡×£</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Update</source>
-        <translation type="unfinished">×¢×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Delete</source>
-        <translation type="unfinished">×××§</translation>
-    </message>
-</context>
-<context>
-    <name>Q3FileDialog</name>
-    <message>
-        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+864"/>
-        <source>Copy or Move a File</source>
-        <translation type="unfinished">××¢×ª×§ ×× ××¢××š ×§×××¥</translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Read: %1</source>
-        <translation type="unfinished">×§×š×: %1</translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <location line="+30"/>
-        <source>Write: %1</source>
-        <translation type="unfinished">××ª××: %1</translation>
-    </message>
-    <message>
-        <location line="-22"/>
-        <location line="+1575"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-    <message>
-        <location line="-157"/>
-        <location line="+49"/>
-        <location line="+2153"/>
-        <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+110"/>
-        <source>All Files (*)</source>
-        <translation type="unfinished">×× ××§××Š×× (*)</translation>
-    </message>
-    <message>
-        <location line="-2089"/>
-        <source>Name</source>
-        <translation type="unfinished">×©×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Size</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Type</source>
-        <translation type="unfinished">×¡××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Date</source>
-        <translation type="unfinished">×ª××š××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Attributes</source>
-        <translation type="unfinished">×××€××× ××</translation>
-    </message>
-    <message>
-        <location line="+35"/>
-        <location line="+2031"/>
-        <source>&amp;OK</source>
-        <translation type="unfinished">&amp;×××©××š</translation>
-    </message>
-    <message>
-        <location line="-1991"/>
-        <source>Look &amp;in:</source>
-        <translation type="unfinished">&amp;××€×© ×:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <location line="+1981"/>
-        <location line="+16"/>
-        <source>File &amp;name:</source>
-        <translation type="unfinished">&amp;×©× ××§×××¥:</translation>
-    </message>
-    <message>
-        <location line="-1996"/>
-        <source>File &amp;type:</source>
-        <translation type="unfinished">&amp;×¡×× ××§×××¥:</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Back</source>
-        <translation type="unfinished">××××š×</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>One directory up</source>
-        <translation type="unfinished">×¡×€×š×× ×××ª ×××¢××</translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Create New Folder</source>
-        <translation type="unfinished">×Š××š ×ª××§×× ×××©×</translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>List View</source>
-        <translation type="unfinished">×ª×Š×××ª ×š×©×××</translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Detail View</source>
-        <translation type="unfinished">×ª×Š×××ª ×€×š×××</translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Preview File Info</source>
-        <translation type="unfinished">×ª×Š××× ××§×××× ×©× ×€×š×× ××§×××¥</translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>Preview File Contents</source>
-        <translation type="unfinished">×ª×Š××× ××§×××× ×©× ×ª××× ××§×××¥</translation>
-    </message>
-    <message>
-        <location line="+88"/>
-        <source>Read-write</source>
-        <translation type="unfinished">×§×š×××-××ª×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Read-only</source>
-        <translation type="unfinished">×§×š×××-××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Write-only</source>
-        <translation type="unfinished">××ª×××-××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Inaccessible</source>
-        <translation type="unfinished">×× × ×××©</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Symlink to File</source>
-        <translation type="unfinished">×§××©××š ×¡××× ××§×××¥</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Symlink to Directory</source>
-        <translation type="unfinished">×§××©××š ×¡××× ××¡×€×š××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Symlink to Special</source>
-        <translation type="unfinished">×§××©××š ×¡××× ××€×š×× ×××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>File</source>
-        <translation type="unfinished">×§×××¥</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Dir</source>
-        <translation type="unfinished">×¡×€×š××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Special</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-    <message>
-        <location line="+704"/>
-        <location line="+2100"/>
-        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+337"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-    <message>
-        <location line="-1990"/>
-        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+84"/>
-        <source>Save As</source>
-        <translation type="unfinished">×©×××š× ××©×</translation>
-    </message>
-    <message>
-        <location line="+642"/>
-        <location line="+5"/>
-        <location line="+355"/>
-        <source>&amp;Open</source>
-        <translation type="unfinished">&amp;×€×ª×</translation>
-    </message>
-    <message>
-        <location line="-357"/>
-        <location line="+341"/>
-        <source>&amp;Save</source>
-        <translation type="unfinished">&amp;×©×××š</translation>
-    </message>
-    <message>
-        <location line="-334"/>
-        <source>&amp;Rename</source>
-        <translation type="unfinished">×©&amp;× × ×©×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Delete</source>
-        <translation type="unfinished">&amp;×××§</translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>R&amp;eload</source>
-        <translation type="unfinished">&amp;××¢× ××××©</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Sort by &amp;Name</source>
-        <translation type="unfinished">×¡××š ××€× ×©&amp;×</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Sort by &amp;Size</source>
-        <translation type="unfinished">×¡××š ××€× &amp;××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Sort by &amp;Date</source>
-        <translation type="unfinished">×¡××š ××€× &amp;×ª××š××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Unsorted</source>
-        <translation type="unfinished">&amp;××× ×¡××š</translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Sort</source>
-        <translation type="unfinished">×¡××š</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Show &amp;hidden files</source>
-        <translation type="unfinished">××Š× ×§××Š×× &amp;×××¡×ª×š××</translation>
-    </message>
-    <message>
-        <location line="+31"/>
-        <source>the file</source>
-        <translation type="unfinished">××§×××¥</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>the directory</source>
-        <translation type="unfinished">××¡×€×š××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>the symlink</source>
-        <translation type="unfinished">××§××©××š ××¡×××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Delete %1</source>
-        <translation type="unfinished">×××§ ××ª %1</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
-        <translation type="unfinished">&lt;qt&gt;××× ××ª× ×××× ×©××š×Š×× × ×××××§ %1 &quot;%2&quot;?&lt;/qt&gt;</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Yes</source>
-        <translation type="unfinished">&amp;××</translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>&amp;No</source>
-        <translation type="unfinished">&amp;××</translation>
-    </message>
-    <message>
-        <location line="+36"/>
-        <source>New Folder 1</source>
-        <translation type="unfinished">×ª××§×× ×××©× 1</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>New Folder</source>
-        <translation type="unfinished">×ª××§×× ×××©×</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>New Folder %1</source>
-        <translation type="unfinished">×ª××§×× ×××©× %1</translation>
-    </message>
-    <message>
-        <location line="+98"/>
-        <source>Find Directory</source>
-        <translation type="unfinished">××€×© ×¡×€×š××</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <location line="+108"/>
-        <source>Directories</source>
-        <translation type="unfinished">×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location line="-2"/>
-        <source>Directory:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+40"/>
-        <location line="+1110"/>
-        <source>Error</source>
-        <translation type="unfinished">×©××××</translation>
-    </message>
-    <message>
-        <location line="-1109"/>
-        <source>%1
-File not found.
-Check path and filename.</source>
-        <translation type="unfinished">%1
-××§×××¥ ×× × ××Š×.
-××××§ ××ª ×× ×ª×× ×××ª ×©× ××§×××¥.</translation>
-    </message>
-    <message>
-        <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="-289"/>
-        <source>All Files (*.*)</source>
-        <translation type="unfinished">×× ××§××Š×× (*.*)</translation>
-    </message>
-    <message>
-        <location line="+375"/>
-        <source>Open </source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-    <message>
-        <location line="+155"/>
-        <source>Select a Directory</source>
-        <translation type="unfinished">×××š ×¡×€×š××</translation>
-    </message>
-</context>
-<context>
-    <name>Q3LocalFs</name>
-    <message>
-        <location filename="../src/qt3support/network/q3localfs.cpp" line="+130"/>
-        <location line="+10"/>
-        <source>Could not read directory
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+45"/>
-        <source>Could not create directory
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+34"/>
-        <source>Could not remove file or directory
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <source>Could not rename
-%1
-to
-%2</source>
-        <translation type="unfinished">×× × ××ª× ××©× ××ª ××ª ××©× ×©×
-%1
-××
-%2</translation>
-    </message>
-    <message>
-        <location line="+25"/>
-        <source>Could not open
-%1</source>
-        <translation type="unfinished">×× × ××ª× ××€×ª×× ××ª
-%1</translation>
-    </message>
-    <message>
-        <location line="+68"/>
-        <source>Could not write
-%1</source>
-        <translation type="unfinished">×× × ××ª× ×××ª×× ××ª
-%1</translation>
-    </message>
-</context>
-<context>
-    <name>Q3MainWindow</name>
-    <message>
-        <location filename="../src/qt3support/widgets/q3mainwindow.cpp" line="+2051"/>
-        <source>Line up</source>
-        <translation type="unfinished">×¡××š ××©××š×</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Customize...</source>
-        <translation type="unfinished">××ª××× ×××©××ª...</translation>
-    </message>
-</context>
-<context>
-    <name>Q3NetworkProtocol</name>
-    <message>
-        <location filename="../src/qt3support/network/q3networkprotocol.cpp" line="+854"/>
-        <source>Operation stopped by the user</source>
-        <translation type="unfinished">××€×¢××× ×××€×¡×§× ×¢× ××× ×××©×ª××©</translation>
-    </message>
-</context>
-<context>
-    <name>Q3ProgressDialog</name>
-    <message>
-        <location filename="../src/qt3support/dialogs/q3progressdialog.cpp" line="+224"/>
-        <location line="+61"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-</context>
-<context>
-    <name>Q3TabDialog</name>
-    <message>
-        <location filename="../src/qt3support/dialogs/q3tabdialog.cpp" line="+189"/>
-        <location line="+814"/>
-        <source>OK</source>
-        <translation type="unfinished">×××©××š</translation>
-    </message>
-    <message>
-        <location line="-356"/>
-        <source>Apply</source>
-        <translation type="unfinished">×××</translation>
-    </message>
-    <message>
-        <location line="+43"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="+45"/>
-        <source>Defaults</source>
-        <translation type="unfinished">××š××š××ª ××××</translation>
-    </message>
-    <message>
-        <location line="+50"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-</context>
-<context>
-    <name>Q3TextEdit</name>
-    <message>
-        <location filename="../src/qt3support/text/q3textedit.cpp" line="+5429"/>
-        <source>&amp;Undo</source>
-        <translation type="unfinished">&amp;×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Redo</source>
-        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Cu&amp;t</source>
-        <translation type="unfinished">&amp;××××š</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Copy</source>
-        <translation type="unfinished">××¢&amp;×ª×§</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Paste</source>
-        <translation type="unfinished">×&amp;×××§</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Clear</source>
-        <translation type="unfinished">× ×§×</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location line="+2"/>
-        <source>Select All</source>
-        <translation type="unfinished">×××š ×××</translation>
-    </message>
-</context>
-<context>
-    <name>Q3TitleBar</name>
-    <message>
-        <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+246"/>
-        <source>System</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Restore up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Minimize</source>
-        <translation type="unfinished">×××¢×š</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Restore down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Maximize</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>Contains commands to manipulate the window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Puts a minimized back to normal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Moves the window out of the way</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Puts a maximized window back to normal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Makes the window full screen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Closes the window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Displays the name of the window and contains controls to manipulate it</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Q3ToolBar</name>
-    <message>
-        <location filename="../src/qt3support/widgets/q3toolbar.cpp" line="+692"/>
-        <source>More...</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>Q3UrlOperator</name>
-    <message>
-        <location filename="../src/qt3support/network/q3urloperator.cpp" line="+386"/>
-        <location line="+260"/>
-        <location line="+4"/>
-        <source>The protocol `%1&apos; is not supported</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ××× × × ×ª××</translation>
-    </message>
-    <message>
-        <location line="-260"/>
-        <source>The protocol `%1&apos; does not support listing directories</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××Š××ª ×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The protocol `%1&apos; does not support creating new directories</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××Š××š×ª ×¡×€×š×××ª ×××©××ª</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The protocol `%1&apos; does not support removing files or directories</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¡×š×ª ×§××Š×× ×× ×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The protocol `%1&apos; does not support renaming files or directories</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ××©×× ×× ×©×××ª××× ×©× ×§××Š×× ×× ×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The protocol `%1&apos; does not support getting files</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ××××š××ª ×§××Š××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The protocol `%1&apos; does not support putting files</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¢×××ª ×§××Š××</translation>
-    </message>
-    <message>
-        <location line="+243"/>
-        <location line="+4"/>
-        <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
-        <translation type="unfinished">××€×š××××§×× &quot;%1&quot; ×× ×ª××× ×××¢×ª×§× ×× ××¢××š× ×©× ×§××Š×× ×× ×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location line="+237"/>
-        <location line="+1"/>
-        <source>(unknown)</source>
-        <translation type="unfinished">(×× ××××¢)</translation>
-    </message>
-</context>
-<context>
-    <name>Q3Wizard</name>
-    <message>
-        <location filename="../src/qt3support/dialogs/q3wizard.cpp" line="+177"/>
-        <source>&amp;Cancel</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&lt; &amp;Back</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Next &gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Finish</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Help</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QAbstractSocket</name>
-    <message>
-        <location filename="../src/network/socket/qabstractsocket.cpp" line="+868"/>
-        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+615"/>
-        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+657"/>
-        <location line="+26"/>
-        <source>Host not found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+50"/>
-        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+3"/>
-        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+4"/>
-        <source>Connection refused</source>
-        <translation type="unfinished">××××××š × ×××</translation>
-    </message>
-    <message>
-        <location line="+141"/>
-        <source>Connection timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-547"/>
-        <location line="+787"/>
-        <location line="+208"/>
-        <source>Operation on socket is not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+137"/>
-        <source>Socket operation timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+380"/>
-        <source>Socket is not connected</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-8"/>
-        <source>Network unreachable</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QAbstractSpinBox</name>
-    <message>
-        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1199"/>
-        <source>&amp;Step up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Step &amp;down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-8"/>
-        <source>&amp;Select All</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QApplication</name>
-    <message>
-        <location filename="../src/gui/kernel/qapplication.cpp" line="+2248"/>
-        <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>RTL</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qmessagebox.h" line="+352"/>
-        <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Incompatible Qt Library Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/>
-        <source>Activate</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Activates the program&apos;s main window</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QAxSelect</name>
-    <message>
-        <location filename="../src/activeqt/container/qaxselect.ui"/>
-        <source>Select ActiveX Control</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>OK</source>
-        <translation type="unfinished">×××©××š</translation>
-    </message>
-    <message>
-        <location/>
-        <source>&amp;Cancel</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>COM &amp;Object:</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QCheckBox</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/>
-        <source>Uncheck</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Check</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Toggle</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QColorDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1253"/>
-        <source>Hu&amp;e:</source>
-        <translation>&amp;××××:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Sat:</source>
-        <translation>&amp;××š××××:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Val:</source>
-        <translation>&amp;×¢×š×:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Red:</source>
-        <translation>&amp;××××:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Green:</source>
-        <translation>&amp;××š××§:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Bl&amp;ue:</source>
-        <translation>&amp;××××:</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A&amp;lpha channel:</source>
-        <translation>×¢&amp;×š××¥ ×××€×:</translation>
-    </message>
-    <message>
-        <location line="+101"/>
-        <source>Select Color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+137"/>
-        <source>&amp;Basic colors</source>
-        <translation>&amp;×Š××¢×× ××¡××¡×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Custom colors</source>
-        <translation>×Š××¢×× &amp;×××ª×××× ×××©××ª</translation>
-    </message>
-    <message>
-        <source>&amp;Define Custom Colors &gt;&gt;</source>
-        <translation type="obsolete">&amp;××××š ×Š××¢×× ×××ª×××× ×××©××ª &gt;&gt;</translation>
-    </message>
-    <message>
-        <source>OK</source>
-        <translation type="obsolete">×××©××š</translation>
-    </message>
-    <message>
-        <source>Cancel</source>
-        <translation type="obsolete">×××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Add to Custom Colors</source>
-        <translation>×&amp;××¡×£ ××Š××¢×× ×××ª×××× ×××©××ª</translation>
-    </message>
-    <message>
-        <source>Select color</source>
-        <translation type="obsolete">××××š×ª ×Š××¢</translation>
-    </message>
-</context>
-<context>
-    <name>QComboBox</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/>
-        <location line="+65"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="+544"/>
-        <source>False</source>
-        <translation type="unfinished">×©×§×š</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>True</source>
-        <translation type="unfinished">×××ª</translation>
-    </message>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+0"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-</context>
-<context>
-    <name>QCoreApplication</name>
-    <message>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/>
-        <source>%1: key is empty</source>
-        <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>%1: unable to make key</source>
-        <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>%1: ftok failed</source>
-        <comment>QSystemSemaphore</comment>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDB2Driver</name>
-    <message>
-        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1276"/>
-        <source>Unable to connect</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+303"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to set autocommit</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDB2Result</name>
-    <message>
-        <location line="-1043"/>
-        <location line="+243"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-206"/>
-        <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+196"/>
-        <source>Unable to bind variable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+92"/>
-        <source>Unable to fetch record %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to fetch next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Unable to fetch first</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDateTimeEdit</name>
-    <message>
-        <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2295"/>
-        <source>AM</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>am</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>PM</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>pm</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDial</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/>
-        <source>QDial</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>SpeedoMeter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>SliderHandle</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qdialog.cpp" line="+597"/>
-        <source>What&apos;s This?</source>
-        <translation>×× ××?</translation>
-    </message>
-    <message>
-        <location line="-115"/>
-        <source>Done</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDialogButtonBox</name>
-    <message>
-        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1866"/>
-        <location line="+464"/>
-        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+561"/>
-        <source>OK</source>
-        <translation type="unfinished">×××©××š</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+3"/>
-        <source>Save</source>
-        <translation type="unfinished">×©×××š</translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>&amp;Save</source>
-        <translation type="unfinished">&amp;×©×××š</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>&amp;Cancel</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>&amp;Close</source>
-        <translation type="unfinished">&amp;×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Apply</source>
-        <translation type="unfinished">×××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Reset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Don&apos;t Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Discard</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Yes</source>
-        <translation type="unfinished">&amp;××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Yes to &amp;All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;No</source>
-        <translation type="unfinished">&amp;××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>N&amp;o to All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Save All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Abort</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Retry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Restore Defaults</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-29"/>
-        <source>Close without Saving</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-27"/>
-        <source>&amp;OK</source>
-        <translation type="unfinished">&amp;×××©××š</translation>
-    </message>
-</context>
-<context>
-    <name>QDirModel</name>
-    <message>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+453"/>
-        <source>Name</source>
-        <translation type="unfinished">×©×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Size</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Kind</source>
-        <comment>Match OS X Finder</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Type</source>
-        <comment>All other platforms</comment>
-        <translation type="unfinished">×¡××</translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Date Modified</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDockWidget</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/qaccessiblewidgets.cpp" line="+1239"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Dock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Float</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QDoubleSpinBox</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-537"/>
-        <source>More</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Less</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QErrorMessage</name>
-    <message>
-        <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+391"/>
-        <source>&amp;Show this message again</source>
-        <translation>&amp;××Š× ××××¢× ×× ×©× ××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;OK</source>
-        <translation>&amp;×××©××š</translation>
-    </message>
-    <message>
-        <location line="-200"/>
-        <source>Debug Message:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Warning:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Fatal Error:</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QFile</name>
-    <message>
-        <location filename="../src/corelib/io/qfile.cpp" line="+708"/>
-        <location line="+141"/>
-        <source>Destination file exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-108"/>
-        <source>Cannot remove source file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+120"/>
-        <source>Cannot open %1 for input</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Cannot open for output</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Failure to write block</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Cannot create %1 for output</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QFileDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+515"/>
-        <location line="+444"/>
-        <source>All Files (*)</source>
-        <translation>×× ××§××Š×× (*)</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Back</source>
-        <translation type="unfinished">××××š×</translation>
-    </message>
-    <message>
-        <location/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>List View</source>
-        <translation type="unfinished">×ª×Š×××ª ×š×©×××</translation>
-    </message>
-    <message>
-        <location/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Detail View</source>
-        <translation type="unfinished">×ª×Š×××ª ×€×š×××</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+414"/>
-        <location line="+1"/>
-        <source>File</source>
-        <translation type="unfinished">×§×××¥</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-461"/>
-        <source>Open</source>
-        <translation>×€×ª×</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Save As</source>
-        <translation type="unfinished">×©×××š× ××©×</translation>
-    </message>
-    <message>
-        <location line="+678"/>
-        <location line="+50"/>
-        <location line="+1471"/>
-        <location line="+75"/>
-        <source>&amp;Open</source>
-        <translation>&amp;×€×ª×</translation>
-    </message>
-    <message>
-        <location line="-1596"/>
-        <location line="+50"/>
-        <source>&amp;Save</source>
-        <translation>&amp;×©×××š</translation>
-    </message>
-    <message>
-        <location line="-699"/>
-        <source>&amp;Rename</source>
-        <translation type="unfinished">×©&amp;× × ×©×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Delete</source>
-        <translation type="unfinished">&amp;×××§</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Show &amp;hidden files</source>
-        <translation type="unfinished">××Š× ×§××Š×× &amp;×××¡×ª×š××</translation>
-    </message>
-    <message>
-        <location line="+1964"/>
-        <source>New Folder</source>
-        <translation type="unfinished">×ª××§×× ×××©×</translation>
-    </message>
-    <message>
-        <location line="-1999"/>
-        <source>Find Directory</source>
-        <translation type="unfinished">××€×© ×¡×€×š××</translation>
-    </message>
-    <message>
-        <location line="+685"/>
-        <source>Directories</source>
-        <translation>×¡×€×š×××ª</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+160"/>
-        <source>All Files (*.*)</source>
-        <translation type="unfinished">×× ××§××Š×× (*.*)</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+832"/>
-        <source>%1 already exists.
-Do you want to replace it?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>%1
-File not found.
-Please verify the correct file name was given.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/>
-        <source>My Computer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Parent Directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Files of type:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1496"/>
-        <location line="+648"/>
-        <source>Directory:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+794"/>
-        <location line="+862"/>
-        <source>%1
-Directory not found.
-Please verify the correct directory name was given.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-218"/>
-        <source>&apos;%1&apos; is write protected.
-Do you want to delete it anyway?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Are sure you want to delete &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Could not delete directory.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+407"/>
-        <source>Recent Places</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="-4"/>
-        <source>Drive</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+33"/>
-        <source>Unknown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2525"/>
-        <source>Show </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Forward</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+7"/>
-        <source>&amp;New Folder</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+656"/>
-        <location line="+38"/>
-        <source>&amp;Choose</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qsidebar.cpp" line="+418"/>
-        <source>Remove</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-687"/>
-        <location line="+652"/>
-        <source>File &amp;name:</source>
-        <translation type="unfinished">&amp;×©× ××§×××¥:</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfiledialog.ui"/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Look in:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
-        <source>Create New Folder</source>
-        <translation type="unfinished">×Š××š ×ª××§×× ×××©×</translation>
-    </message>
-</context>
-<context>
-    <name>QFileSystemModel</name>
-    <message>
-        <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+744"/>
-        <source>%1 TB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>%1 GB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>%1 MB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>%1 KB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>%1 bytes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+77"/>
-        <source>Invalid filename</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+63"/>
-        <source>Name</source>
-        <translation type="unfinished">×©×</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Size</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Kind</source>
-        <comment>Match OS X Finder</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Type</source>
-        <comment>All other platforms</comment>
-        <translation type="unfinished">×¡××</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Date Modified</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+234"/>
-        <source>My Computer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Computer</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QFontDatabase</name>
-    <message>
-        <location filename="../src/gui/text/qfontdatabase.cpp" line="+90"/>
-        <location line="+1176"/>
-        <source>Normal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1173"/>
-        <location line="+12"/>
-        <location line="+1149"/>
-        <source>Bold</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1158"/>
-        <location line="+1160"/>
-        <source>Demi Bold</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1157"/>
-        <location line="+18"/>
-        <location line="+1135"/>
-        <source>Black</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1145"/>
-        <source>Demi</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <location line="+1145"/>
-        <source>Light</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1004"/>
-        <location line="+1007"/>
-        <source>Italic</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1004"/>
-        <location line="+1006"/>
-        <source>Oblique</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+705"/>
-        <source>Any</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Latin</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Greek</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Cyrillic</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Armenian</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Hebrew</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Arabic</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Syriac</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Thaana</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Devanagari</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Bengali</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Gurmukhi</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Gujarati</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Oriya</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Tamil</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Telugu</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Kannada</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Malayalam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Sinhala</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Thai</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Lao</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Tibetan</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Myanmar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Georgian</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Khmer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Simplified Chinese</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Traditional Chinese</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Japanese</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Korean</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Vietnamese</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Symbol</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Ogham</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Runic</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QFontDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+772"/>
-        <source>&amp;Font</source>
-        <translation>&amp;×××€×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Font st&amp;yle</source>
-        <translation>&amp;×¡×× ×× ×××€×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Size</source>
-        <translation>××&amp;××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Effects</source>
-        <translation>××€×§×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Stri&amp;keout</source>
-        <translation>×§× &amp;×××Š×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Underline</source>
-        <translation>×§× &amp;×ª××ª×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Sample</source>
-        <translation>×××××</translation>
-    </message>
-    <message>
-        <location line="-603"/>
-        <location line="+247"/>
-        <source>Select Font</source>
-        <translation>×××š ×××€×</translation>
-    </message>
-    <message>
-        <location line="+357"/>
-        <source>Wr&amp;iting System</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QFtp</name>
-    <message>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+2303"/>
-        <source>Host %1 found</source>
-        <translation type="unfinished">××××š× %1 × ××Š×</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Host found</source>
-        <translation type="unfinished">××××š× × ××Š×</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qftp.cpp" line="+1003"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1456"/>
-        <location line="+1451"/>
-        <source>Connected to host %1</source>
-        <translation>×××××š ××××š× %1</translation>
-    </message>
-    <message>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+7"/>
-        <source>Connected to host</source>
-        <translation type="unfinished">×××××š ××××š×</translation>
-    </message>
-    <message>
-        <location line="-5"/>
-        <source>Connection to %1 closed</source>
-        <translation type="unfinished">××××××š ×× %1 × ×¡××š</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qftp.cpp" line="+1375"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="-243"/>
-        <location line="+250"/>
-        <source>Connection closed</source>
-        <translation>××××××š × ×¡××š</translation>
-    </message>
-    <message>
-        <location line="-1487"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1566"/>
-        <source>Host %1 not found</source>
-        <translation type="unfinished">××××š× %1 ×× × ××Š×</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+4"/>
-        <source>Connection refused to host %1</source>
-        <translation type="unfinished">××××××š ×× ××××š× %1 × ×××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Connection timed out to host %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+501"/>
-        <location line="+29"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+458"/>
-        <location line="+728"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+889"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/>
-        <source>Connecting to host failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Login failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Listing directory failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Changing directory failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Downloading file failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Uploading file failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Removing file failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Creating directory failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
-        <source>Removing directory failed:
-%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-1524"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="-1356"/>
-        <source>Not connected</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+396"/>
-        <location filename="../src/qt3support/network/q3ftp.cpp" line="+332"/>
-        <source>Connection refused for data connection</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QHostInfo</name>
-    <message>
-        <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QHostInfoAgent</name>
-    <message>
-        <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+178"/>
-        <location line="+9"/>
-        <location line="+64"/>
-        <location line="+31"/>
-        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+180"/>
-        <location line="+9"/>
-        <location line="+40"/>
-        <location line="+27"/>
-        <source>Host not found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-44"/>
-        <location line="+39"/>
-        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-34"/>
-        <location line="+29"/>
-        <source>Unknown address type</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-19"/>
-        <location line="+27"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QHttp</name>
-    <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+876"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+1836"/>
-        <source>Connection refused</source>
-        <translation>××××××š × ×××</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qhttp.cpp" line="+2631"/>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+3"/>
-        <source>Host %1 not found</source>
-        <translation>××××š× %1 ×× × ××Š×</translation>
-    </message>
-    <message>
-        <location line="-62"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="-45"/>
-        <source>Wrong content length</source>
-        <translation>×××š× ×ª××× ×©×××</translation>
-    </message>
-    <message>
-        <location line="-2204"/>
-        <source>HTTPS connection requested but SSL support not compiled in</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2286"/>
-        <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 × ××©××</translation>
-    </message>
-    <message>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+450"/>
-        <source>Host %1 found</source>
-        <translation type="unfinished">××××š× %1 × ××Š×</translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>Host found</source>
-        <translation type="unfinished">××××š× × ××Š×</translation>
-    </message>
-    <message>
-        <location line="-11"/>
-        <source>Connected to host %1</source>
-        <translation type="unfinished">×××××š ××××š× %1</translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>Connected to host</source>
-        <translation type="unfinished">×××××š ××××š×</translation>
-    </message>
-    <message>
-        <location line="-11"/>
-        <source>Connection to %1 closed</source>
-        <translation type="unfinished">××××××š ×× %1 × ×¡××š</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+14"/>
-        <source>Connection closed</source>
-        <translation type="unfinished">××××××š × ×¡××š</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qhttp.cpp" line="-1077"/>
-        <location line="+820"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="-1152"/>
-        <location line="+567"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-568"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="-370"/>
-        <source>Request aborted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+579"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+381"/>
-        <source>No server set to connect to</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+168"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+60"/>
-        <source>Server closed connection unexpectedly</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+151"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+113"/>
-        <source>Invalid HTTP response header</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+28"/>
-        <source>Unknown authentication method</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+97"/>
-        <location line="+48"/>
-        <location filename="../src/qt3support/network/q3http.cpp" line="+40"/>
-        <location line="+47"/>
-        <source>Invalid HTTP chunked body</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+38"/>
-        <source>Error writing response to device</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-173"/>
-        <source>Proxy authentication required</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Authentication required</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-138"/>
-        <source>Connection refused (or timed out)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+6"/>
-        <source>Proxy requires authentication</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Host requires authentication</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Data corrupted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unknown protocol specified</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>SSL handshake failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QHttpSocketEngine</name>
-    <message>
-        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="-89"/>
-        <source>Did not receive HTTP response from proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+25"/>
-        <source>Error parsing authentication request from proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+31"/>
-        <source>Authentication required</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <source>Proxy denied connection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Error communicating with HTTP proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>Proxy server not found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Proxy connection refused</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Proxy server connection timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Proxy connection closed prematurely</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QIBaseDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1428"/>
-        <source>Error opening database</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+54"/>
-        <source>Could not start transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QIBaseResult</name>
-    <message>
-        <location line="-1097"/>
-        <source>Unable to create BLOB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Unable to write BLOB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>Unable to open BLOB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>Unable to read BLOB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+125"/>
-        <location line="+189"/>
-        <source>Could not find array</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-157"/>
-        <source>Could not get array data</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+212"/>
-        <source>Could not get query info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Could not start transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+33"/>
-        <source>Could not allocate statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Could not prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <location line="+7"/>
-        <source>Could not describe input statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Could not describe statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+115"/>
-        <source>Unable to close statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Unable to execute query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+46"/>
-        <source>Could not fetch next item</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+160"/>
-        <source>Could not get statement info</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QIODevice</name>
-    <message>
-        <location filename="../src/corelib/global/qglobal.cpp" line="+1869"/>
-        <source>Permission denied</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Too many open files</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>No such file or directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>No space left on device</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/io/qiodevice.cpp" line="+1536"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QInputContext</name>
-    <message>
-        <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+242"/>
-        <source>XIM</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>XIM input method</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Windows input method</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Mac OS X input method</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QInputDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/>
-        <source>Enter a value:</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QLibrary</name>
-    <message>
-        <location filename="../src/corelib/plugin/qlibrary.cpp" line="+378"/>
-        <source>Could not mmap &apos;%1&apos;: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+22"/>
-        <source>Plugin verification data mismatch in &apos;%1&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Could not unmap &apos;%1&apos;: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+302"/>
-        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+340"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-377"/>
-        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+280"/>
-        <source>The shared library was not found.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+43"/>
-        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+209"/>
-        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+99"/>
-        <source>Cannot load library %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+26"/>
-        <source>Cannot unload library %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+31"/>
-        <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/>
-        <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QLineEdit</name>
-    <message>
-        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2680"/>
-        <source>&amp;Undo</source>
-        <translation type="unfinished">&amp;×××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Redo</source>
-        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Cu&amp;t</source>
-        <translation type="unfinished">&amp;××××š</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Copy</source>
-        <translation type="unfinished">××¢&amp;×ª×§</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Paste</source>
-        <translation type="unfinished">×&amp;×××§</translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Select All</source>
-        <translation type="unfinished">×××š ×××</translation>
-    </message>
-    <message>
-        <location line="-6"/>
-        <source>Delete</source>
-        <translation type="unfinished">×××§</translation>
-    </message>
-</context>
-<context>
-    <name>QLocalServer</name>
-    <message>
-        <location filename="../src/network/socket/qlocalserver.cpp" line="+226"/>
-        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+231"/>
-        <source>%1: Name error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="-8"/>
-        <source>%1: Permission denied</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>%1: Address in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <location filename="../src/network/socket/qlocalserver_win.cpp" line="+158"/>
-        <source>%1: Unknown error %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QLocalSocket</name>
-    <message>
-        <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+132"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+134"/>
-        <source>%1: Connection refused</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: Remote closed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/>
-        <location line="+43"/>
-        <source>%1: Invalid name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: Socket access error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: Socket resource error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: Socket operation timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: Datagram too large</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-48"/>
-        <source>%1: Connection error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <source>%1: The socket operation is not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>%1: Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+10"/>
-        <source>%1: Unknown error %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMYSQLDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1231"/>
-        <source>Unable to open database &apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Unable to connect</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+127"/>
-        <source>Unable to begin transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMYSQLResult</name>
-    <message>
-        <location line="-922"/>
-        <source>Unable to fetch data</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+176"/>
-        <source>Unable to execute query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Unable to store result</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+190"/>
-        <location line="+8"/>
-        <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+34"/>
-        <source>Unable to reset statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+87"/>
-        <source>Unable to bind value</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <location line="+21"/>
-        <source>Unable to bind outvalues</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-12"/>
-        <source>Unable to store statement results</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-253"/>
-        <source>Unable to execute next query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Unable to store next result</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMdiArea</name>
-    <message>
-        <location filename="../src/gui/widgets/qmdiarea.cpp" line="+290"/>
-        <source>(Untitled)</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMdiSubWindow</name>
-    <message>
-        <location filename="../src/gui/widgets/qmdisubwindow.cpp" line="+280"/>
-        <source>%1 - [%2]</source>
-        <translation type="unfinished">%1 - [%2]</translation>
-    </message>
-    <message>
-        <location line="+72"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="-18"/>
-        <source>Minimize</source>
-        <translation type="unfinished">×××¢×š</translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Restore Down</source>
-        <translation type="unfinished">×©×××š ××××</translation>
-    </message>
-    <message>
-        <location line="+707"/>
-        <source>&amp;Restore</source>
-        <translation type="unfinished">×©&amp;×××š</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Move</source>
-        <translation type="unfinished">×&amp;××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Size</source>
-        <translation type="unfinished">××&amp;××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Mi&amp;nimize</source>
-        <translation type="unfinished">&amp;×××¢×š</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Ma&amp;ximize</source>
-        <translation type="unfinished">&amp;××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Stay on &amp;Top</source>
-        <translation type="unfinished">&amp;×ª××× ×¢××××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Close</source>
-        <translation type="unfinished">&amp;×¡×××š</translation>
-    </message>
-    <message>
-        <location line="-787"/>
-        <source>- [%1]</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+58"/>
-        <source>Maximize</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unshade</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Shade</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Restore</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Menu</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMenu</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/>
-        <location line="+225"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="-224"/>
-        <location line="+225"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-    <message>
-        <location line="-223"/>
-        <location line="+225"/>
-        <location line="+51"/>
-        <source>Execute</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMenuBar</name>
-    <message>
-        <source>Options</source>
-        <translation type="obsolete">××€×©×š××××ª</translation>
-    </message>
-</context>
-<context>
-    <name>QMessageBox</name>
-    <message>
-        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1964"/>
-        <location line="+852"/>
-        <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/>
-        <location line="+8"/>
-        <source>OK</source>
-        <translation>×××©××š</translation>
-    </message>
-    <message>
-        <location line="+509"/>
-        <source>About Qt</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-508"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="-1097"/>
-        <source>Show Details...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Hide Details...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1570"/>
-        <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMultiInputContext</name>
-    <message>
-        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontext.cpp" line="+88"/>
-        <source>Select IM</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QMultiInputContextPlugin</name>
-    <message>
-        <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+95"/>
-        <source>Multiple input method switcher</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Multiple input method switcher that uses the context menu of the text widgets</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNativeSocketEngine</name>
-    <message>
-        <location filename="../src/network/socket/qnativesocketengine.cpp" line="+206"/>
-        <source>The remote host closed the connection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Network operation timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Out of resources</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unsupported socket operation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Protocol type not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Invalid socket descriptor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Network unreachable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Permission denied</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Connection timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Connection refused</source>
-        <translation type="unfinished">××××××š × ×××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The bound address is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The address is not available</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>The address is protected</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Unable to send a message</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unable to receive a message</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unable to write</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Network error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Another socket is already listening on the same port</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-66"/>
-        <source>Unable to initialize non-blocking socket</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Unable to initialize broadcast socket</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+21"/>
-        <source>Host unreachable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+24"/>
-        <source>Datagram was too large to send</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>Operation on non-socket</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-3"/>
-        <source>The proxy type is invalid for this operation</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkAccessCacheBackend</name>
-    <message>
-        <location filename="../src/network/access/qnetworkaccesscachebackend.cpp" line="+65"/>
-        <source>Error opening %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkAccessFileBackend</name>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+99"/>
-        <source>Request for opening non-local file %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+42"/>
-        <source>Error opening %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+56"/>
-        <source>Write error writing to %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+33"/>
-        <source>Cannot open %1: Path is a directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+21"/>
-        <source>Read error reading from %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkAccessFtpBackend</name>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessftpbackend.cpp" line="+165"/>
-        <source>No suitable proxy found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>Cannot open %1: is a directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+130"/>
-        <source>Logging in to %1 failed: authentication required</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>Error while downloading %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Error while uploading %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkAccessHttpBackend</name>
-    <message>
-        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+597"/>
-        <source>No suitable proxy found</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkReply</name>
-    <message>
-        <location line="+128"/>
-        <source>Error downloading %1 - server replied: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+68"/>
-        <source>Protocol &quot;%1&quot; is unknown</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QNetworkReplyImpl</name>
-    <message>
-        <location line="+432"/>
-        <location line="+22"/>
-        <source>Operation canceled</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QOCIDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2069"/>
-        <source>Unable to logon</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-144"/>
-        <source>Unable to initialize</source>
-        <comment>QOCIDriver</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+215"/>
-        <source>Unable to begin transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QOCIResult</name>
-    <message>
-        <location line="-963"/>
-        <location line="+161"/>
-        <location line="+15"/>
-        <source>Unable to bind column for batch execute</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to execute batch statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+302"/>
-        <source>Unable to goto next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+59"/>
-        <source>Unable to alloc statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+36"/>
-        <source>Unable to bind value</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QODBCDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1785"/>
-        <source>Unable to connect</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Unable to connect - Driver doesn&apos;t support all needed functionality</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+242"/>
-        <source>Unable to disable autocommit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to enable autocommit</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QODBCResult</name>
-    <message>
-        <location line="-1218"/>
-        <location line="+349"/>
-        <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-332"/>
-        <location line="+626"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-555"/>
-        <source>Unable to fetch next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+279"/>
-        <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+268"/>
-        <source>Unable to bind variable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+194"/>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-475"/>
-        <location line="+578"/>
-        <source>Unable to fetch last</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-672"/>
-        <source>Unable to fetch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+44"/>
-        <source>Unable to fetch first</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Unable to fetch previous</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QObject</name>
-    <message>
-        <location filename="../src/gui/util/qdesktopservices_mac.cpp" line="+165"/>
-        <source>Home</source>
-        <translation type="unfinished">Home</translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/>
-        <source>Operation not supported on %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+53"/>
-        <source>Invalid URI: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+175"/>
-        <source>Write error writing to %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+57"/>
-        <source>Read error reading from %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+31"/>
-        <source>Socket error on %1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Remote host closed the connection prematurely on %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+53"/>
-        <source>Protocol error: packet of size 0 received</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/network/kernel/qhostinfo.cpp" line="+177"/>
-        <location line="+57"/>
-        <source>No host name given</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPPDOptionsModel</name>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1195"/>
-        <source>Name</source>
-        <translation type="unfinished">×©×</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Value</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPSQLDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/psql/qsql_psql.cpp" line="+763"/>
-        <source>Unable to connect</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+49"/>
-        <source>Could not begin transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Could not commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>Could not rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+358"/>
-        <source>Unable to subscribe</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+32"/>
-        <source>Unable to unsubscribe</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPSQLResult</name>
-    <message>
-        <location line="-1058"/>
-        <source>Unable to create query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+374"/>
-        <source>Unable to prepare statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPageSetupWidget</name>
-    <message>
-        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+304"/>
-        <source>Centimeters (cm)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Millimeters (mm)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Inches (in)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Points (pt)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/>
-        <source>Form</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Paper</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Page size:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Width:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Height:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Paper source:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Orientation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Portrait</source>
-        <translation type="unfinished">××××š×</translation>
-    </message>
-    <message>
-        <location/>
-        <source>Landscape</source>
-        <translation type="unfinished">××š×××</translation>
-    </message>
-    <message>
-        <location/>
-        <source>Reverse landscape</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Reverse portrait</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Margins</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>top margin</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>left margin</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>right margin</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>bottom margin</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPluginLoader</name>
-    <message>
-        <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+24"/>
-        <source>Unknown error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-68"/>
-        <source>The plugin was not loaded.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPrintDialog</name>
-    <message>
-        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+98"/>
-        <source>locally connected</source>
-        <translation>×××××š×ª ××§××××ª</translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <location line="+225"/>
-        <source>Aliases: %1</source>
-        <translation>×©×××ª × ××¡×€××: %1</translation>
-    </message>
-    <message>
-        <location line="+223"/>
-        <location line="+199"/>
-        <source>unknown</source>
-        <translation>×× ××××¢</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+268"/>
-        <source>OK</source>
-        <translation type="unfinished">×××©××š</translation>
-    </message>
-    <message>
-        <source>Cancel</source>
-        <translation type="obsolete">×××××</translation>
-    </message>
-    <message>
-        <source>Print in color if available</source>
-        <translation type="obsolete">×××€×¡ ××Š××¢ ×× ××××š ××××</translation>
-    </message>
-    <message>
-        <source>Printer</source>
-        <translation type="obsolete">×××€×¡×ª</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+375"/>
-        <source>Print all</source>
-        <translation type="unfinished">×××€×¡ ×××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Print range</source>
-        <translation type="unfinished">×××× ×××€×¡×</translation>
-    </message>
-    <message>
-        <source>Print last page first</source>
-        <translation type="obsolete">×××€×¡ ××ª ××¢××× ××š××©×× ×××š××</translation>
-    </message>
-    <message>
-        <source>Number of copies:</source>
-        <translation type="obsolete">××¡×€×š ×¢××ª×§××:</translation>
-    </message>
-    <message>
-        <source>Paper format</source>
-        <translation type="obsolete">×ª×× ××ª × ×××š</translation>
-    </message>
-    <message>
-        <source>Portrait</source>
-        <translation type="obsolete">××××š×</translation>
-    </message>
-    <message>
-        <source>Landscape</source>
-        <translation type="obsolete">××š×××</translation>
-    </message>
-    <message>
-        <location line="-48"/>
-        <source>A0 (841 x 1189 mm)</source>
-        <translation>A0 (841 x 1189 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A1 (594 x 841 mm)</source>
-        <translation>A1 (594 x 841 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A2 (420 x 594 mm)</source>
-        <translation>A2 (420 x 594 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A3 (297 x 420 mm)</source>
-        <translation>A3 (297 x 420 mm)</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>A5 (148 x 210 mm)</source>
-        <translation>A5 (148 x 210 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A6 (105 x 148 mm)</source>
-        <translation>A6 (105 x 148 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A7 (74 x 105 mm)</source>
-        <translation>A7 (74 x 105 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A8 (52 x 74 mm)</source>
-        <translation>A8 (52 x 74 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A9 (37 x 52 mm)</source>
-        <translation>A9 (37 x 52 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B0 (1000 x 1414 mm)</source>
-        <translation>B0 (1000 x 1414 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B1 (707 x 1000 mm)</source>
-        <translation>B1 (707 x 1000 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B2 (500 x 707 mm)</source>
-        <translation>B2 (500 x 707 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B3 (353 x 500 mm)</source>
-        <translation>B3 (353 x 500 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B4 (250 x 353 mm)</source>
-        <translation>B4 (250 x 353 mm)</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>B6 (125 x 176 mm)</source>
-        <translation>B6 (125 x 176 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B7 (88 x 125 mm)</source>
-        <translation>B7 (88 x 125 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B8 (62 x 88 mm)</source>
-        <translation>B8 (62 x 88 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B9 (44 x 62 mm)</source>
-        <translation>B9 (44 x 62 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B10 (31 x 44 mm)</source>
-        <translation>B10 (31 x 44 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>C5E (163 x 229 mm)</source>
-        <translation>C5E (163 x 229 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>DLE (110 x 220 mm)</source>
-        <translation>DLE (110 x 220 mm)</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Folio (210 x 330 mm)</source>
-        <translation>Folio (210 x 330 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Ledger (432 x 279 mm)</source>
-        <translation>Ledger (432 x 279 mm)</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Tabloid (279 x 432 mm)</source>
-        <translation>Tabloid (279 x 432 mm)</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>US Common #10 Envelope (105 x 241 mm)</source>
-        <translation>US Common #10 Envelope (105 x 241 mm)</translation>
-    </message>
-    <message>
-        <location line="-25"/>
-        <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+110"/>
-        <location line="+13"/>
-        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/>
-        <source>Print</source>
-        <translation type="unfinished">×××€×¡</translation>
-    </message>
-    <message>
-        <source>File</source>
-        <translation type="obsolete">×§×××¥</translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/>
-        <source>Print To File ...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Other</source>
-        <translation type="obsolete">×××š</translation>
-    </message>
-    <message>
-        <location line="+80"/>
-        <source>File %1 is not writable.
-Please choose a different file name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>%1 already exists.
-Do you want to overwrite it?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-208"/>
-        <source>File exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+227"/>
-        <source>Print selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/>
-        <source>%1 is a directory.
-Please choose a different file name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/>
-        <source>A0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A4</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A5</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A6</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A7</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A8</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>A9</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B4</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B5</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B6</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B7</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B8</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B9</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>B10</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>C5E</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>DLE</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Executive</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Folio</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Ledger</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Legal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Letter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Tabloid</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>US Common #10 Envelope</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Custom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-522"/>
-        <location line="+68"/>
-        <source>&amp;Options &gt;&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-63"/>
-        <source>&amp;Print</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+67"/>
-        <source>&amp;Options &lt;&lt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+253"/>
-        <source>Print to File (PDF)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Print to File (Postscript)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+45"/>
-        <source>Local file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Write %1 file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/>
-        <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPrintPreviewDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/>
-        <location line="+12"/>
-        <source>Page Setup</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+252"/>
-        <source>%1%</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+79"/>
-        <source>Print Preview</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+29"/>
-        <source>Next page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Previous page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>First page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Last page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Fit width</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Fit page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Zoom in</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Zoom out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Portrait</source>
-        <translation type="unfinished">××××š×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Landscape</source>
-        <translation type="unfinished">××š×××</translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Show single page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Show facing pages</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Show overview of all pages</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Print</source>
-        <translation type="unfinished">×××€×¡</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Page setup</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+151"/>
-        <source>Export to PDF</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Export to PostScript</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPrintPropertiesDialog</name>
-    <message>
-        <source>Save</source>
-        <translation type="obsolete">×©×××š</translation>
-    </message>
-    <message>
-        <source>OK</source>
-        <translation type="obsolete">×××©××š</translation>
-    </message>
-</context>
-<context>
-    <name>QPrintPropertiesWidget</name>
-    <message>
-        <location filename="../src/gui/dialogs/qprintpropertieswidget.ui"/>
-        <source>Form</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Page</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Advanced</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPrintSettingsOutput</name>
-    <message>
-        <location filename="../src/gui/dialogs/qprintsettingsoutput.ui"/>
-        <source>Form</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Copies</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Print range</source>
-        <translation type="unfinished">×××× ×××€×¡×</translation>
-    </message>
-    <message>
-        <location/>
-        <source>Print all</source>
-        <translation type="unfinished">×××€×¡ ×××</translation>
-    </message>
-    <message>
-        <location/>
-        <source>Pages from</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>to</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Output Settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Copies:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Collate</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Reverse</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Options</source>
-        <translation type="unfinished">××€×©×š××××ª</translation>
-    </message>
-    <message>
-        <location/>
-        <source>Color Mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Duplex Printing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>None</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Long side</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Short side</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QPrintWidget</name>
-    <message>
-        <location filename="../src/gui/dialogs/qprintwidget.ui"/>
-        <source>Form</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Printer</source>
-        <translation type="unfinished">×××€×¡×ª</translation>
-    </message>
-    <message>
-        <location/>
-        <source>&amp;Name:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>P&amp;roperties</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Location:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Preview</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Type:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>Output &amp;file:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location/>
-        <source>...</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QProcess</name>
-    <message>
-        <location filename="../src/corelib/io/qprocess_unix.cpp" line="+475"/>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="+147"/>
-        <source>Could not open input redirection for reading</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="+36"/>
-        <source>Could not open output redirection for writing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+235"/>
-        <source>Resource error (fork failure): %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+259"/>
-        <location line="+53"/>
-        <location line="+74"/>
-        <location line="+67"/>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="+422"/>
-        <location line="+50"/>
-        <location line="+75"/>
-        <location line="+42"/>
-        <location line="+54"/>
-        <source>Process operation timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/io/qprocess.cpp" line="+533"/>
-        <location line="+52"/>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
-        <location line="+50"/>
-        <source>Error reading from process</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+47"/>
-        <location line="+779"/>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="+140"/>
-        <source>Error writing to process</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-709"/>
-        <source>Process crashed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+912"/>
-        <source>No program defined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/io/qprocess_win.cpp" line="-341"/>
-        <source>Process failed to start</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QProgressDialog</name>
-    <message>
-        <location filename="../src/gui/dialogs/qprogressdialog.cpp" line="+182"/>
-        <source>Cancel</source>
-        <translation>×××××</translation>
-    </message>
-</context>
-<context>
-    <name>QPushButton</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-8"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-</context>
-<context>
-    <name>QRadioButton</name>
-    <message>
-        <location line="+12"/>
-        <source>Check</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QRegExp</name>
-    <message>
-        <location filename="../src/corelib/tools/qregexp.cpp" line="+64"/>
-        <source>no error occurred</source>
-        <translation type="unfinished">×× ×××š×¢× ×× ×©××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>disabled feature used</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>bad char class syntax</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>bad lookahead syntax</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>bad repetition syntax</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>invalid octal value</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>missing left delim</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>unexpected end</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>met internal limit</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSQLite2Driver</name>
-    <message>
-        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+396"/>
-        <source>Error to open database</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+41"/>
-        <source>Unable to begin transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Unable to rollback Transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSQLite2Result</name>
-    <message>
-        <location line="-323"/>
-        <source>Unable to fetch results</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+147"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSQLiteDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+528"/>
-        <source>Error opening database</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Error closing database</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Unable to begin transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to commit transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Unable to rollback transaction</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSQLiteResult</name>
-    <message>
-        <location line="-400"/>
-        <location line="+66"/>
-        <location line="+8"/>
-        <source>Unable to fetch row</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+63"/>
-        <source>Unable to execute statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Unable to reset statement</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+45"/>
-        <source>Unable to bind parameters</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Parameter count mismatch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-208"/>
-        <source>No query</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QScrollBar</name>
-    <message>
-        <location filename="../src/gui/widgets/qscrollbar.cpp" line="+448"/>
-        <source>Scroll here</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Left edge</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Top</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Right edge</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Bottom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Page left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+143"/>
-        <source>Page up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Page right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+4"/>
-        <source>Page down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Scroll left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Scroll up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Scroll right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Scroll down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-6"/>
-        <source>Line up</source>
-        <translation type="unfinished">×¡××š ××©××š×</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Line down</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSharedMemory</name>
-    <message>
-        <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+207"/>
-        <source>%1: unable to set key on lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+81"/>
-        <source>%1: create size is less then 0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+168"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+148"/>
-        <source>%1: unable to lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+22"/>
-        <source>%1: unable to unlock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+78"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/>
-        <source>%1: permission denied</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/>
-        <source>%1: already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
-        <source>%1: doesn&apos;t exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
-        <source>%1: out of resources</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/>
-        <source>%1: unknown error %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+21"/>
-        <source>%1: key is empty</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>%1: unix key file doesn&apos;t exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>%1: ftok failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+51"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/>
-        <source>%1: unable to make key</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>%1: system-imposed size restrictions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+53"/>
-        <source>%1: not attached</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-27"/>
-        <source>%1: invalid size</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+68"/>
-        <source>%1: key error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+38"/>
-        <source>%1: size query failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QShortcut</name>
-    <message>
-        <location filename="../src/gui/kernel/qkeysequence.cpp" line="+373"/>
-        <source>Space</source>
-        <translation type="unfinished">×š×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Esc</source>
-        <translation type="unfinished">Esc</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Tab</source>
-        <translation type="unfinished">Tab</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Backtab</source>
-        <translation type="unfinished">Backtab</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Backspace</source>
-        <translation type="unfinished">Backspace</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Return</source>
-        <translation type="unfinished">Return</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Enter</source>
-        <translation type="unfinished">Enter</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Ins</source>
-        <translation type="unfinished">Ins</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Del</source>
-        <translation type="unfinished">Del</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Pause</source>
-        <translation type="unfinished">Pause</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Print</source>
-        <translation type="unfinished">×××€×¡</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>SysReq</source>
-        <translation type="unfinished">SysReq</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Home</source>
-        <translation type="unfinished">Home</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>End</source>
-        <translation type="unfinished">End</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Left</source>
-        <translation type="unfinished">×©××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Up</source>
-        <translation type="unfinished">×××¢××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Right</source>
-        <translation type="unfinished">×××× ×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Down</source>
-        <translation type="unfinished">××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>PgUp</source>
-        <translation type="unfinished">PgUp</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>PgDown</source>
-        <translation type="unfinished">PgDown</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>CapsLock</source>
-        <translation type="unfinished">CapsLock</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>NumLock</source>
-        <translation type="unfinished">NumLock</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>ScrollLock</source>
-        <translation type="unfinished">ScrollLock</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Menu</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Back</source>
-        <translation type="unfinished">××××š×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Forward</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Stop</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Refresh</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Volume Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Volume Mute</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Volume Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Bass Boost</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Bass Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Bass Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Treble Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Treble Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Media Play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Media Stop</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Media Previous</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Media Next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Media Record</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Favorites</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Search</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Standby</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Open URL</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch Mail</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch Media</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (0)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (1)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (2)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (3)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (4)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (5)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (6)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (7)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (8)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (9)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (A)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (B)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (C)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (D)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (E)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Launch (F)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Print Screen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Page Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Page Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Caps Lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Num Lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Number Lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Scroll Lock</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Insert</source>
-        <translation type="unfinished">×××¡×£</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Delete</source>
-        <translation type="unfinished">×××§</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Escape</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>System Request</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Select</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Yes</source>
-        <translation type="unfinished">××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>No</source>
-        <translation type="unfinished">××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Context1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Context2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Context3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Context4</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Call</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Hangup</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Flip</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+527"/>
-        <location line="+122"/>
-        <source>Ctrl</source>
-        <translation type="unfinished">Ctrl</translation>
-    </message>
-    <message>
-        <location line="-121"/>
-        <location line="+125"/>
-        <source>Shift</source>
-        <translation type="unfinished">Shift</translation>
-    </message>
-    <message>
-        <location line="-124"/>
-        <location line="+122"/>
-        <source>Alt</source>
-        <translation type="unfinished">Alt</translation>
-    </message>
-    <message>
-        <location line="-121"/>
-        <location line="+117"/>
-        <source>Meta</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-25"/>
-        <source>+</source>
-        <translation type="unfinished">+</translation>
-    </message>
-    <message>
-        <location line="+46"/>
-        <source>F%1</source>
-        <translation type="unfinished">F%1</translation>
-    </message>
-    <message>
-        <location line="-720"/>
-        <source>Home Page</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSlider</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+151"/>
-        <source>Page left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Page up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Page right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Page down</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSocks5SocketEngine</name>
-    <message>
-        <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-67"/>
-        <source>Connection to proxy refused</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Connection to proxy closed prematurely</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Proxy host not found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Connection to proxy timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Proxy authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Proxy authentication failed: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>SOCKS version 5 protocol error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>General SOCKSv5 server failure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Connection not allowed by SOCKSv5 server</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>TTL expired</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>SOCKSv5 command not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Address type not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Unknown SOCKSv5 proxy error code 0x%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+685"/>
-        <source>Network operation timed out</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSpinBox</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-574"/>
-        <source>More</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Less</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSql</name>
-    <message>
-        <location filename="../src/qt3support/sql/q3sqlmanager_p.cpp" line="+890"/>
-        <source>Delete</source>
-        <translation type="unfinished">×××§</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Delete this record?</source>
-        <translation type="unfinished">××× ×××××§ ×š×©××× ××?</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <location line="+16"/>
-        <location line="+36"/>
-        <source>Yes</source>
-        <translation type="unfinished">××</translation>
-    </message>
-    <message>
-        <location line="-51"/>
-        <location line="+16"/>
-        <location line="+36"/>
-        <source>No</source>
-        <translation type="unfinished">××</translation>
-    </message>
-    <message>
-        <location line="-44"/>
-        <source>Insert</source>
-        <translation type="unfinished">×××¡×£</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Update</source>
-        <translation type="unfinished">×¢×××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Save edits?</source>
-        <translation type="unfinished">××× ××©×××š ××ª ××¢×š×××?</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-    <message>
-        <location line="+32"/>
-        <source>Confirm</source>
-        <translation type="unfinished">×××©××š</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Cancel your edits?</source>
-        <translation type="unfinished">××× ×××× ××ª ××¢×š××× ×©××?</translation>
-    </message>
-</context>
-<context>
-    <name>QSslSocket</name>
-    <message>
-        <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+569"/>
-        <source>Unable to write data: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+119"/>
-        <source>Error while reading: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+96"/>
-        <source>Error during SSL handshake: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-524"/>
-        <source>Error creating SSL context (%1)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+25"/>
-        <source>Invalid or empty cipher list (%1)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+62"/>
-        <source>Error creating SSL session, %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Error creating SSL session: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-61"/>
-        <source>Cannot provide a certificate with no key, %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Error loading local certificate, %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>Error loading private key, %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Private key does not certificate public key, %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QSystemSemaphore</name>
-    <message>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-41"/>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+66"/>
-        <source>%1: out of resources</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-13"/>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+4"/>
-        <source>%1: permission denied</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>%1: already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>%1: does not exist</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+3"/>
-        <source>%1: unknown error %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QTDSDriver</name>
-    <message>
-        <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/>
-        <source>Unable to open connection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Unable to use database</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QTabBar</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="-326"/>
-        <source>Scroll Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Scroll Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QTcpServer</name>
-    <message>
-        <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/>
-        <source>Operation on socket is not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QTextControl</name>
-    <message>
-        <location filename="../src/gui/text/qtextcontrol.cpp" line="+1973"/>
-        <source>&amp;Undo</source>
-        <translation type="unfinished">&amp;×××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Redo</source>
-        <translation type="unfinished">××Š×¢ &amp;×©××</translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Cu&amp;t</source>
-        <translation type="unfinished">&amp;××××š</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>&amp;Copy</source>
-        <translation type="unfinished">××¢&amp;×ª×§</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Copy &amp;Link Location</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>&amp;Paste</source>
-        <translation type="unfinished">×&amp;×××§</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Delete</source>
-        <translation type="unfinished">×××§</translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Select All</source>
-        <translation type="unfinished">×××š ×××</translation>
-    </message>
-</context>
-<context>
-    <name>QToolButton</name>
-    <message>
-        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/>
-        <location line="+6"/>
-        <source>Press</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-4"/>
-        <location line="+8"/>
-        <source>Open</source>
-        <translation type="unfinished">×€×ª×</translation>
-    </message>
-</context>
-<context>
-    <name>QUdpSocket</name>
-    <message>
-        <location filename="../src/network/socket/qudpsocket.cpp" line="+169"/>
-        <source>This platform does not support IPv6</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QUndoGroup</name>
-    <message>
-        <location filename="../src/gui/util/qundogroup.cpp" line="+386"/>
-        <source>Undo</source>
-        <translation type="unfinished">×××</translation>
-    </message>
-    <message>
-        <location line="+28"/>
-        <source>Redo</source>
-        <translation type="unfinished">×©×××š</translation>
-    </message>
-</context>
-<context>
-    <name>QUndoModel</name>
-    <message>
-        <location filename="../src/gui/util/qundoview.cpp" line="+101"/>
-        <source>&lt;empty&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QUndoStack</name>
-    <message>
-        <location filename="../src/gui/util/qundostack.cpp" line="+834"/>
-        <source>Undo</source>
-        <translation type="unfinished">×××</translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <source>Redo</source>
-        <translation type="unfinished">×©×××š</translation>
-    </message>
-</context>
-<context>
-    <name>QUnicodeControlCharacterMenu</name>
-    <message>
-        <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/>
-        <source>LRM Left-to-right mark</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>RLM Right-to-left mark</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>ZWJ Zero width joiner</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>ZWNJ Zero width non-joiner</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>ZWSP Zero width space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>LRE Start of left-to-right embedding</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>RLE Start of right-to-left embedding</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>LRO Start of left-to-right override</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>RLO Start of right-to-left override</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>PDF Pop directional formatting</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Insert Unicode control character</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QWebFrame</name>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+692"/>
-        <source>Request cancelled</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Request blocked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Cannot show URL</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Frame load interruped by policy change</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Cannot show mimetype</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>File does not exist</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QWebPage</name>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+382"/>
-        <source>Bad HTTP request</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
-        <source>Submit</source>
-        <comment>default label for Submit buttons in forms on web pages</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Submit</source>
-        <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Reset</source>
-        <comment>default label for Reset buttons in forms on web pages</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>This is a searchable index. Enter search keywords: </source>
-        <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Choose File</source>
-        <comment>title for file button used in HTML forms</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>No file selected</source>
-        <comment>text to display in file button used in HTML forms when no file is selected</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Open in New Window</source>
-        <comment>Open in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Save Link...</source>
-        <comment>Download Linked File context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Copy Link</source>
-        <comment>Copy Link context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Open Image</source>
-        <comment>Open Image in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Save Image</source>
-        <comment>Download Image context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Copy Image</source>
-        <comment>Copy Link context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Open Frame</source>
-        <comment>Open Frame in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Copy</source>
-        <comment>Copy context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Go Back</source>
-        <comment>Back context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Go Forward</source>
-        <comment>Forward context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Stop</source>
-        <comment>Stop context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Reload</source>
-        <comment>Reload context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Cut</source>
-        <comment>Cut context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Paste</source>
-        <comment>Paste context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>No Guesses Found</source>
-        <comment>No Guesses Found context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Ignore</source>
-        <comment>Ignore Spelling context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Add To Dictionary</source>
-        <comment>Learn Spelling context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Search The Web</source>
-        <comment>Search The Web context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Look Up In Dictionary</source>
-        <comment>Look Up in Dictionary context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Open Link</source>
-        <comment>Open Link context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Ignore</source>
-        <comment>Ignore Grammar context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Spelling</source>
-        <comment>Spelling and Grammar context sub-menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Show Spelling and Grammar</source>
-        <comment>menu item title</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Hide Spelling and Grammar</source>
-        <comment>menu item title</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Check Spelling</source>
-        <comment>Check spelling context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Check Spelling While Typing</source>
-        <comment>Check spelling while typing context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Check Grammar With Spelling</source>
-        <comment>Check grammar with spelling context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Fonts</source>
-        <comment>Font context sub-menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Bold</source>
-        <comment>Bold context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Italic</source>
-        <comment>Italic context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Underline</source>
-        <comment>Underline context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Outline</source>
-        <comment>Outline context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Direction</source>
-        <comment>Writing direction context sub-menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Text Direction</source>
-        <comment>Text direction context sub-menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Default</source>
-        <comment>Default writing direction context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>LTR</source>
-        <comment>Left to Right context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>RTL</source>
-        <comment>Right to Left context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Inspect</source>
-        <comment>Inspect Element context menu item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>No recent searches</source>
-        <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Recent searches</source>
-        <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Clear recent searches</source>
-        <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+75"/>
-        <source>Unknown</source>
-        <comment>Unknown filesize FTP directory listing item</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>%1 (%2x%3 pixels)</source>
-        <comment>Title string for images</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+185"/>
-        <source>Web Inspector - %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/>
-        <source>Scroll here</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Left edge</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Top</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Right edge</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Bottom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Page left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Page up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Page right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Page down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Scroll left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Scroll up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Scroll right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Scroll down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message numerus="yes">
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/>
-        <source>%n file(s)</source>
-        <comment>number of chosen file</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-        </translation>
-    </message>
-    <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1322"/>
-        <source>JavaScript Alert - %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>JavaScript Confirm - %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>JavaScript Prompt - %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+333"/>
-        <source>Move the cursor to the next character</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the previous character</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the next word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the previous word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the next line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the previous line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the start of the line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the end of the line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the start of the block</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the end of the block</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the start of the document</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Move the cursor to the end of the document</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select all</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the next character</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the previous character</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the next word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the previous word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the next line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the previous line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the start of the line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the end of the line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the start of the block</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the end of the block</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the start of the document</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Select to the end of the document</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Delete to the start of the word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Delete to the end of the word</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+33"/>
-        <source>Insert a new paragraph</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Insert a new line</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QWhatsThisAction</name>
-    <message>
-        <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+522"/>
-        <source>What&apos;s This?</source>
-        <translation type="unfinished">×× ××?</translation>
-    </message>
-</context>
-<context>
-    <name>QWidget</name>
-    <message>
-        <location filename="../src/gui/kernel/qwidget.cpp" line="+5326"/>
-        <source>*</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QWizard</name>
-    <message>
-        <location filename="../src/gui/dialogs/qwizard.cpp" line="+649"/>
-        <source>Cancel</source>
-        <translation type="unfinished">×××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Help</source>
-        <translation type="unfinished">×¢××š×</translation>
-    </message>
-    <message>
-        <location line="-14"/>
-        <source>Go Back</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Continue</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Commit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Done</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-10"/>
-        <source>&lt; &amp;Back</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>&amp;Finish</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Help</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-8"/>
-        <source>&amp;Next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>&amp;Next &gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QWorkspace</name>
-    <message>
-        <location filename="../src/gui/widgets/qworkspace.cpp" line="+1094"/>
-        <source>&amp;Restore</source>
-        <translation type="unfinished">×©&amp;×××š</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Move</source>
-        <translation type="unfinished">×&amp;××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Size</source>
-        <translation type="unfinished">&amp;×©× × ××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Mi&amp;nimize</source>
-        <translation type="unfinished">&amp;×××¢×š</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Ma&amp;ximize</source>
-        <translation type="unfinished">&amp;××××</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Close</source>
-        <translation type="unfinished">&amp;×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Stay on &amp;Top</source>
-        <translation type="unfinished">&amp;×ª××× ×¢××××</translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <location line="+1059"/>
-        <source>Sh&amp;ade</source>
-        <translation type="unfinished">&amp;××××</translation>
-    </message>
-    <message>
-        <location line="-278"/>
-        <location line="+60"/>
-        <source>%1 - [%2]</source>
-        <translation>%1 - [%2]</translation>
-    </message>
-    <message>
-        <location line="-1837"/>
-        <source>Minimize</source>
-        <translation type="unfinished">×××¢×š</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Restore Down</source>
-        <translation type="unfinished">×©×××š ××××</translation>
-    </message>
-    <message>
-        <location line="-4"/>
-        <source>Close</source>
-        <translation type="unfinished">×¡×××š</translation>
-    </message>
-    <message>
-        <location line="+2053"/>
-        <source>&amp;Unshade</source>
-        <translation type="unfinished">&amp;××× ×××××</translation>
-    </message>
-</context>
-<context>
-    <name>QXml</name>
-    <message>
-        <location filename="../src/xml/sax/qxml.cpp" line="+58"/>
-        <source>no error occurred</source>
-        <translation>×× ×××š×¢× ×× ×©××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error triggered by consumer</source>
-        <translation>× ××š×× ×©×××× ×¢× ××× ××Š×š××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>unexpected end of file</source>
-        <translation>×¡××£ ×§×××¥ ×× ×Š×€××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>more than one document type definition</source>
-        <translation>×××ª×š ×××××š× ×××ª ×©× ×¡×× ××¡××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error occurred while parsing element</source>
-        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××š×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>tag mismatch</source>
-        <translation>××-××ª××× ××ª×××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error occurred while parsing content</source>
-        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ××ª×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>unexpected character</source>
-        <translation>×ª× ×× ×Š×€××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>invalid name for processing instruction</source>
-        <translation>×©× ×× ×ª×§×£ ×¢×××š ×××š××ª ××¢××××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>version expected while reading the XML declaration</source>
-        <translation>××××ª× ×Š×€××× ×××š×¡× ××¢×ª ×§×š××× ××××š×× ×¢× XML</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>wrong value for standalone declaration</source>
-        <translation>×¢×š× ×©××× ×¢×××š ×××××š× ××¢×Š××××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
-        <translation>××××ª× ×Š×€××× ×××š×× ×¢× ×§×××× ×× ×××š×× ×¢×Š××××ª ××¢×ª ×§×š×××ª ××××š×× ×¢× XML</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>standalone declaration expected while reading the XML declaration</source>
-        <translation>××××ª× ×Š×€××× ×××š×× ×¢×Š××××ª ××¢×ª ×§×š×××ª ××××š×× ×¢× XML</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error occurred while parsing document type definition</source>
-        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ××××š×ª ×¡×× ×××¡××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>letter is expected</source>
-        <translation>××××ª× ×Š×€××× ×××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error occurred while parsing comment</source>
-        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××¢×š×</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error occurred while parsing reference</source>
-        <translation>×××š×¢× ×©×××× ××¢×ª ×¢×××× ×××ª××××¡××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>internal general entity reference not allowed in DTD</source>
-        <translation>××ª××××¡××ª ××××©××ª ×××××ª ×€× ××××ª ××× × ×××ª×š×ª ×-DTD</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>external parsed general entity reference not allowed in attribute value</source>
-        <translation>××ª××××¡××ª ××××©××ª ×××××ª ××¢××××ª ×××Š×× ××ª ××× × ×××ª×š×ª ××¢×š× ××××€×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>external parsed general entity reference not allowed in DTD</source>
-        <translation>××ª××××¡××ª ××××©××ª ×××××ª ××¢××××ª ×××Š×× ××ª ××× × ×××ª×š×ª ×-DTD</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>unparsed entity reference in wrong context</source>
-        <translation>××ª××××¡××ª ××××©××ª ×× ××¢××××ª ×××§×©×š ×©×××</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>recursive entities</source>
-        <translation>×××©××ª ×š×§××š×¡××××ª</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>error in the text declaration of an external entity</source>
-        <translation>×©×××× ××××š××ª ××§×¡× ×©× ×××©××ª ×××Š×× ××ª</translation>
-    </message>
-</context>
-<context>
-    <name>QXmlStream</name>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream.cpp" line="+592"/>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+1769"/>
-        <source>Extra content at end of document.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+222"/>
-        <source>Invalid entity value.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+107"/>
-        <source>Invalid XML character.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+259"/>
-        <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+309"/>
-        <source>Namespace prefix &apos;%1&apos; not declared</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+78"/>
-        <source>Attribute redefined.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+115"/>
-        <source>Unexpected character &apos;%1&apos; in public id literal.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+28"/>
-        <source>Invalid XML version string.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Unsupported XML version.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>%1 is an invalid encoding name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Encoding %1 is unsupported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>Standalone accepts only yes or no.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Invalid attribute in XML declaration.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>Premature end of document.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Invalid document.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+40"/>
-        <source>Expected </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>, but got &apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Unexpected &apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+210"/>
-        <source>Expected character data.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-995"/>
-        <source>Recursive entity detected.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+516"/>
-        <source>Start tag expected.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+222"/>
-        <source>XML declaration not at start of document.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-31"/>
-        <source>NDATA in parameter entity declaration.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+34"/>
-        <source>%1 is an invalid processing instruction name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Invalid processing instruction name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-521"/>
-        <location line="+12"/>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+164"/>
-        <location line="+53"/>
-        <source>Illegal namespace declaration.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+15"/>
-        <source>Invalid XML name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>Opening and ending tag mismatch.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>Reference to unparsed entity &apos;%1&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-13"/>
-        <location line="+61"/>
-        <location line="+40"/>
-        <source>Entity &apos;%1&apos; not declared.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-26"/>
-        <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+40"/>
-        <source>Invalid character reference.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream.cpp" line="-75"/>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="-823"/>
-        <source>Encountered incorrectly encoded content.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+274"/>
-        <source>The standalone pseudo attribute must appear after the encoding.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/>
-        <source>%1 is an invalid PUBLIC identifier.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QtXmlPatterns</name>
-    <message>
-        <location filename="../src/xmlpatterns/acceltree/qacceltreebuilder.cpp" line="+205"/>
-        <source>An %1-attribute with value %2 has already been declared.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>An %1-attribute must have a valid %2 as value, which %3 isn&apos;t.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/>
-        <source>Network timeout.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/>
-        <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+60"/>
-        <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+80"/>
-        <source>Year %1 is invalid because it begins with %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>Day %1 is outside the range %2..%3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Month %1 is outside the range %2..%3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Overflow: Can&apos;t represent date %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Day %1 is invalid for month %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+49"/>
-        <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Time %1:%2:%3.%4 is invalid.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+115"/>
-        <source>Overflow: Date can&apos;t be represented.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/>
-        <location line="+15"/>
-        <source>At least one component must be present.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-7"/>
-        <source>At least one time component must appear after the %1-delimiter.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qabstractfloatmathematician.cpp" line="+64"/>
-        <source>No operand in an integer division, %1, can be %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>The first operand in an integer division, %1, cannot be infinity (%2).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>The second operand in a division, %1, cannot be zero (%2).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/>
-        <source>%1 is not a valid value of type %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/>
-        <source>When casting to %1 from %2, the source value cannot be %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+65"/>
-        <source>Integer division (%1) by zero (%2) is undefined.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Division (%1) by zero (%2) is undefined.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Modulus division (%1) by zero (%2) is undefined.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+122"/>
-        <location line="+32"/>
-        <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-20"/>
-        <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+32"/>
-        <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qatomicvalue.cpp" line="+79"/>
-        <source>A value of type %1 cannot have an Effective Boolean Value.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/>
-        <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/>
-        <source>Value %1 of type %2 exceeds maximum (%3).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Value %1 of type %2 is below minimum (%3).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+91"/>
-        <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>%1 is not valid as a value of type %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+207"/>
-        <source>Operator %1 cannot be used on type %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="+66"/>
-        <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+88"/>
-        <source>Type error in cast, expected %1, received %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+29"/>
-        <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qcastingplatform.cpp" line="+134"/>
-        <source>No casting is possible with %1 as the target type.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>It is not possible to cast from %1 to %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>It&apos;s not possible to cast the value %1 of type %2 to %3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Failure when casting from %1 to %2: %3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/>
-        <source>A comment cannot contain %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>A comment cannot end with a %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qcomparisonplatform.cpp" line="+167"/>
-        <source>No comparisons can be done involving the type %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>Operator %1 is not available between atomic values of type %2 and %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qdocumentcontentvalidator.cpp" line="+86"/>
-        <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+169"/>
-        <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+40"/>
-        <source>No template by name %1 exists.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="+106"/>
-        <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+32"/>
-        <source>A positional predicate must evaluate to a single numeric value.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/>
-        <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+24"/>
-        <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qpath.cpp" line="+109"/>
-        <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/>
-        <source>The data of a processing instruction cannot contain the string %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/>
-        <source>No namespace binding exists for the prefix %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+156"/>
-        <source>No namespace binding exists for the prefix %1 in %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/>
-        <source>%1 is an invalid %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message numerus="yes">
-        <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/>
-        <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-        </translation>
-    </message>
-    <message numerus="yes">
-        <location line="+11"/>
-        <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-        </translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+120"/>
-        <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+74"/>
-        <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+91"/>
-        <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/>
-        <source>%1 is not a valid XML 1.0 character.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qcomparingaggregator.cpp" line="+197"/>
-        <source>The first argument to %1 cannot be of type %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/>
-        <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/>
-        <source>%1 was called.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+94"/>
-        <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+26"/>
-        <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/>
-        <source>%1 matches newline characters</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>%1 and %2 match the start and end of a line.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Matches are case insensitive</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Whitespace characters are removed, except when they appear in character classes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+99"/>
-        <source>%1 is an invalid regular expression pattern: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+30"/>
-        <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/>
-        <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+347"/>
-        <source>It will not be possible to retrieve %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/>
-        <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+279"/>
-        <source>The default collection is undefined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>%1 cannot be retrieved</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/>
-        <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+87"/>
-        <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>%1 is not a whole number of minutes.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/>
-        <source>Required cardinality is %1; got cardinality %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/>
-        <source>The item %1 did not match the required type %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+379"/>
-        <location line="+7253"/>
-        <source>%1 is an unknown schema type.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-6971"/>
-        <source>Only one %1 declaration can occur in the query prolog.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+188"/>
-        <source>The initialization of variable %1 depends on itself</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+63"/>
-        <source>No variable by name %1 exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/>
-        <source>The variable %1 is unused</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2841"/>
-        <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+55"/>
-        <source>No function with signature %1 is available</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+72"/>
-        <location line="+10"/>
-        <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Namespace declarations must occur before function, variable, and option declarations.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Module imports must occur before function, variable, and option declarations.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+200"/>
-        <source>It is not possible to redeclare prefix %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>Prefix %1 is already declared in the prolog.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+95"/>
-        <source>The name of an option must have a prefix. There is no default namespace for options.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+171"/>
-        <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>The target namespace of a %1 cannot be empty.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>The module import feature is not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+52"/>
-        <source>No value is available for the external variable by name %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-4154"/>
-        <source>A construct was encountered which only is allowed in XQuery.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+118"/>
-        <source>A template by name %1 has already been declared.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3581"/>
-        <source>The keyword %1 cannot occur with any other mode name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+29"/>
-        <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+75"/>
-        <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+312"/>
-        <source>A variable by name %1 has already been declared.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+135"/>
-        <source>A stylesheet function must have a prefixed name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+34"/>
-        <source>A function already exists with the signature %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+37"/>
-        <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+179"/>
-        <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+63"/>
-        <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+126"/>
-        <source>%1 is an invalid template mode name.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+44"/>
-        <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+758"/>
-        <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+267"/>
-        <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+129"/>
-        <source>The %1-axis is unsupported in XQuery</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1150"/>
-        <source>%1 is not a valid name for a processing-instruction.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-7029"/>
-        <source>%1 is not a valid numeric literal.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6165"/>
-        <source>No function by name %1 is available.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+102"/>
-        <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>%1 is an invalid namespace URI.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>It is not possible to bind to the prefix %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>Two namespace declaration attributes have the same name: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+89"/>
-        <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>An attribute by name %1 has already appeared on this element.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+61"/>
-        <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+458"/>
-        <source>The name %1 does not refer to any schema type.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+145"/>
-        <location line="+71"/>
-        <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+48"/>
-        <source>The name of an extension expression must be in a namespace.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/>
-        <source>empty</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>zero or one</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>exactly one</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>one or more</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>zero or more</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+63"/>
-        <source>Required type is %1, but %2 was found.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+44"/>
-        <source>Promoting %1 to %2 may cause loss of precision.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+49"/>
-        <source>The focus is undefined.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+86"/>
-        <source>It&apos;s not possible to add attributes after any other kind of node.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>An attribute by name %1 has already been created.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/>
-        <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="+314"/>
-        <source>%1 is an unsupported encoding.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qapplytemplate.cpp" line="+119"/>
-        <source>Ambiguous rule match.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/>
-        <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>The prefix must be a valid %1, which %2 is not.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>The prefix %1 cannot be bound.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qevaluationcache.cpp" line="+117"/>
-        <source>Circularity detected</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="+145"/>
-        <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-71"/>
-        <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/functions/qunparsedtextfn.cpp" line="+65"/>
-        <source>The URI cannot have a fragment</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+519"/>
-        <source>Element %1 is not allowed at this location.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Text nodes are not allowed at this location.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Parse error: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+62"/>
-        <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+108"/>
-        <source>Unknown XSL-T attribute %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+23"/>
-        <source>Attribute %1 and %2 are mutually exclusive.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+166"/>
-        <source>In a simplified stylesheet module, attribute %1 must be present.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+72"/>
-        <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Element %1 must have at least one of the attributes %2 or %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+28"/>
-        <source>At least one mode must be specified in the %1-attribute on element %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qmaintainingreader.cpp" line="+183"/>
-        <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <source>The attribute %1 must appear on element %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>The element with local name %1 does not exist in XSL-T.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+123"/>
-        <source>Element %1 must come last.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+24"/>
-        <source>At least one %1-element must occur before %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Only one %1-element can appear.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+31"/>
-        <source>At least one %1-element must occur inside %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+58"/>
-        <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+125"/>
-        <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+270"/>
-        <source>Element %1 cannot have children.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+434"/>
-        <source>Element %1 cannot have a sequence constructor.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+86"/>
-        <location line="+9"/>
-        <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+15"/>
-        <source>A parameter in a function cannot be declared to be a tunnel.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+149"/>
-        <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+57"/>
-        <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+48"/>
-        <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Attribute %1 cannot have the value %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+58"/>
-        <source>The attribute %1 can only appear on the first %2 element.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+99"/>
-        <source>At least one %1 element must appear as child of %2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>VolumeSlider</name>
-    <message>
-        <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+67"/>
-        <source>Muted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <location line="+15"/>
-        <source>Volume: %1%</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>
Index: /trunk/translations/qt_ru.ts
===================================================================
--- /trunk/translations/qt_ru.ts	(revision 768)
+++ /trunk/translations/qt_ru.ts	(revision 769)
@@ -5,5 +5,5 @@
     <name>CloseButton</name>
     <message>
-        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/>
+        <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/>
         <source>Close Tab</source>
         <translation>ÐÐ°ÐºÑÑÑÑ Ð²ÐºÐ»Ð°ÐŽÐºÑ</translation>
@@ -13,5 +13,5 @@
     <name>FakeReply</name>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2191"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2200"/>
         <source>Fake error !</source>
         <translation type="unfinished"></translation>
@@ -59,5 +59,5 @@
     <name>Phonon::AudioOutput</name>
     <message>
-        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/>
+        <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/>
         <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
         <translation>&lt;html&gt;ÐÐ²ÑÐºÐŸÐ²ÐŸÐµ ÑÑÑÑÐŸÐ¹ÑÑÐ²ÐŸ &lt;b&gt;%1&lt;/b&gt; ÐœÐµ ÑÐ°Ð±ÐŸÑÐ°ÐµÑ.&lt;br/&gt;ÐÑÐŽÐµÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑÑÑ &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</translation>
@@ -77,5 +77,5 @@
     <name>Phonon::Gstreamer::Backend</name>
     <message>
-        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/>
+        <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/>
         <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
           Some video features have been disabled.</source>
@@ -99,9 +99,9 @@
         <source>Cannot start playback. 
 
-Check your Gstreamer installation and make sure you 
+Check your GStreamer installation and make sure you 
 have libgstreamer-plugins-base installed.</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐœÐ°ÑÐ°ÑÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ.
 
-ÐÑÐŸÐ²ÐµÑÑÑÐµ ÑÑÑÐ°ÐœÐŸÐ²ÐºÑ Gstreamer Ðž ÑÐ±ÐµÐŽÐžÑÐµÑÑ, 
+ÐÑÐŸÐ²ÐµÑÑÑÐµ ÑÑÑÐ°ÐœÐŸÐ²ÐºÑ GStreamer Ðž ÑÐ±ÐµÐŽÐžÑÐµÑÑ, 
 ÑÑÐŸ Ð¿Ð°ÐºÐµÑ libgstreamer-plugins-base ÑÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœ.</translation>
     </message>
@@ -113,8 +113,8 @@
     </message>
     <message>
-        <location line="+681"/>
+        <location line="+702"/>
         <location line="+8"/>
         <location line="+15"/>
-        <location line="+22"/>
+        <location line="+26"/>
         <location line="+6"/>
         <location line="+19"/>
@@ -126,5 +126,5 @@
     </message>
     <message>
-        <location line="-420"/>
+        <location line="-424"/>
         <source>Invalid source type.</source>
         <translation>ÐÐµÐ²ÐµÑÐœÑÐ¹ ÑÐžÐ¿ ÐžÑÑÐŸÑÐœÐžÐºÐ° ÐŒÐµÐŽÐžÐ°-ÐŽÐ°ÐœÐœÑÑ
@@ -132,5 +132,5 @@
     </message>
     <message>
-        <location line="+394"/>
+        <location line="+398"/>
         <source>Could not locate media source.</source>
         <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐœÐ°Ð¹ÑÐž ÐžÑÑÐŸÑÐœÐžÐº ÐŒÐµÐŽÐžÐ°-ÐŽÐ°ÐœÐœÑÑ
@@ -152,5 +152,5 @@
     <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>ÐÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ Ð·Ð²ÑÐºÐ°</translation>
@@ -161,11 +161,203 @@
         <translation>Ð£ÑÑÑÐŸÐ¹ÑÑÐ²ÐŸ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð·Ð²ÑÐºÐ°</translation>
     </message>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+87"/>
+        <source>No error</source>
+        <translation>ÐÐµÑ ÐŸÑÐžÐ±ÐºÐž</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Not found</source>
+        <translation>ÐÐµ ÐœÐ°Ð¹ÐŽÐµÐœ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Out of memory</source>
+        <translation>ÐÐµÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐŸ ÑÐµÑÑÑÑÐŸÐ²</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Not supported</source>
+        <translation>ÐÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Overflow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Underflow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Already exists</source>
+        <translation>Ð£Ð¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Path not found</source>
+        <translation>ÐÑÑÑ ÐœÐµ ÐœÐ°Ð¹ÐŽÐµÐœ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>In use</source>
+        <translation>ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Not ready</source>
+        <translation>ÐÐµ Ð³ÐŸÑÐŸÐ²</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Access denied</source>
+        <translation>ÐÐŸÑÑÑÐ¿ Ð·Ð°Ð¿ÑÐµÑÑÐœ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Could not connect</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disconnected</source>
+        <translation>Ð¡ÐŸÐµÐŽÐžÐœÐµÐœÐžÐµ ÑÐ°Ð·ÐŸÑÐ²Ð°ÐœÐŸ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Permission denied</source>
+        <translation>ÐÐŸÑÑÑÐ¿ Ð·Ð°Ð¿ÑÐµÑÑÐœ</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Insufficient bandwidth</source>
+        <translation type="unfinished">ÐÐµÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐ°Ñ ÑÐžÑÐžÐœÐ° ÐºÐ°ÐœÐ°Ð»Ð°</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Network unavailable</source>
+        <translation>Ð¡ÐµÑÑ ÐœÐµÐŽÐŸÑÑÑÐ¿ÐœÐ°</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Network communication error</source>
+        <translation type="unfinished">ÐÑÐžÐ±ÐºÐ° ÑÐµÑÐµÐ²ÐŸÐ³ÐŸ ÐŸÐ±ÐŒÐµÐœÐ° ÐŽÐ°ÐœÐœÑÐŒÐž</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Streaming not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Server alert</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid protocol</source>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ Ð¿ÑÐŸÑÐŸÐºÐŸÐ»</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Invalid URL</source>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹ URL</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Multicast error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Proxy server error</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° Ð¿ÑÐŸÐºÑÐž-ÑÐµÑÐ²ÐµÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Proxy server not supported</source>
+        <translation>ÐÑÐŸÐºÑÐž-ÑÐµÑÐ²ÐµÑ ÐœÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Audio output error</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð·Ð²ÑÐºÐ°</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Video output error</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð²ÐžÐŽÐµÐŸ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Decoder error</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° ÐŽÐµÐºÐŸÐŽÐžÑÐŸÐ²Ð°ÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Audio or video components could not be played</source>
+        <translation>ÐÑÐŽÐžÐŸ- ÐžÐ»Ðž Ð²ÐžÐŽÐµÐŸ-ÑÐŸÑÑÐŸÐ²Ð»ÑÑÑÐ°Ñ ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐ°</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>DRM error</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° DRM</translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>Unknown error (%1)</source>
+        <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÐ°Ñ ÐŸÑÐžÐ±ÐºÐ° (%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>ÐÐµ Ð³ÐŸÑÐŸÐ² Ðº Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+161"/>
+        <location line="+10"/>
+        <source>Error opening file</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÐžÑ ÑÐ°Ð¹Ð»Ð°</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Error opening URL</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÐžÑ URL</translation>
+    </message>
+    <message>
+        <location line="+83"/>
+        <source>Setting volume failed</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÑÐŸÐ²ÐµÐœÑ Ð³ÑÐŸÐŒÐºÐŸÑÑÐž</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>Playback complete</source>
+        <translation>ÐÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ Ð·Ð°Ð²ÐµÑÑÐµÐœÐŸ</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>ÐÐŸÐ»ÐŸÑÐ° ÑÐ°ÑÑÐŸÑ, %1 ÐÑ</translation>
+        <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/>
+        <source>%1 Hz</source>
+        <translation>%1 ÐÑ</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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <source>Opening clip failed</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
@@ -173,38 +365,129 @@
     <name>Phonon::MMF::EffectFactory</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/>
-        <source>audio equalizer</source>
-        <translation>ÐÑÐŽÐžÐŸÑÐºÐ²Ð°Ð»Ð°Ð¹Ð·ÐµÑ</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Bass boost</source>
-        <translation>Ð£ÑÐžÐ»ÐµÐœÐžÐµ Ð±Ð°ÑÐŸÐ²</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Distance Attenuation</source>
-        <translation>ÐÑÐ»Ð°Ð±Ð»ÐµÐœÐžÐµ Ð¿ÑÐž ÐŸÑÐŽÐ°Ð»ÐµÐœÐžÐž</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <location line="+2"/>
-        <source>Environmental Reverb</source>
-        <translation>Ð ÐµÐ²ÐµÑÐ±ÐµÑÐ°ÑÐžÑ</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Loudness</source>
-        <translation>ÐÑÐŸÐŒÐºÐŸÑÑÑ</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Source Orientation</source>
-        <translation>ÐÑÐžÐµÐœÑÐ°ÑÐžÑ ÐžÑÑÐŸÑÐœÐžÐºÐ°</translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Stereo Widening</source>
-        <translation>Ð Ð°ÑÑÐžÑÐµÐœÐžÐµ ÑÑÐµÑÐµÐŸÐ±Ð°Ð·Ñ</translation>
+        <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/>
+        <source>Enabled</source>
+        <translation type="unfinished">ÐÐºÑÐžÐ²ÐœÐŸ</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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Decay time (ms)</source>
+        <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
+        <translation type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Room level (mB)</source>
+        <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::MediaObject</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+270"/>
+        <source>Error opening source: type not supported</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÑÐžÑ ÐžÑÑÐŸÑÐœÐžÐºÐ°: ÑÐžÐ¿ ÐœÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <source>Error opening source: media type could not be determined</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÑÐžÑ ÐžÑÑÐŸÑÐœÐžÐºÐ°: ÑÐžÐ¿ ÐŒÐµÐŽÐžÐ°-ÐŽÐ°ÐœÐœÑÑ
+ ÐœÐµ ÐŸÐ¿ÑÐµÐŽÐµÐ»ÑÐœ</translation>
+    </message>
+</context>
+<context>
+    <name>Phonon::MMF::StereoWidening</name>
+    <message>
+        <location filename="../src/3rdparty/phonon/mmf/stereowidening.cpp" line="+79"/>
+        <source>Level (%)</source>
+        <translation>Ð£ÑÐŸÐ²ÐµÐœÑ (%)</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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Seek failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+54"/>
+        <source>Getting position failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Opening clip failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Buffering clip failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+174"/>
+        <location line="+12"/>
+        <location line="+176"/>
+        <location line="+15"/>
+        <location line="+6"/>
+        <source>Video display error</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
@@ -276,5 +559,5 @@
     <name>Q3FileDialog</name>
     <message>
-        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+829"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+835"/>
         <source>Copy or Move a File</source>
         <translation>ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ ÐžÐ»Ðž Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐ°Ð¹Ð»</translation>
@@ -301,5 +584,5 @@
         <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>ÐÑÐµ ÑÐ°Ð¹Ð»Ñ (*)</translation>
@@ -919,6 +1202,6 @@
     <name>QAbstractSocket</name>
     <message>
-        <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/>
-        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+906"/>
+        <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+629"/>
         <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/>
         <location line="+26"/>
@@ -939,6 +1222,6 @@
     </message>
     <message>
-        <location line="-548"/>
-        <location line="+789"/>
+        <location line="-559"/>
+        <location line="+809"/>
         <location line="+208"/>
         <source>Operation on socket is not supported</source>
@@ -946,10 +1229,11 @@
     </message>
     <message>
-        <location line="+187"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+598"/>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+203"/>
         <source>Socket operation timed out</source>
         <translation>ÐÑÐµÐŒÑ ÐœÐ° ÐŸÐ¿ÐµÑÐ°ÑÐžÑ Ñ ÑÐŸÐºÐµÑÐŸÐŒ ÐžÑÑÐµÐºÐ»ÐŸ</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location filename="../src/network/socket/qabstractsocket.cpp" line="+380"/>
         <source>Socket is not connected</source>
         <translation>Ð¡ÐŸÐºÐµÑ ÐœÐµ Ð¿ÐŸÐŽÐºÐ»ÑÑÑÐœ</translation>
@@ -964,5 +1248,5 @@
     <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;ÐµÑÑ
@@ -981,4 +1265,12 @@
 </context>
 <context>
+    <name>QAccessibleButton</name>
+    <message>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/>
+        <source>Press</source>
+        <translation>ÐÐ°Ð¶Ð°ÑÑ</translation>
+    </message>
+</context>
+<context>
     <name>QApplication</name>
     <message>
@@ -998,5 +1290,5 @@
     </message>
     <message>
-        <location filename="../src/gui/kernel/qapplication.cpp" line="+2293"/>
+        <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>
@@ -1035,5 +1327,5 @@
     <name>QCheckBox</name>
     <message>
-        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-136"/>
         <source>Uncheck</source>
         <translation>Ð¡ÐœÑÑÑ ÐŸÑÐŒÐµÑÐºÑ</translation>
@@ -1053,5 +1345,5 @@
     <name>QColorDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1349"/>
+        <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1355"/>
         <source>Hu&amp;e:</source>
         <translation>&amp;Ð¢ÐŸÐœ:</translation>
@@ -1093,5 +1385,5 @@
     </message>
     <message>
-        <location line="+180"/>
+        <location line="+183"/>
         <source>&amp;Basic colors</source>
         <translation>&amp;ÐÑÐœÐŸÐ²ÐœÑÐµ ÑÐ²ÐµÑÐ°</translation>
@@ -1180,5 +1472,5 @@
     <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>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÑÐŸÐµÐŽÐžÐœÐžÑÑÑÑ</translation>
@@ -1203,5 +1495,5 @@
     <name>QDB2Result</name>
     <message>
-        <location line="-1031"/>
+        <location line="-1030"/>
         <location line="+240"/>
         <source>Unable to execute statement</source>
@@ -1278,5 +1570,5 @@
     <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>Ð§ÑÐŸ ÑÑÐŸ?</translation>
@@ -1291,7 +1583,7 @@
     <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="+607"/>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/>
         <source>OK</source>
         <translation>ÐÐ</translation>
@@ -1411,5 +1703,5 @@
         <location line="+3"/>
         <source>Restore Defaults</source>
-        <translation type="unfinished">ÐÐŸÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ</translation>
+        <translation>ÐÐŸÑÑÑÐ°ÐœÐŸÐ²ÐžÑÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ</translation>
     </message>
     <message>
@@ -1499,5 +1791,5 @@
     </message>
     <message>
-        <location line="+199"/>
+        <location line="+200"/>
         <source>&amp;Show this message again</source>
         <translation>&amp;ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ ÑÑÐŸ ÑÐŸÐŸÐ±ÑÐµÐœÐžÐµ Ð² ÐŽÐ°Ð»ÑÐœÐµÐ¹ÑÐµÐŒ</translation>
@@ -1512,5 +1804,5 @@
     <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>
@@ -1552,11 +1844,11 @@
     <name>QFileDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/>
-        <location line="+450"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+557"/>
+        <location line="+471"/>
         <source>All Files (*)</source>
         <translation>ÐÑÐµ ÑÐ°Ð¹Ð»Ñ (*)</translation>
     </message>
     <message>
-        <location line="+227"/>
+        <location line="+216"/>
         <source>Directories</source>
         <translation>ÐÐ°ÑÐ°Ð»ÐŸÐ³Ðž</translation>
@@ -1564,12 +1856,12 @@
     <message>
         <location line="-3"/>
-        <location line="+50"/>
-        <location line="+1528"/>
+        <location line="+55"/>
+        <location line="+1532"/>
         <source>&amp;Open</source>
         <translation>&amp;ÐÑÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="-1578"/>
-        <location line="+50"/>
+        <location line="-1587"/>
+        <location line="+55"/>
         <source>&amp;Save</source>
         <translation>&amp;Ð¡ÐŸÑ
@@ -1577,10 +1869,10 @@
     </message>
     <message>
-        <location line="-741"/>
+        <location line="-756"/>
         <source>Open</source>
         <translation>ÐÑÐºÑÑÑÑ</translation>
     </message>
     <message>
-        <location line="+1508"/>
+        <location line="+1527"/>
         <source>%1 already exists.
 Do you want to replace it?</source>
@@ -1603,5 +1895,5 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1497"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1516"/>
         <source>&amp;Rename</source>
         <translation>&amp;ÐÐµÑÐµÐžÐŒÐµÐœÐŸÐ²Ð°ÑÑ</translation>
@@ -1649,10 +1941,10 @@
     <message>
         <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+6"/>
-        <location line="+659"/>
+        <location line="+669"/>
         <source>Directory:</source>
         <translation>ÐÐ°ÑÐ°Ð»ÐŸÐ³:</translation>
     </message>
     <message>
-        <location line="+776"/>
+        <location line="+785"/>
         <location line="+862"/>
         <source>%1
@@ -1683,5 +1975,5 @@
     </message>
     <message>
-        <location line="+410"/>
+        <location line="+404"/>
         <source>Recent Places</source>
         <translation>ÐÐµÐŽÐ°Ð²ÐœÐžÐµ ÐŽÐŸÐºÑÐŒÐµÐœÑÑ</translation>
@@ -1693,5 +1985,5 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2546"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2559"/>
         <source>Save As</source>
         <translation>Ð¡ÐŸÑ
@@ -1699,5 +1991,5 @@
     </message>
     <message>
-        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+461"/>
+        <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+462"/>
         <source>Drive</source>
         <translation>ÐÐžÑÐº</translation>
@@ -1755,16 +2047,16 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1963"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1982"/>
         <source>New Folder</source>
         <translation>ÐÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°</translation>
     </message>
     <message>
-        <location line="-1956"/>
+        <location line="-1975"/>
         <source>&amp;New Folder</source>
         <translation>&amp;ÐÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+667"/>
-        <location line="+38"/>
+        <location line="+677"/>
+        <location line="+43"/>
         <source>&amp;Choose</source>
         <translation>&amp;ÐÑÐ±ÑÐ°ÑÑ</translation>
@@ -1776,6 +2068,6 @@
     </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>&amp;ÐÐŒÑ ÑÐ°Ð¹Ð»Ð°:</translation>
@@ -1797,4 +2089,9 @@
     <name>QFileSystemModel</name>
     <message>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+483"/>
+        <source>%1 byte(s)</source>
+        <translation>%1 Ð±Ð°Ð¹Ñ</translation>
+    </message>
+    <message>
         <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+828"/>
         <source>Invalid filename</source>
@@ -1845,5 +2142,5 @@
     <message>
         <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="-164"/>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/>
+        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="-7"/>
         <source>%1 TB</source>
         <translation>%1 Ð¢Ð±</translation>
@@ -1869,5 +2166,4 @@
     <message>
         <location line="+1"/>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/>
         <source>%1 bytes</source>
         <translation>%1 Ð±Ð°Ð¹Ñ</translation>
@@ -1878,30 +2174,30 @@
     <message>
         <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/>
-        <location line="+1334"/>
+        <location line="+1342"/>
         <source>Normal</source>
         <translation>ÐÐ±ÑÑÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="-1331"/>
+        <location line="-1339"/>
         <location line="+12"/>
-        <location line="+1307"/>
+        <location line="+1315"/>
         <source>Bold</source>
         <translation>ÐÐžÑÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="-1316"/>
-        <location line="+1318"/>
+        <location line="-1324"/>
+        <location line="+1326"/>
         <source>Demi Bold</source>
         <translation>ÐÐŸÐ»ÑÐ¶ÐžÑÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="-1315"/>
+        <location line="-1323"/>
         <location line="+18"/>
-        <location line="+1293"/>
+        <location line="+1301"/>
         <source>Black</source>
         <translation>Ð§ÑÑÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="-1303"/>
+        <location line="-1311"/>
         <source>Demi</source>
         <translation>Ð¡ÑÐµÐŽÐœÐžÐ¹</translation>
@@ -1909,22 +2205,22 @@
     <message>
         <location line="+6"/>
-        <location line="+1303"/>
+        <location line="+1311"/>
         <source>Light</source>
         <translation>Ð¡Ð²ÐµÑÐ»ÑÐ¹</translation>
     </message>
     <message>
-        <location line="-1157"/>
-        <location line="+1160"/>
+        <location line="-1165"/>
+        <location line="+1168"/>
         <source>Italic</source>
         <translation>ÐÑÑÑÐžÐ²</translation>
     </message>
     <message>
-        <location line="-1157"/>
-        <location line="+1159"/>
+        <location line="-1165"/>
+        <location line="+1167"/>
         <source>Oblique</source>
         <translation>ÐÐ°ÐºÐ»ÐŸÐœÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+703"/>
+        <location line="+704"/>
         <source>Any</source>
         <translation>ÐÑÐ±Ð°Ñ</translation>
@@ -1968,10 +2264,10 @@
         <location line="+3"/>
         <source>Thaana</source>
-        <translation type="unfinished">Ð¢Ð°Ð°ÐœÐ°</translation>
+        <translation>Ð¢Ð°Ð°ÐœÐ°</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Devanagari</source>
-        <translation type="unfinished">ÐÐµÐ²Ð°ÐœÐ°Ð³ÐžÑÐž</translation>
+        <translation>ÐÐµÐ²Ð°ÐœÐ°Ð³ÐžÑÐž</translation>
     </message>
     <message>
@@ -1983,5 +2279,5 @@
         <location line="+3"/>
         <source>Gurmukhi</source>
-        <translation type="unfinished">ÐÑÑÐŒÑÐºÑ
+        <translation>ÐÑÑÐŒÑÐºÑ
 Ðž</translation>
     </message>
@@ -1989,10 +2285,10 @@
         <location line="+3"/>
         <source>Gujarati</source>
-        <translation type="unfinished">ÐÑÐŽÐ¶Ð°ÑÐ°ÑÐž</translation>
+        <translation>ÐÑÐŽÐ¶Ð°ÑÐ°ÑÐž</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Oriya</source>
-        <translation type="unfinished">ÐÑÐžÑ</translation>
+        <translation>ÐÑÐžÑ</translation>
     </message>
     <message>
@@ -2004,15 +2300,15 @@
         <location line="+3"/>
         <source>Telugu</source>
-        <translation type="unfinished">Ð¢ÐµÐ»ÑÐ³Ñ</translation>
+        <translation>Ð¢ÐµÐ»ÑÐ³Ñ</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Kannada</source>
-        <translation type="unfinished">ÐÐ°ÐœÐœÐ°ÐŽÐ°</translation>
+        <translation>ÐÐ°ÐœÐœÐ°ÐŽÐ°</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Malayalam</source>
-        <translation type="unfinished">ÐÐ°Ð»Ð°Ð¹ÑÐ»Ð°ÐŒ</translation>
+        <translation>ÐÐ°Ð»Ð°ÑÐ»ÑÑÐºÐ°Ñ</translation>
     </message>
     <message>
@@ -2039,5 +2335,5 @@
         <location line="+3"/>
         <source>Myanmar</source>
-        <translation type="unfinished">ÐÑÑÐœÐŒÐ°</translation>
+        <translation>ÐÐ°Ð¹Ð°ÐœÐŒÐ°ÑÑÐºÐ°Ñ</translation>
     </message>
     <message>
@@ -2055,5 +2351,5 @@
         <location line="+3"/>
         <source>Simplified Chinese</source>
-        <translation>ÐÐžÑÐ°Ð¹ÑÐºÐ°Ñ ÑÐ¿ÑÐŸÑÐµÐœÐœÐ°Ñ</translation>
+        <translation>ÐÐžÑÐ°Ð¹ÑÐºÐ°Ñ ÑÐ¿ÑÐŸÑÑÐœÐœÐ°Ñ</translation>
     </message>
     <message>
@@ -2091,4 +2387,9 @@
         <source>Runic</source>
         <translation>Ð ÑÐœÐžÑÐµÑÐºÐ°Ñ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>N&apos;Ko</source>
+        <translation>ÐÐºÐŸ</translation>
     </message>
 </context>
@@ -2292,5 +2593,5 @@
     <name>QHostInfo</name>
     <message>
-        <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/>
+        <location filename="../src/network/kernel/qhostinfo_p.h" line="+101"/>
         <source>Unknown error</source>
         <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÐ°Ñ ÐŸÑÐžÐ±ÐºÐ°</translation>
@@ -2302,5 +2603,5 @@
         <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>
@@ -2336,5 +2637,5 @@
     <name>QHttp</name>
     <message>
-        <location filename="../src/network/access/qhttp.cpp" line="+1577"/>
+        <location filename="../src/network/access/qhttp.cpp" line="+1582"/>
         <location line="+820"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+1159"/>
@@ -2368,5 +2669,5 @@
     </message>
     <message>
-        <location line="+179"/>
+        <location line="+200"/>
         <source>Unknown authentication method</source>
         <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÑÐ¹ ÐŒÐµÑÐŸÐŽ Ð°Ð²ÑÐŸÑÐžÐ·Ð°ÑÐžÐž</translation>
@@ -2378,5 +2679,5 @@
     </message>
     <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+569"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+38"/>
         <source>Connection refused</source>
@@ -2384,5 +2685,5 @@
     </message>
     <message>
-        <location filename="../src/network/access/qhttp.cpp" line="-304"/>
+        <location filename="../src/network/access/qhttp.cpp" line="-325"/>
         <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+3"/>
@@ -2392,6 +2693,4 @@
     <message>
         <location line="+20"/>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+10"/>
-        <location line="+19"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+3"/>
         <source>HTTP request failed</source>
@@ -2399,5 +2698,5 @@
     </message>
     <message>
-        <location line="+73"/>
+        <location line="+94"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+69"/>
         <source>Invalid HTTP response header</source>
@@ -2439,5 +2738,5 @@
     </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="+3"/>
         <source>Connection closed</source>
@@ -2455,5 +2754,5 @@
     </message>
     <message>
-        <location line="-138"/>
+        <location line="-159"/>
         <source>Connection refused (or timed out)</source>
         <translation>Ð ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÐž ÐŸÑÐºÐ°Ð·Ð°ÐœÐŸ (ÐžÐ»Ðž Ð²ÑÐµÐŒÑ ÐŸÐ¶ÐžÐŽÐ°ÐœÐžÑ ÐžÑÑÐµÐºÐ»ÐŸ)</translation>
@@ -2656,5 +2955,5 @@
     <name>QIODevice</name>
     <message>
-        <location filename="../src/corelib/global/qglobal.cpp" line="+2057"/>
+        <location filename="../src/corelib/global/qglobal.cpp" line="+2094"/>
         <source>Permission denied</source>
         <translation>ÐÐŸÑÑÑÐ¿ Ð·Ð°Ð¿ÑÐµÑÑÐœ</translation>
@@ -2677,5 +2976,5 @@
     </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>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÐ°Ñ ÐŸÑÐžÐ±ÐºÐ°</translation>
@@ -2741,5 +3040,5 @@
     </message>
     <message>
-        <location line="+341"/>
+        <location line="+345"/>
         <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
         <translation>ÐÐŸÐŽÑÐ»Ñ &apos;%1&apos; ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑ ÐœÐµÑÐŸÐŒÐµÑÑÐžÐŒÑÑ Ð±ÐžÐ±Ð»ÐžÐŸÑÐµÐºÑ Qt. (%2.%3.%4) [%5]</translation>
@@ -2793,5 +3092,5 @@
     <name>QLineEdit</name>
     <message>
-        <location filename="../src/gui/widgets/qlineedit.cpp" line="+1980"/>
+        <location filename="../src/gui/widgets/qlineedit.cpp" line="+2072"/>
         <source>&amp;Undo</source>
         <translation>&amp;ÐÑÐŒÐµÐœÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ</translation>
@@ -2803,25 +3102,25 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+9"/>
         <source>Cu&amp;t</source>
         <translation>&amp;ÐÑÑÐµÐ·Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>&amp;Copy</source>
         <translation>&amp;ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>&amp;Paste</source>
         <translation>Ð&amp;ÑÑÐ°Ð²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+7"/>
         <source>Delete</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location line="+8"/>
         <source>Select All</source>
         <translation>ÐÑÐŽÐµÐ»ÐžÑÑ Ð²ÑÑ</translation>
@@ -2832,5 +3131,5 @@
     <message>
         <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/>
-        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/>
+        <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+246"/>
         <source>%1: Name error</source>
         <translation>%1: ÐÐµÐºÐŸÑÑÐµÐºÑÐœÐŸÐµ ÐžÐŒÑ</translation>
@@ -2870,5 +3169,5 @@
         <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
         <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/>
-        <location line="+45"/>
+        <location line="+59"/>
         <source>%1: Invalid name</source>
         <translation>%1: ÐÐµÐºÐŸÑÑÐµÐºÑÐœÐŸÐµ ÐžÐŒÑ</translation>
@@ -2901,5 +3200,5 @@
         <location line="+3"/>
         <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
-        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-50"/>
+        <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-64"/>
         <source>%1: Connection error</source>
         <translation>%1: ÐÑÐžÐ±ÐºÐ° ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ</translation>
@@ -2926,5 +3225,5 @@
     <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>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐŸÑÐºÑÑÑÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
@@ -2937,5 +3236,5 @@
     </message>
     <message>
-        <location line="+151"/>
+        <location line="+150"/>
         <source>Unable to begin transaction</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐœÐ°ÑÐ°ÑÑ ÑÑÐ°ÐœÐ·Ð°ÐºÑÐžÑ</translation>
@@ -2955,10 +3254,11 @@
     <name>QMYSQLResult</name>
     <message>
-        <location line="-969"/>
+        <location line="-977"/>
+        <location line="+31"/>
         <source>Unable to fetch data</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÐŸÐ»ÑÑÐžÑÑ ÐŽÐ°ÐœÐœÑÐµ</translation>
     </message>
     <message>
-        <location line="+183"/>
+        <location line="+161"/>
         <source>Unable to execute query</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ Ð·Ð°Ð¿ÑÐŸÑ</translation>
@@ -3144,5 +3444,5 @@
     <name>QMenuBar</name>
     <message>
-        <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+404"/>
+        <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+436"/>
         <source>Actions</source>
         <translation>ÐÐµÐ¹ÑÑÐ²ÐžÑ</translation>
@@ -3170,5 +3470,5 @@
     </message>
     <message>
-        <location line="-1611"/>
+        <location line="-1614"/>
         <source>Show Details...</source>
         <translation>ÐÐŸÐºÐ°Ð·Ð°ÑÑ Ð¿ÐŸÐŽÑÐŸÐ±ÐœÐŸÑÑÐž...</translation>
@@ -3180,5 +3480,5 @@
     </message>
     <message>
-        <location line="+1574"/>
+        <location line="+1577"/>
         <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
         <translation>&lt;h3&gt;Ð Qt&lt;/h3&gt;&lt;p&gt;ÐÐ°ÐœÐœÐ°Ñ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒÐ° ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑ Qt Ð²ÐµÑÑÐžÐž %1.&lt;/p&gt;</translation>
@@ -3379,4 +3679,5 @@
     <name>QNetworkAccessFileBackend</name>
     <message>
+        <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>
@@ -3384,20 +3685,22 @@
     </message>
     <message>
-        <location line="+45"/>
+        <location line="+33"/>
+        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/>
         <source>Error opening %1: %2</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÐžÑ %1: %2</translation>
     </message>
     <message>
-        <location line="+38"/>
+        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+38"/>
         <source>Write error writing to %1: %2</source>
         <translation>ÐÑÐžÐ±ÐºÐ° Ð·Ð°Ð¿ÐžÑÐž Ð² %1: %2</translation>
     </message>
     <message>
-        <location line="+48"/>
+        <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: Ð£ÐºÐ°Ð·Ð°Ðœ Ð¿ÑÑÑ Ðº ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ñ</translation>
     </message>
     <message>
-        <location line="+21"/>
+        <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+21"/>
         <source>Read error reading from %1: %2</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÑÑÐµÐœÐžÑ ÐžÐ· %1: %2</translation>
@@ -3436,5 +3739,5 @@
     <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>ÐÐŸÐŽÑ
@@ -3445,10 +3748,10 @@
     <name>QNetworkReply</name>
     <message>
-        <location line="+95"/>
+        <location line="+101"/>
         <source>Error downloading %1 - server replied: %2</source>
         <translation>ÐÑÐžÐ±ÐºÐ° Ð·Ð°Ð³ÑÑÐ·ÐºÐž %1 - ÐŸÑÐ²ÐµÑ ÑÐµÑÐ²ÐµÑÐ°: %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>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÑÐ¹ Ð¿ÑÐŸÑÐŸÐºÐŸÐ» &quot;%1&quot;</translation>
@@ -3458,5 +3761,5 @@
     <name>QNetworkReplyImpl</name>
     <message>
-        <location line="+519"/>
+        <location line="+525"/>
         <location line="+28"/>
         <source>Operation canceled</source>
@@ -3467,5 +3770,5 @@
     <name>QOCIDriver</name>
     <message>
-        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2076"/>
+        <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/>
         <source>Unable to logon</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð°Ð²ÑÐŸÑÐžÐ·ÐŸÐ²Ð°ÑÑÑÑ</translation>
@@ -3496,6 +3799,6 @@
     <name>QOCIResult</name>
     <message>
-        <location line="-972"/>
-        <location line="+161"/>
+        <location line="-979"/>
+        <location line="+168"/>
         <location line="+15"/>
         <source>Unable to bind column for batch execute</source>
@@ -3541,5 +3844,5 @@
     <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>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÑÐŸÐµÐŽÐžÐœÐžÑÑÑÑ</translation>
@@ -3574,12 +3877,12 @@
     <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; Ð°ÑÑÐžÐ±ÑÑÐŸÐŒ Ð²ÑÑÐ°Ð¶ÐµÐœÐžÐµ. ÐÑÐŸÐ²ÐµÑÑÑÐµ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž ÐŽÑÐ°Ð¹Ð²ÐµÑÐ° ODBC</translation>
     </message>
     <message>
-        <location line="-329"/>
-        <location line="+623"/>
+        <location line="-334"/>
+        <location line="+628"/>
         <source>Unable to execute statement</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ Ð²ÑÑÐ°Ð¶ÐµÐœÐžÐµ</translation>
@@ -3601,5 +3904,5 @@
     </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"/>
@@ -3651,5 +3954,5 @@
     </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>
@@ -3660,5 +3963,5 @@
     <name>QPPDOptionsModel</name>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/>
         <source>Name</source>
         <translation>ÐÐŒÑ</translation>
@@ -3836,5 +4139,5 @@
     <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>ÑÐŸÐµÐŽÐžÐœÐµÐœÐŸ Ð»ÐŸÐºÐ°Ð»ÑÐœÐŸ</translation>
@@ -3847,5 +4150,5 @@
     </message>
     <message>
-        <location line="+223"/>
+        <location line="+225"/>
         <location line="+199"/>
         <source>unknown</source>
@@ -4015,5 +4318,5 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/>
         <source>Print To File ...</source>
         <translation>ÐÐµÑÐ°ÑÑ Ð² ÑÐ°Ð¹Ð» ...</translation>
@@ -4030,5 +4333,5 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+80"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+82"/>
         <source>File %1 is not writable.
 Please choose a different file name.</source>
@@ -4221,5 +4524,5 @@
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/>
+        <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/>
         <location line="+68"/>
         <source>&amp;Options &gt;&gt;</source>
@@ -4271,10 +4574,10 @@
     </message>
     <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>ÐÑÐŸÑÐŒÐŸÑÑ Ð¿ÐµÑÐ°ÑÐž</translation>
@@ -4357,5 +4660,10 @@
     </message>
     <message>
-        <location line="+150"/>
+        <location line="+6"/>
+        <source>Close</source>
+        <translation>ÐÐ°ÐºÑÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+148"/>
         <source>Export to PDF</source>
         <translation>Ð­ÐºÑÐ¿ÐŸÑÑ Ð² PDF</translation>
@@ -4534,5 +4842,5 @@
     <name>QProcess</name>
     <message>
-        <location filename="../src/corelib/io/qprocess_unix.cpp" line="+402"/>
+        <location filename="../src/corelib/io/qprocess_unix.cpp" line="+406"/>
         <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/>
         <source>Could not open input redirection for reading</source>
@@ -4551,5 +4859,5 @@
     </message>
     <message>
-        <location line="+252"/>
+        <location line="+258"/>
         <location line="+52"/>
         <location line="+74"/>
@@ -4564,5 +4872,5 @@
     </message>
     <message>
-        <location filename="../src/corelib/io/qprocess.cpp" line="+851"/>
+        <location filename="../src/corelib/io/qprocess.cpp" line="+856"/>
         <location line="+52"/>
         <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
@@ -4682,5 +4990,5 @@
     <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>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÐžÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
@@ -4706,10 +5014,10 @@
     <name>QSQLite2Result</name>
     <message>
-        <location line="-319"/>
+        <location line="-326"/>
         <source>Unable to fetch results</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÐŸÐ»ÑÑÐžÑÑ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÑ</translation>
     </message>
     <message>
-        <location line="+143"/>
+        <location line="+150"/>
         <source>Unable to execute statement</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ Ð²ÑÑÐ°Ð¶ÐµÐœÐžÐµ</translation>
@@ -4719,5 +5027,5 @@
     <name>QSQLiteDriver</name>
     <message>
-        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+544"/>
+        <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+538"/>
         <source>Error opening database</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÐŸÑÐºÑÑÑÐžÑ Ð±Ð°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
@@ -4749,6 +5057,6 @@
     <name>QSQLiteResult</name>
     <message>
-        <location line="-408"/>
-        <location line="+66"/>
+        <location line="-395"/>
+        <location line="+62"/>
         <location line="+8"/>
         <source>Unable to fetch row</source>
@@ -4776,5 +5084,5 @@
     </message>
     <message>
-        <location line="-204"/>
+        <location line="-200"/>
         <source>No query</source>
         <translation>ÐÑÑÑÑÑÑÐ²ÑÐµÑ Ð·Ð°Ð¿ÑÐŸÑ</translation>
@@ -4791,5 +5099,5 @@
         <location line="+2"/>
         <source>Location</source>
-        <translation>Ð Ð°Ð·ÐŒÐµÑÐµÐœÐžÐµ</translation>
+        <translation>Ð Ð°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ</translation>
     </message>
     <message>
@@ -4801,15 +5109,15 @@
         <location line="+2"/>
         <source>Ignore-count</source>
-        <translation type="unfinished">ÐÑÐŸÐ¿ÑÑÑÐžÑÑ</translation>
+        <translation>ÐÑÐŸÐ¿ÑÑÐµÐœÐŸ</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Single-shot</source>
-        <translation type="unfinished">ÐÐŽÐžÐœ ÑÐ°Ð·</translation>
+        <translation>ÐÐŽÐœÐŸÐºÑÐ°ÑÐœÐŸ</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Hit-count</source>
-        <translation type="unfinished">ÐÐŸÐ¿Ð°ÐŽÐ°ÐœÐžÐ¹</translation>
+        <translation>Ð¡ÐŸÐ²Ð¿Ð°ÐŽÐµÐœÐžÐ¹</translation>
     </message>
 </context>
@@ -4903,10 +5211,10 @@
         <location line="+16"/>
         <source>Run to New Script</source>
-        <translation type="unfinished">ÐÑÐ¿ÐŸÐ»ÐœÐžÑÑ ÐŽÐŸ ÐœÐŸÐ²ÐŸÐ³ÐŸ ÑÑÐµÐœÐ°ÑÐžÑ</translation>
+        <translation>ÐÑÐ¿ÐŸÐ»ÐœÐžÑÑ ÐŽÐŸ ÐœÐŸÐ²ÐŸÐ³ÐŸ ÑÑÐµÐœÐ°ÑÐžÑ</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Toggle Breakpoint</source>
-        <translation type="unfinished">Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ/ÑÐ±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
+        <translation>Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ/ÑÐ±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
     </message>
     <message>
@@ -5040,20 +5348,20 @@
         <location filename="../src/scripttools/debugging/qscriptedit.cpp" line="+411"/>
         <source>Toggle Breakpoint</source>
-        <translation type="unfinished">Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ/ÑÐ±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
+        <translation>Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ/ÑÐ±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Disable Breakpoint</source>
-        <translation type="unfinished">Ð£Ð±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
+        <translation>Ð£Ð±ÑÐ°ÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Enable Breakpoint</source>
-        <translation type="unfinished">Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
+        <translation>Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÐŸÑÐºÑ ÐŸÑÑÐ°ÐœÐŸÐ²Ð°</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Breakpoint Condition:</source>
-        <translation type="unfinished">Ð£ÑÐ»ÐŸÐ²ÐžÐµ ÑÐŸÑÐºÐž ÐŸÑÑÐ°ÐœÐŸÐ²Ð°:</translation>
+        <translation>Ð£ÑÐ»ÐŸÐ²ÐžÐµ ÑÐŸÑÐºÐž ÐŸÑÑÐ°ÐœÐŸÐ²Ð°:</translation>
     </message>
 </context>
@@ -5233,5 +5541,5 @@
     <message>
         <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/>
-        <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+80"/>
+        <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>
@@ -5325,115 +5633,116 @@
         <location filename="../src/gui/kernel/qkeysequence.cpp" line="+393"/>
         <source>Space</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐŸÐ±ÐµÐ»</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Esc</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Esc</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Tab</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Tab</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Backtab</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Backtab</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Backspace</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Backspace</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Return</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Return</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Enter</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Enter</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Ins</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ins</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Del</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Del</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Pause</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Pause</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Print</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Print</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>SysReq</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">SysReq</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Home</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Home</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>End</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">End</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Left</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ»ÐµÐ²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Up</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ²ÐµÑÑ
+</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Right</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ¿ÑÐ°Ð²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Down</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐžÐ·</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>PgUp</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">PgUp</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>PgDown</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">PgDown</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>CapsLock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">CapsLock</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>NumLock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">NumLock</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>ScrollLock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ScrollLock</translation>
     </message>
     <message>
@@ -5448,5 +5757,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+5"/>
         <source>Back</source>
         <translation type="unfinished">ÐÐ°Ð·Ð°ÐŽ</translation>
@@ -5485,25 +5794,25 @@
         <location line="+1"/>
         <source>Bass Boost</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ð£ÑÐžÐ»ÐµÐœÐžÐµ Ð±Ð°ÑÐŸÐ²</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Bass Up</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ°ÑÑ Ð²ÑÑÐµ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Bass Down</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ°ÑÑ ÐœÐžÐ¶Ðµ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Treble Up</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÐŸÐºÐžÐµ ÑÐ°ÑÑÐŸÑÑ Ð²ÑÑÐµ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Treble Down</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÐŸÐºÐžÐµ ÑÐ°ÑÑÐŸÑÑ ÐœÐžÐ¶Ðµ</translation>
     </message>
     <message>
@@ -5643,37 +5952,485 @@
     </message>
     <message>
+        <location line="+1"/>
+        <source>Monitor Brightness Up</source>
+        <translation type="unfinished">Ð¯ÑÐºÐŸÑÑÑ ÐŒÐŸÐœÐžÑÐŸÑÐ° Ð²ÑÑÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Monitor Brightness Down</source>
+        <translation type="unfinished">Ð¯ÑÐºÐŸÑÑÑ ÐŒÐŸÐœÐžÑÐŸÑÐ° ÐœÐžÐ¶Ðµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Keyboard Light On/Off</source>
+        <translation type="unfinished">ÐÐºÐ»/Ð²ÑÐºÐ» Ð¿ÐŸÐŽÑÐ²ÐµÑÐºÑ ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Keyboard Brightness Up</source>
+        <translation type="unfinished">ÐÐŸÐŽÑÐ²ÐµÑÐºÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÑ ÑÑÑÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Keyboard Brightness Down</source>
+        <translation type="unfinished">ÐÐŸÐŽÑÐ²ÐµÑÐºÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÑ Ð±Ð»ÐµÐŽÐœÐµÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Power Off</source>
+        <translation type="unfinished">ÐÑÐºÐ»ÑÑÐµÐœÐžÐµ Ð¿ÐžÑÐ°ÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Wake Up</source>
+        <translation type="unfinished">ÐÑÐŸÐ±ÑÐ¶ÐŽÐµÐœÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Eject</source>
+        <translation type="unfinished">ÐÐ·Ð²Ð»ÐµÑÐµÐœÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Screensaver</source>
+        <translation type="unfinished">Ð¥ÑÐ°ÐœÐžÑÐµÐ»Ñ ÑÐºÑÐ°ÐœÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>WWW</source>
+        <translation type="unfinished">WWW</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Sleep</source>
+        <translation type="unfinished">ÐÐ°ÑÑÐ¿Ð°ÐœÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>LightBulb</source>
+        <translatorcomment>Ð»Ð°ÐŒÐ¿ÐŸÑÐºÐ°?</translatorcomment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Shop</source>
+        <translation type="unfinished">ÐÐ°Ð³Ð°Ð·ÐžÐœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>History</source>
+        <translation type="unfinished">ÐÑÑÐŸÑÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Add Favorite</source>
+        <translation type="unfinished">ÐÐŸÐ±Ð°Ð²ÐžÑÑ Ð² ÐžÐ·Ð±ÑÐ°ÐœÐœÐŸÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hot Links</source>
+        <translation type="unfinished">ÐÐŸÑÑÑÐžÐµ ÑÑÑÐ»ÐºÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Adjust Brightness</source>
+        <translation type="unfinished">ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° ÑÑÐºÐŸÑÑÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Finance</source>
+        <translation type="unfinished">Ð€ÐžÐœÐ°ÐœÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Community</source>
+        <translation type="unfinished">Ð¡ÐŸÐŸÐ±ÑÐµÑÑÐ²ÐŸ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Audio Rewind</source>
+        <translation type="unfinished">ÐÐµÑÐµÐŒÐŸÑÐºÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Back Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Application Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Application Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Book</source>
+        <translation type="unfinished">ÐÐœÐžÐ³Ð°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>CD</source>
+        <translation type="unfinished">CD</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Calculator</source>
+        <translation type="unfinished">ÐÐ°Ð»ÑÐºÑÐ»ÑÑÐŸÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Clear</source>
+        <translation type="unfinished">ÐÑÐžÑÑÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Clear Grab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Close</source>
+        <translation type="unfinished">ÐÐ°ÐºÑÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Copy</source>
+        <translation type="unfinished">ÐÐŸÐ¿ÐžÑÐŸÐ²Ð°ÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Cut</source>
+        <translation type="unfinished">ÐÑÑÐµÐ·Ð°ÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Display</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>DOS</source>
+        <translation type="unfinished">DOS</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Documents</source>
+        <translation type="unfinished">ÐÐŸÐºÑÐŒÐµÐœÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Spreadsheet</source>
+        <translation type="unfinished">Ð­Ð»ÐµÐºÑÑÐŸÐœÐœÐ°Ñ ÑÐ°Ð±Ð»ÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Browser</source>
+        <translation type="unfinished">ÐÐ±ÐŸÐ·ÑÐµÐ²Ð°ÑÐµÐ»Ñ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Game</source>
+        <translation type="unfinished">ÐÐ³ÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Go</source>
+        <translation type="unfinished">ÐÐµÑÐµÐ¹ÑÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>iTouch</source>
+        <translation type="unfinished">iTouch</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Logoff</source>
+        <translation type="unfinished">ÐÑÐ¹ÑÐž ÐžÐ· ÑÐžÑÑÐµÐŒÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Market</source>
+        <translation type="unfinished">Ð ÑÐœÐŸÐº</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Meeting</source>
+        <translation type="unfinished">ÐÑÑÑÐµÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Keyboard Menu</source>
+        <translation type="unfinished">ÐÐ»Ð°Ð²ÐžÐ°ÑÑÑÐœÐŸÐµ ÐŒÐµÐœÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Menu PB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>My Sites</source>
+        <translation type="unfinished">ÐÐŸÐž ÑÐ°Ð¹ÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>News</source>
+        <translation type="unfinished">ÐÐŸÐ²ÐŸÑÑÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Home Office</source>
+        <translation type="unfinished">ÐÐŸÐŒÐ°ÑÐœÐžÐ¹ ÐŸÑÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Option</source>
+        <translation type="unfinished">ÐÐ¿ÑÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Paste</source>
+        <translation type="unfinished">ÐÑÑÐ°Ð²ÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Phone</source>
+        <translation type="unfinished">Ð¢ÐµÐ»ÐµÑÐŸÐœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reply</source>
+        <translation type="unfinished">ÐÑÐ²ÐµÑÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Reload</source>
+        <translation type="unfinished">ÐÐµÑÐµÐ·Ð°Ð³ÑÑÐ·ÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rotate Windows</source>
+        <translation type="unfinished">ÐÐŸÐ²ÐµÑÐœÑÑÑ ÐŸÐºÐœÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rotation PB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Rotation KB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Save</source>
+        <translation type="unfinished">Ð¡ÐŸÑ
+ÑÐ°ÐœÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Send</source>
+        <translation type="unfinished">ÐÑÐ¿ÑÐ°Ð²ÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Spellchecker</source>
+        <translation type="unfinished">ÐÑÐŸÐ²ÐµÑÐºÐ° ÐŸÑÑÐŸÐ³ÑÐ°ÑÐžÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Split Screen</source>
+        <translation type="unfinished">Ð Ð°Ð·ÐŽÐµÐ»ÐžÑÑ ÑÐºÑÐ°Ðœ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Support</source>
+        <translation type="unfinished">ÐÐŸÐŽÐŽÐµÑÐ¶ÐºÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Task Panel</source>
+        <translation type="unfinished">ÐÐ°ÐœÐµÐ»Ñ Ð·Ð°ÐŽÐ°Ñ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Terminal</source>
+        <translation type="unfinished">Ð¢ÐµÑÐŒÐžÐœÐ°Ð»</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Tools</source>
+        <translation type="unfinished">ÐÐœÑÑÑÑÐŒÐµÐœÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Travel</source>
+        <translation type="unfinished">ÐÑÑÐµÑÐµÑÑÐ²ÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Video</source>
+        <translation type="unfinished">ÐÐžÐŽÐµÐŸ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Word Processor</source>
+        <translation type="unfinished">Ð¢ÐµÐºÑÑÐŸÐ²ÑÐ¹ ÑÐµÐŽÐ°ÐºÑÐŸÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>XFer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zoom In</source>
+        <translation type="unfinished">Ð£Ð²ÐµÐ»ÐžÑÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Zoom Out</source>
+        <translation type="unfinished">Ð£ÐŒÐµÐœÑÑÐžÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Away</source>
+        <translation type="unfinished">Ð£ÑÑÐ»</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Messenger</source>
+        <translation type="unfinished">ÐÐ»ÐžÐµÐœÑ ÐŸÐ±ÐŒÐµÐœÐ° ÐŒÐ³ÐœÐŸÐ²ÐµÐœÐœÑÐŒÐž ÑÐŸÐŸÐ±ÑÐµÐœÐžÑÐŒÐž</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>WebCam</source>
+        <translation type="unfinished">ÐÑÐ±-ÐºÐ°ÐŒÐµÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Mail Forward</source>
+        <translation type="unfinished">ÐÐµÑÐµÑÐ»Ð°ÑÑ Ð¿ÐžÑÑÐŒÐŸ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Pictures</source>
+        <translation type="unfinished">ÐÐ·ÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Music</source>
+        <translation type="unfinished">ÐÑÐ·ÑÐºÐ°</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Battery</source>
+        <translation type="unfinished">ÐÐ°ÑÐ°ÑÐµÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Bluetooth</source>
+        <translation type="unfinished">Bluetooth</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Wireless</source>
+        <translation type="unfinished">ÐÐµÑÐ¿ÑÐŸÐ²ÐŸÐŽÐœÐ°Ñ ÑÐµÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Ultra Wide Band</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Audio Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Audio Repeat</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Audio Random Play</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Subtitle</source>
+        <translation type="unfinished">Ð¡ÑÐ±ÑÐžÑÑÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Audio Cycle Track</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Time</source>
+        <translation type="unfinished">ÐÑÐµÐŒÑ</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>View</source>
+        <translation type="unfinished">ÐÐžÐŽ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Top Menu</source>
+        <translation type="unfinished">ÐÐ»Ð°Ð²ÐœÐŸÐµ ÐŒÐµÐœÑ</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Suspend</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Hibernate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location line="+4"/>
         <source>Print Screen</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐµÑÐ°ÑÑ ÑÐºÑÐ°ÐœÐ°</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Page Up</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ° ÑÑÑÐ°ÐœÐžÑÑ Ð²Ð²ÐµÑÑ
+</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Page Down</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ° ÑÑÑÐ°ÐœÐžÑÑ Ð²ÐœÐžÐ·</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Caps Lock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐµÑÐœÐžÐ¹ ÑÐµÐ³ÐžÑÑÑ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Num Lock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐŠÐžÑÑÐŸÐ²ÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Number Lock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐŠÐžÑÑÐŸÐ²ÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Scroll Lock</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Scroll Lock</translation>
     </message>
     <message>
@@ -5690,13 +6447,14 @@
         <location line="+1"/>
         <source>Escape</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Escape</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>System Request</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
+        <translation type="unfinished">Ð¡ÐžÑÑÐµÐŒÐœÑÐ¹ Ð·Ð°Ð¿ÑÐŸÑ</translation>
+    </message>
+    <message>
+        <location line="-18"/>
+        <location line="+22"/>
         <source>Select</source>
         <translation type="unfinished">ÐÑÐ±ÑÐ°ÑÑ</translation>
@@ -5735,10 +6493,10 @@
         <location line="+1"/>
         <source>Call</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐŸÐ·Ð²ÐŸÐœÐžÑÑ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Hangup</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐŸÐ»ÐŸÐ¶ÐžÑÑ ÑÑÑÐ±ÐºÑ</translation>
     </message>
     <message>
@@ -5748,8 +6506,8 @@
     </message>
     <message>
-        <location line="+561"/>
+        <location line="+575"/>
         <location line="+135"/>
         <source>Ctrl</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ctrl</translation>
     </message>
     <message>
@@ -5757,5 +6515,5 @@
         <location line="+138"/>
         <source>Shift</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Shift</translation>
     </message>
     <message>
@@ -5763,5 +6521,5 @@
         <location line="+135"/>
         <source>Alt</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Alt</translation>
     </message>
     <message>
@@ -5769,20 +6527,20 @@
         <location line="+130"/>
         <source>Meta</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Meta</translation>
     </message>
     <message>
         <location line="-40"/>
         <source>+</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">+</translation>
     </message>
     <message>
         <location line="+61"/>
         <source>F%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-767"/>
+        <translation type="unfinished">F%1</translation>
+    </message>
+    <message>
+        <location line="-871"/>
         <source>Home Page</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐŸÐŒÐ°ÑÐœÑÑ ÑÑÑÐ°ÐœÐžÑÐ°</translation>
     </message>
 </context>
@@ -5884,5 +6642,5 @@
     </message>
     <message>
-        <location line="+685"/>
+        <location line="+689"/>
         <source>Network operation timed out</source>
         <translation>ÐÑÐµÐŒÑ ÐœÐ° ÑÐµÑÐµÐ²ÑÑ ÐŸÐ¿ÐµÑÐ°ÑÐžÑ ÐžÑÑÐµÐºÐ»ÐŸ</translation>
@@ -5892,5 +6650,5 @@
     <name>QSoftKeyManager</name>
     <message>
-        <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/>
+        <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+63"/>
         <source>Ok</source>
         <translation>ÐÐ</translation>
@@ -5917,5 +6675,5 @@
     </message>
     <message>
-        <location line="+152"/>
+        <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+322"/>
         <source>Exit</source>
         <translation>ÐÑÑ
@@ -6002,5 +6760,10 @@
     </message>
     <message>
-        <location line="+119"/>
+        <location line="+63"/>
+        <source>Unable to decrypt data: %1</source>
+        <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÑÐ°ÑÑÐžÑÑÐŸÐ²Ð°ÑÑ ÐŽÐ°ÐœÐœÑÐµ: %1</translation>
+    </message>
+    <message>
+        <location line="+76"/>
         <source>Error while reading: %1</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÑÑÐµÐœÐžÑ: %1</translation>
@@ -6012,5 +6775,5 @@
     </message>
     <message>
-        <location line="-501"/>
+        <location line="-521"/>
         <source>Error creating SSL context (%1)</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÐºÐŸÐœÑÐµÐºÑÑÐ° SSL: (%1)</translation>
@@ -6022,5 +6785,10 @@
     </message>
     <message>
-        <location line="+62"/>
+        <location line="+42"/>
+        <source>Private key does not certify public key, %1</source>
+        <translation>ÐÐ°ÐºÑÑÑÑÐ¹ ÐºÐ»ÑÑ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÐŸÑÐºÑÑÑÐŸÐŒÑ ÐºÐ»ÑÑÑ, %1</translation>
+    </message>
+    <message>
+        <location line="+20"/>
         <source>Error creating SSL session, %1</source>
         <translation>ÐÑÐžÐ±ÐºÐ° ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÑÐµÑÑÐžÐž SSL, %1</translation>
@@ -6047,7 +6815,119 @@
     </message>
     <message>
-        <location line="+7"/>
-        <source>Private key does not certificate public key, %1</source>
-        <translation>ÐÐ°ÐºÑÑÑÑÐ¹ ÐºÐ»ÑÑ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÐŸÑÐºÑÑÑÐŸÐŒÑ ÐºÐ»ÑÑÑ, %1</translation>
+        <location filename="../src/network/ssl/qsslerror.cpp" line="+213"/>
+        <source>No error</source>
+        <translation>ÐÐµÑ ÐŸÑÐžÐ±ÐºÐž</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The issuer certificate could not be found</source>
+        <translatorcomment>ÐžÐ·ÐŽÐ°ÑÐµÐ»Ñ ?</translatorcomment>
+        <translation type="unfinished">ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÐœÐ°Ð¹ÑÐž ÑÐµÑÑÐžÑÐžÐºÐ°Ñ Ð·Ð°Ð¿ÑÐ°ÑÐžÐ²Ð°ÑÑÐµÐ¹ ÑÑÐŸÑÐŸÐœÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate signature could not be decrypted</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ ÑÐ°ÑÑÐžÑÑÐŸÐ²Ð°ÑÑ Ð¿ÐŸÐŽÐ¿ÐžÑÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The public key in the certificate could not be read</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÑ ÐŸÑÐºÑÑÑÑÐ¹ ÐºÐ»ÑÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The signature of the certificate is invalid</source>
+        <translation>ÐÐµÐºÐŸÑÑÐµÐºÑÐœÐ°Ñ Ð¿ÐŸÐŽÐ¿ÐžÑÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate is not yet valid</source>
+        <translation>Ð¡ÑÐŸÐº ÐŽÐµÐ¹ÑÑÐ²ÐžÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ° ÐµÑÑ ÐœÐµ ÐœÐ°ÑÑÑÐ¿ÐžÐ»</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate has expired</source>
+        <translation>Ð¡ÑÐŸÐº ÐŽÐµÐ¹ÑÑÐ²ÐžÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ° ÐžÑÑÑÐº</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate&apos;s notBefore field contains an invalid time</source>
+        <translation>ÐÐŸÐ»Ðµ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ° notBefore ÑÐŸÐŽÐµÑÐ¶ÐžÑ ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸÐµ Ð²ÑÐµÐŒÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate&apos;s notAfter field contains an invalid time</source>
+        <translation>ÐÐŸÐ»Ðµ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ° notAfter ÑÐŸÐŽÐµÑÐ¶ÐžÑ ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸÐµ Ð²ÑÐµÐŒÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The certificate is self-signed, and untrusted</source>
+        <translation type="unfinished">Ð¡Ð°ÐŒÐŸÐ¿ÐŸÐŽÐ¿ÐžÑÐ°ÐœÐœÑÐ¹ ÑÐµÑÑÐžÑÐžÐºÐ°Ñ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ Ð·Ð°Ð²ÐµÑÐµÐœÐœÑÐŒ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+        <translation type="unfinished">ÐÐŸÑÐœÐµÐ²ÐŸÐ¹ ÑÐµÑÑÐžÑÐžÐºÐ°Ñ ÑÐµÐ¿ÐŸÑÐºÐž ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐŸÐ² ÑÐ°ÐŒÐŸÐ¿ÐŸÐŽÐ¿ÐžÑÐ°ÐœÐœÑÐ¹ Ðž ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ Ð·Ð°Ð²ÐµÑÐµÐœÐœÑÐŒ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The issuer certificate of a locally looked up certificate could not be found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>No certificates could be verified</source>
+        <translation>ÐÐµ ÑÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÐ²ÐµÑÐžÑÑ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>One of the CA certificates is invalid</source>
+        <translation>ÐÐŽÐžÐœ ÐžÐ· CA ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐŸÐ² ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÑÐ¹</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The basicConstraints path length parameter has been exceeded</source>
+        <translation type="unfinished">ÐÑÑÑ Ð¿Ð°ÑÐ°ÐŒÐµÑÑÐ° basicConstraints ÑÐ»ÐžÑÐºÐŸÐŒ ÐŽÐ»ÐžÐœÐœÑÐ¹</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The supplied certificate is unsuitable for this purpose</source>
+        <translation type="unfinished">ÐÑÐµÐŽÑÑÐ°Ð²Ð»ÐµÐœÐœÑÐ¹ ÑÐµÑÑÐžÑÐžÐºÐ°Ñ ÐœÐµ Ð¿ÑÐµÐŽÐœÐ°Ð·ÐœÐ°ÑÐµÐœ ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The root CA certificate is not trusted for this purpose</source>
+        <translation type="unfinished">ÐÐŸÑÐœÐµÐ²ÐŸÐ¹ CA ÑÐµÑÑÐžÑÐžÐºÐ°Ñ ÐœÐµ ÑÐ²Ð»ÑÐµÑÑÑ Ð·Ð°Ð²ÐµÑÐµÐœÐœÑÐŒ ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The root CA certificate is marked to reject the specified purpose</source>
+        <translation type="unfinished">ÐÐŸÑÐœÐµÐ²ÐŸÐ¹ CA ÑÐµÑÑÐžÑÐžÐºÐ°Ñ ÐŸÑÐŒÐµÑÐµÐœ ÐºÐ°Ðº &apos;ÐŸÑÐºÐ°Ð·ÑÐ²Ð°ÑÑ&apos; ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>The peer did not present any certificate</source>
+        <translation>Ð£Ð·ÐµÐ» ÐœÐµ Ð¿ÑÐµÐŽÐŸÑÑÐ°Ð²ÐžÐ» ÑÐµÑÑÐžÑÐžÐºÐ°Ñ</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>The host name did not match any of the valid hosts for this certificate</source>
+        <translation>ÐÐ°Ð·Ð²Ð°ÐœÐžÐµ ÑÐ·Ð»Ð° ÐœÐµ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÐµÑ ÐœÐž Ñ ÐŸÐŽÐœÐžÐŒ ÐžÐ· ÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÑ
+ ÑÐ·Ð»ÐŸÐ² ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÑÐµÑÑÐžÑÐžÐºÐ°ÑÐ°</translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Unknown error</source>
+        <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÐ°Ñ ÐŸÑÐžÐ±ÐºÐ°</translation>
     </message>
 </context>
@@ -6055,5 +6935,5 @@
     <name>QStateMachine</name>
     <message>
-        <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/>
+        <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/>
         <source>Missing initial state in compound state &apos;%1&apos;</source>
         <translation type="unfinished"></translation>
@@ -6109,5 +6989,5 @@
     <name>QTDSDriver</name>
     <message>
-        <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/>
+        <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+595"/>
         <source>Unable to open connection</source>
         <translation>ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐŸÑÐºÑÑÑÑ ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÐµ</translation>
@@ -6144,5 +7024,5 @@
     <name>QTextControl</name>
     <message>
-        <location filename="../src/gui/text/qtextcontrol.cpp" line="+2003"/>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+2027"/>
         <source>&amp;Undo</source>
         <translation>&amp;ÐÑÐŒÐµÐœÐžÑÑ ÐŽÐµÐ¹ÑÑÐ²ÐžÐµ</translation>
@@ -6187,5 +7067,5 @@
     <name>QToolButton</name>
     <message>
-        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/>
+        <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+310"/>
         <location line="+6"/>
         <source>Press</source>
@@ -6244,12 +7124,12 @@
     <name>QUnicodeControlCharacterMenu</name>
     <message>
-        <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/>
+        <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/>
         <source>LRM Left-to-right mark</source>
-        <translation>LRM ÐÑÐžÐ·ÐœÐ°Ðº Ð¿ÐžÑÑÐŒÐ° ÑÐ»ÐµÐ²Ð° ÐœÐ°Ð¿ÑÐ°Ð²ÐŸ</translation>
+        <translation type="unfinished">LRM ÐÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ»ÐµÐ²Ð° ÐœÐ°Ð¿ÑÐ°Ð²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>RLM Right-to-left mark</source>
-        <translation>RLM ÐÑÐžÐ·ÐœÐ°Ðº Ð¿ÐžÑÑÐŒÐ° ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ</translation>
+        <translation type="unfinished">RLM ÐÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ</translation>
     </message>
     <message>
@@ -6261,5 +7141,5 @@
         <location line="+1"/>
         <source>ZWNJ Zero width non-joiner</source>
-        <translation type="unfinished">ZWNJ ÐÐµ ÐŸÐ±ÑÐµÐŽÐžÐœÑÑÑÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» ÐœÑÐ»ÐµÐ²ÐŸÐ¹ ÑÐžÑÐžÐœÑ</translation>
+        <translation type="unfinished">ZWNJ Ð Ð°Ð·ÐŽÐµÐ»ÐžÑÐµÐ»Ñ ÐœÑÐ»ÐµÐ²ÐŸÐ¹ ÑÐžÑÐžÐœÑ</translation>
     </message>
     <message>
@@ -6271,25 +7151,25 @@
         <location line="+1"/>
         <source>LRE Start of left-to-right embedding</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">LRE ÐÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ»ÐµÐ²Ð° ÐœÐ°Ð¿ÑÐ°Ð²ÐŸ Ð²ÐœÑÑÑÐž ÑÐµÐºÑÑÐ°, ÐœÐ°Ð¿ÐžÑÐ°ÐœÐœÐŸÐ³ÐŸ ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>RLE Start of right-to-left embedding</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">RLE ÐÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ Ð²ÐœÑÑÑÐž ÑÐµÐºÑÑÐ°, ÐœÐ°Ð¿ÐžÑÐ°ÐœÐœÐŸÐ³ÐŸ ÑÐ»ÐµÐ²Ð° ÐœÐ°Ð¿ÑÐ°Ð²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>LRO Start of left-to-right override</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">LRO ÐÐµÑÐµÐºÑÑÐ²Ð°ÑÑÐžÐ¹ ÐžÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ»ÐµÐ²Ð° ÐœÐ°Ð¿ÑÐ°Ð²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>RLO Start of right-to-left override</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">RLO ÐÐµÑÐµÐºÑÑÐ²Ð°ÑÑÐžÐ¹ ÐžÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐœÐ°Ð¿ÐžÑÐ°ÐœÐžÑ ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>PDF Pop directional formatting</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">PDF ÐÐœÐŽÐžÐºÐ°ÑÐŸÑ ÐºÐŸÐœÑÐ° ÑÐµÐºÑÑÐ° Ñ ÐŽÑÑÐ³ÐžÐŒ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐµÐŒ</translation>
     </message>
     <message>
@@ -6302,5 +7182,5 @@
     <name>QWebFrame</name>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+704"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/>
         <source>Request cancelled</source>
         <translation>ÐÐ°Ð¿ÑÐŸÑ ÐŸÑÐŒÐµÐœÑÐœ</translation>
@@ -6340,5 +7220,5 @@
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+41"/>
+        <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
         <source>Submit</source>
         <comment>default label for Submit buttons in forms on web pages</comment>
@@ -6358,5 +7238,5 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location line="+11"/>
         <source>This is a searchable index. Enter search keywords: </source>
         <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
@@ -6617,5 +7497,5 @@
         <source>Audio Element</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐŽÐžÐŸ-ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
@@ -6623,5 +7503,5 @@
         <source>Video Element</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐžÐŽÐµÐŸ-ÑÐ»ÐµÐŒÐµÐœÑ</translation>
     </message>
     <message>
@@ -6629,5 +7509,5 @@
         <source>Mute Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿ÑÐžÐ³Ð»ÑÑÐžÑÑ&quot;</translation>
     </message>
     <message>
@@ -6641,5 +7521,5 @@
         <source>Play Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ&quot;</translation>
     </message>
     <message>
@@ -6647,5 +7527,5 @@
         <source>Pause Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿Ð°ÑÐ·Ð°&quot;</translation>
     </message>
     <message>
@@ -6665,5 +7545,5 @@
         <source>Rewind Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿ÐµÑÐµÐŒÐŸÑÐ°ÑÑ&quot;</translation>
     </message>
     <message>
@@ -6677,5 +7557,5 @@
         <source>Elapsed Time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐŸÑÐ»ÐŸ Ð²ÑÐµÐŒÐµÐœÐž</translation>
     </message>
     <message>
@@ -6683,5 +7563,5 @@
         <source>Remaining Time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÐ°Ð»ÐŸÑÑ Ð²ÑÐµÐŒÐµÐœÐž</translation>
     </message>
     <message>
@@ -6689,5 +7569,5 @@
         <source>Status Display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÐµ ÑÐŸÑÑÐŸÑÐœÐžÑ</translation>
     </message>
     <message>
@@ -6695,5 +7575,5 @@
         <source>Fullscreen Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿ÐŸÐ»ÐœÐŸÑÐºÑÐ°ÐœÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ&quot;</translation>
     </message>
     <message>
@@ -6701,5 +7581,5 @@
         <source>Seek Forward Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿ÐµÑÐµÐŒÐŸÑÐºÐ° Ð²Ð¿ÐµÑÑÐŽ&quot;</translation>
     </message>
     <message>
@@ -6707,5 +7587,5 @@
         <source>Seek Back Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐœÐŸÐ¿ÐºÐ° &quot;Ð¿ÐµÑÐµÐŒÐŸÑÐºÐ° ÐœÐ°Ð·Ð°ÐŽ&quot;</translation>
     </message>
     <message>
@@ -6713,5 +7593,5 @@
         <source>Audio element playback controls and status display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ð­Ð»ÐµÐŒÐµÐœÑÑ ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµÐŒ Ð·Ð²ÑÐºÐ° Ðž ÐŸÑÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐŸÑÑÐŸÑÐœÐžÑ</translation>
     </message>
     <message>
@@ -6719,5 +7599,5 @@
         <source>Video element playback controls and status display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ð­Ð»ÐµÐŒÐµÐœÑÑ ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµÐŒ Ð²ÐžÐŽÐµÐŸ Ðž ÐŸÑÐŸÐ±ÑÐ°Ð¶ÐµÐœÐžÑ ÑÐŸÑÑÐŸÑÐœÐžÑ</translation>
     </message>
     <message>
@@ -6725,5 +7605,5 @@
         <source>Mute audio tracks</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐºÐ»ÑÑÐžÑÑ Ð·Ð²ÑÐºÐŸÐ²ÑÐµ ÐŽÐŸÑÐŸÐ¶ÐºÐž</translation>
     </message>
     <message>
@@ -6731,5 +7611,5 @@
         <source>Unmute audio tracks</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐºÐ»ÑÑÐžÑÑ Ð·Ð²ÑÐºÐŸÐ²ÑÐµ ÐŽÐŸÑÐŸÐ¶ÐºÐž</translation>
     </message>
     <message>
@@ -6737,5 +7617,5 @@
         <source>Begin playback</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation>ÐÐ°ÑÐ°ÑÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ</translation>
     </message>
     <message>
@@ -6743,5 +7623,5 @@
         <source>Pause playback</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation>ÐÑÐžÐŸÑÑÐ°ÐœÐŸÐ²ÐžÑÑ Ð²ÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÐµ</translation>
     </message>
     <message>
@@ -6761,5 +7641,5 @@
         <source>Rewind movie</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐ°ÑÐ°ÑÑ ÑÐžÐ»ÑÐŒ ÑÐœÐ°ÑÐ°Ð»Ð°</translation>
     </message>
     <message>
@@ -6773,5 +7653,5 @@
         <source>Current movie time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ð¢ÐµÐºÑÑÐµÐµ Ð²ÑÐµÐŒÑ ÑÐžÐ»ÑÐŒÐ°</translation>
     </message>
     <message>
@@ -6779,5 +7659,5 @@
         <source>Remaining movie time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÐ°Ð»ÐŸÑÑ Ð²ÑÐµÐŒÐµÐœÐž ÑÐžÐ»ÑÐŒÐ°</translation>
     </message>
     <message>
@@ -6785,5 +7665,5 @@
         <source>Current movie status</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ð¢ÐµÐºÑÑÐµÐµ ÑÐŸÑÑÐŸÑÐœÐžÐµ ÑÐžÐ»ÑÐŒÐ°</translation>
     </message>
     <message>
@@ -6791,5 +7671,5 @@
         <source>Play movie in full-screen mode</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÐŸÑÐ¿ÑÐŸÐžÐ·Ð²ÐŸÐŽÐžÑÑ ÑÐžÐ»ÑÐŒ Ð² Ð¿ÐŸÐ»ÐœÐŸÑÐºÑÐ°ÐœÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ</translation>
     </message>
     <message>
@@ -6797,5 +7677,5 @@
         <source>Seek quickly back</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÑÑÐ°Ñ Ð¿ÐµÑÐµÐŒÐŸÑÐºÐ° ÐœÐ°Ð·Ð°ÐŽ</translation>
     </message>
     <message>
@@ -6803,5 +7683,5 @@
         <source>Seek quickly forward</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÑÑÑÐ°Ñ Ð¿ÐµÑÐµÐŒÐŸÑÐºÐ° Ð²Ð¿ÐµÑÑÐŽ</translation>
     </message>
     <message>
@@ -6809,5 +7689,5 @@
         <source>Indefinite time</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ÐÑÐµÐŒÑ ÐœÐµ ÐŸÐ¿ÑÐµÐŽÐµÐ»ÐµÐœÐŸ</translation>
     </message>
     <message>
@@ -6815,5 +7695,5 @@
         <source>%1 days %2 hours %3 minutes %4 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 ÐŽÐœÐµÐ¹ %2 ÑÐ°ÑÐŸÐ² %3 ÐŒÐžÐœÑÑ %4 ÑÐµÐºÑÐœÐŽ</translation>
     </message>
     <message>
@@ -6821,5 +7701,5 @@
         <source>%1 hours %2 minutes %3 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 ÑÐ°ÑÐŸÐ² %2 ÐŒÐžÐœÑÑ %3 ÑÐµÐºÑÐœÐŽ</translation>
     </message>
     <message>
@@ -6827,5 +7707,5 @@
         <source>%1 minutes %2 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 ÐŒÐžÐœÑÑ %2 ÑÐµÐºÑÐœÐŽ</translation>
     </message>
     <message>
@@ -6833,5 +7713,5 @@
         <source>%1 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 ÑÐµÐºÑÐœÐŽ</translation>
     </message>
     <message>
@@ -6872,5 +7752,5 @@
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+170"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/>
         <source>Web Inspector - %2</source>
         <translation>Web-ÐžÐœÑÐ¿ÐµÐºÑÐŸÑ  - %2</translation>
@@ -6955,5 +7835,5 @@
     </message>
     <message>
-        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1727"/>
+        <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1833"/>
         <source>JavaScript Alert - %1</source>
         <translation>JavaScript: ÐÑÐµÐŽÑÐ¿ÑÐµÐ¶ÐŽÐµÐœÐžÐµ - %1</translation>
@@ -6965,5 +7845,5 @@
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+19"/>
         <source>JavaScript Prompt - %1</source>
         <translation>JavaScript: ÐÐ°Ð¿ÑÐŸÑ - %1</translation>
@@ -6980,5 +7860,5 @@
     </message>
     <message>
-        <location line="+383"/>
+        <location line="+381"/>
         <source>Move the cursor to the next character</source>
         <translation>ÐÐµÑÐµÐŒÐµÑÑÐžÑÑ ÑÐºÐ°Ð·Ð°ÑÐµÐ»Ñ Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÑÐžÐŒÐ²ÐŸÐ»Ñ</translation>
@@ -7202,5 +8082,5 @@
     <name>QWidget</name>
     <message>
-        <location filename="../src/gui/kernel/qwidget.cpp" line="+5652"/>
+        <location filename="../src/gui/kernel/qwidget.cpp" line="+5757"/>
         <source>*</source>
         <translation>*</translation>
@@ -7453,4 +8333,32 @@
         <source>error in the text declaration of an external entity</source>
         <translation>ÐŸÑÐžÐ±ÐºÐ° Ð² ÐŸÐ±ÑÑÐ²Ð»ÐµÐœÐžÐž Ð²ÐœÐµÑÐœÐµÐ³ÐŸ ÐŸÐ±ÑÐµÐºÑÐ°</translation>
+    </message>
+</context>
+<context>
+    <name>QXmlPatternistCLI</name>
+    <message>
+        <location filename="../src/xmlpatterns/api/qcoloringmessagehandler.cpp" line="+87"/>
+        <source>Warning in %1, at line %2, column %3: %4</source>
+        <translation>ÐÑÐµÐŽÑÐ¿ÑÐµÐ¶ÐŽÐµÐœÐžÐµ Ð² %1, Ð² ÑÑÑÐŸÐºÐµ %2, ÑÑÐŸÐ»Ð±ÑÐµ %3: %4</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Warning in %1: %2</source>
+        <translation>ÐÑÐµÐŽÑÐ¿ÑÐµÐ¶ÐŽÐµÐœÐžÐµ Ð² %1: %2</translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <source>Unknown location</source>
+        <translation>ÐÐµÐžÐ·Ð²ÐµÑÑÐœÐŸÐµ ÑÐ°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Error %1 in %2, at line %3, column %4: %5</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° %1 Ð² %2, Ð² ÑÑÑÐŸÐºÐµ %3, ÑÑÐŸÐ»Ð±ÑÐµ %4: %5</translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Error %1 in %2: %3</source>
+        <translation>ÐÑÐžÐ±ÐºÐ° %1 Ð² %2: %3</translation>
     </message>
 </context>
@@ -7672,5 +8580,5 @@
         <location line="+10"/>
         <source>Overflow: Can&apos;t represent date %1.</source>
-        <translation>ÐÐµÑÐµÐ¿ÐŸÐ»ÐœÐµÐœÐžÐµ: ÐÐµ ÑÐŽÐ°ÐµÑÑÑ Ð¿ÑÐµÐŽÑÑÐ°Ð²ÐžÑÑ ÐŽÐ°ÑÑ %1.</translation>
+        <translation>ÐÐµÑÐµÐ¿ÐŸÐ»ÐœÐµÐœÐžÐµ: ÐÐµ ÑÐŽÐ°ÑÑÑÑ Ð¿ÑÐµÐŽÑÑÐ°Ð²ÐžÑÑ ÐŽÐ°ÑÑ %1.</translation>
     </message>
     <message>
@@ -7847,5 +8755,5 @@
     <message>
         <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/>
-        <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source>
+        <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source>
         <translation>ÐŠÐµÐ»ÐµÐ²ÐŸÐµ ÐžÐŒÑ Ð² ÐŸÐ±ÑÐ°Ð±Ð°ÑÑÐ²Ð°ÐµÐŒÐŸÐ¹ ÐžÐœÑÑÑÑÐºÑÐžÐž ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ %1 Ð² Ð»ÑÐ±ÐŸÐ¹ ÐºÐŸÐŒÐ±ÐžÐœÐ°ÑÐžÐž ÐœÐžÐ¶ÐœÐµÐ³ÐŸ Ðž Ð²ÐµÑÑ
 ÐœÐµÐ³ÐŸ ÑÐµÐ³ÐžÑÑÑÐŸÐ². ÐÐŒÑ %2 ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸ.</translation>
@@ -8039,5 +8947,10 @@
     </message>
     <message>
-        <location line="-7041"/>
+        <location line="-7254"/>
+        <source>A template with name %1 has already been declared.</source>
+        <translation>ÐšÐ°Ð±Ð»ÐŸÐœ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ Ð±ÑÐ» ÐŸÐ±ÑÑÐ²Ð»ÐµÐœ.</translation>
+    </message>
+    <message>
+        <location line="+213"/>
         <source>Only one %1 declaration can occur in the query prolog.</source>
         <translation>Ð¢ÐŸÐ»ÑÐºÐŸ ÐŸÐŽÐœÐŸ ÐŸÐ±ÑÑÐ²Ð»ÐµÐœÐžÐµ %1 ÐŒÐŸÐ¶ÐµÑ Ð¿ÑÐžÑÑÑÑÑÐ²ÐŸÐ²Ð°ÑÑ Ð² Ð¿ÑÐŸÐ»ÐŸÐ³Ðµ Ð·Ð°Ð¿ÑÐŸÑÐ°.</translation>
@@ -8049,9 +8962,4 @@
     </message>
     <message>
-        <location line="+63"/>
-        <source>No variable by name %1 exists</source>
-        <translation>ÐÐµÑÐµÐŒÐµÐœÐœÐ°Ñ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ</translation>
-    </message>
-    <message>
         <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/>
         <source>The variable %1 is unused</source>
@@ -8059,5 +8967,5 @@
     </message>
     <message>
-        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2841"/>
+        <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2904"/>
         <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
         <translation>ÐÐµÑÑÐžÑ %1 ÐœÐµ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ. ÐÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑÑÑ XQuery Ð²ÐµÑÑÐžÐž 1.0.</translation>
@@ -8124,35 +9032,10 @@
     </message>
     <message>
-        <location line="+52"/>
-        <source>No value is available for the external variable by name %1.</source>
-        <translation>ÐÑÑÑÑÑÑÐ²ÑÐµÑ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐ»Ñ Ð²ÐœÐµÑÐœÐµÐ¹ Ð¿ÐµÑÐµÐŒÐµÐœÐœÐŸÐ¹ Ñ ÐžÐŒÐµÐœÐµÐŒ %1.</translation>
-    </message>
-    <message>
-        <location line="-4036"/>
-        <source>A template by name %1 has already been declared.</source>
-        <translation>ÐšÐ°Ð±Ð»ÐŸÐœ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ Ð±ÑÐ» ÐŸÐ±ÑÑÐ²Ð»ÐµÐœ.</translation>
-    </message>
-    <message>
-        <location line="+3581"/>
+        <location line="-403"/>
         <source>The keyword %1 cannot occur with any other mode name.</source>
-        <translation type="unfinished">ÐÐ»ÑÑÐµÐ²ÐŸÐµ ÑÐ»ÐŸÐ²ÐŸ %1 ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð²ÑÑÑÐµÑÐ°ÑÑÑÑ Ñ Ð»ÑÐ±ÑÐŒ ÐŽÑÑÐ³ÐžÐŒ ÐœÐ°Ð·Ð²Ð°ÐœÐžÐµÐŒ ÑÐµÐ¶ÐžÐŒÐ°.</translation>
-    </message>
-    <message>
-        <location line="+29"/>
-        <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
-        <translation>ÐÐœÐ°ÑÐµÐœÐžÐµ Ð°ÑÑÐžÐ±ÑÑÐ° %1 ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐžÐ¿Ð° %2, ÐœÐŸ %3 ÐµÐŒÑ ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ.</translation>
-    </message>
-    <message>
-        <location line="+75"/>
-        <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source>
-        <translation>ÐÐµ ÑÐŽÐ°ÐµÑÑÑ ÑÐ²ÑÐ·Ð°ÑÑ Ð¿ÑÐµÑÐžÐºÑ %1. ÐÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ Ð¿ÑÐµÑÐžÐºÑ ÑÐ²ÑÐ·Ð°Ðœ Ñ Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸÐŒ ÐžÐŒÑÐœ %2.</translation>
-    </message>
-    <message>
-        <location line="+312"/>
-        <source>A variable by name %1 has already been declared.</source>
-        <translation>ÐÐµÑÐµÐŒÐµÐœÐœÐ°Ñ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ ÐŸÐ±ÑÑÐ²Ð»ÐµÐœÐ°.</translation>
-    </message>
-    <message>
-        <location line="+135"/>
+        <translation>ÐÐ»ÑÑÐµÐ²ÐŸÐµ ÑÐ»ÐŸÐ²ÐŸ %1 ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð²ÑÑÑÐµÑÐ°ÑÑÑÑ Ñ Ð»ÑÐ±ÑÐŒ ÐŽÑÑÐ³ÐžÐŒ ÐœÐ°Ð·Ð²Ð°ÐœÐžÐµÐŒ ÑÐµÐ¶ÐžÐŒÐ°.</translation>
+    </message>
+    <message>
+        <location line="+551"/>
         <source>A stylesheet function must have a prefixed name.</source>
         <translation>Ð€ÑÐœÐºÑÐžÑ ÑÑÐžÐ»ÐµÐ¹ ÐŽÐŸÐ»Ð¶ÐœÐ° ÐžÐŒÐµÑÑ ÐžÐŒÑ Ñ Ð¿ÑÐµÑÐžÐºÑÐŸÐŒ.</translation>
@@ -8189,6 +9072,31 @@
     </message>
     <message>
-        <location line="+37"/>
-        <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
+        <location line="-3755"/>
+        <source>No variable with name %1 exists</source>
+        <translation>ÐÐµÑÐµÐŒÐµÐœÐœÐ°Ñ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ</translation>
+    </message>
+    <message>
+        <location line="+3146"/>
+        <source>The value of attribute %1 must be of type %2, which %3 isn&apos;t.</source>
+        <translation>ÐÐœÐ°ÑÐµÐœÐžÐµ Ð°ÑÑÐžÐ±ÑÑÐ° %1 ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐžÐ¿Ð° %2, ÐœÐŸ %3 ÐœÐµ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÐµÑ ÐŽÐ°ÐœÐœÐŸÐŒÑ ÑÐžÐ¿Ñ.</translation>
+    </message>
+    <message>
+        <location line="+75"/>
+        <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source>
+        <translation>ÐÐµ ÑÐŽÐ°ÑÑÑÑ ÑÐ²ÑÐ·Ð°ÑÑ Ð¿ÑÐµÑÐžÐºÑ %1. ÐÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ Ð¿ÑÐµÑÐžÐºÑ ÑÐ²ÑÐ·Ð°Ðœ Ñ Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²ÐŸÐŒ ÐžÐŒÑÐœ %2.</translation>
+    </message>
+    <message>
+        <location line="+312"/>
+        <source>A variable with name %1 has already been declared.</source>
+        <translation>ÐÐµÑÐµÐŒÐµÐœÐœÐ°Ñ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ ÐŸÐ±ÑÑÐ²Ð»ÐµÐœÐ°.</translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>No value is available for the external variable with name %1.</source>
+        <translation>ÐÑÑÑÑÑÑÐ²ÑÐµÑ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐŽÐ»Ñ Ð²ÐœÐµÑÐœÐµÐ¹ Ð¿ÐµÑÐµÐŒÐµÐœÐœÐŸÐ¹ Ñ ÐžÐŒÐµÐœÐµÐŒ %1.</translation>
+    </message>
+    <message>
+        <location line="+220"/>
+        <source>An argument with name %1 has already been declared. Every argument name must be unique.</source>
         <translation>ÐÑÐ³ÑÐŒÐµÐœÑ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ ÐŸÐ±ÑÑÐ²Ð»ÐµÐœ. ÐÐŒÑ ÐºÐ°Ð¶ÐŽÐŸÐ³ÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÐ° ÐŽÐŸÐ»Ð¶ÐœÐŸ Ð±ÑÑÑ ÑÐœÐžÐºÐ°Ð»ÑÐœÑÐŒ.</translation>
     </message>
@@ -8255,5 +9163,15 @@
     </message>
     <message>
-        <location line="+1197"/>
+        <location line="+333"/>
+        <source>No function with name %1 is available.</source>
+        <translation>Ð€ÑÐœÐºÑÐžÑ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ.</translation>
+    </message>
+    <message>
+        <location line="+250"/>
+        <source>An attribute with name %1 has already appeared on this element.</source>
+        <translation>ÐÑÑÐžÐ±ÑÑ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÑÐ»ÐµÐŒÐµÐœÑÐ°.</translation>
+    </message>
+    <message>
+        <location line="+614"/>
         <source>%1 is not a valid name for a processing-instruction.</source>
         <translation>%1 ÑÐ²Ð»ÑÐµÑÑÑ ÐœÐµÐ²ÐµÑÐœÑÐŒ ÐœÐ°Ð·Ð²Ð°ÐœÐžÐµÐŒ ÐŽÐ»Ñ ÐžÐœÑÑÑÑÐºÑÐžÐž ÐŸÐ±ÑÐ°Ð±ÐŸÑÐºÐž.</translation>
@@ -8280,10 +9198,5 @@
     </message>
     <message>
-        <location line="+6380"/>
-        <source>No function by name %1 is available.</source>
-        <translation>Ð€ÑÐœÐºÑÐžÑ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÐŸÑÑÑÑÑÑÐ²ÑÐµÑ.</translation>
-    </message>
-    <message>
-        <location line="+102"/>
+        <location line="+6482"/>
         <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
         <translation>URI Ð¿ÑÐŸÑÑÑÐ°ÐœÑÑÐ²Ð° ÐžÐŒÑÐœ ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐŸÐ¹ Ð¿ÑÐž ÑÐ²ÑÐ·ÑÐ²Ð°ÐœÐžÐž Ñ Ð¿ÑÐµÑÐžÐºÑÐŸÐŒ %1.</translation>
@@ -8320,10 +9233,5 @@
     </message>
     <message>
-        <location line="+16"/>
-        <source>An attribute by name %1 has already appeared on this element.</source>
-        <translation>ÐÑÑÐžÐ±ÑÑ Ñ ÐžÐŒÐµÐœÐµÐŒ %1 ÑÐ¶Ðµ ÑÑÑÐµÑÑÐ²ÑÐµÑ ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÑÐ»ÐµÐŒÐµÐœÑÐ°.</translation>
-    </message>
-    <message>
-        <location line="+61"/>
+        <location line="+77"/>
         <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
         <translation>ÐÑÑÐŒÐŸÐ¹ ÐºÐŸÐœÑÑÑÑÐºÑÐŸÑ ÑÐ»ÐµÐŒÐµÐœÑÐ° ÑÐŸÑÑÐ°Ð²Ð»ÐµÐœ ÐœÐµÐºÐŸÑÑÐµÐºÑÐœÐŸ. %1 Ð·Ð°ÐºÐ°ÐœÑÐžÐ²Ð°ÐµÑÑÑ ÐœÐ° %2.</translation>
@@ -9039,5 +9947,5 @@
     <message>
         <location line="+5"/>
-        <source>Derived attribute %1 does not exists in the base definition.</source>
+        <source>Derived attribute %1 does not exist in the base definition.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -9491,5 +10399,5 @@
     <message>
         <location line="+131"/>
-        <source>Component with id %1 has been defined previously.</source>
+        <source>Component with ID %1 has been defined previously.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -9905,9 +10813,14 @@
     <message>
         <location line="+6"/>
-        <source>Fixed value constrained not allowed if element is nillable.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+32"/>
+        <source>Fixed value constraint not allowed if element is nillable.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+230"/>
+        <source>Element %1 cannot contain other elements, as it has a fixed content.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-198"/>
         <source>Specified type %1 is not validly substitutable with element type %2.</source>
         <translation type="unfinished"></translation>
@@ -9953,10 +10866,5 @@
     </message>
     <message>
-        <location line="+18"/>
-        <source>Element %1 can not contain other elements, as it has a fixed content.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+43"/>
+        <location line="+61"/>
         <source>Element %1 is missing required attribute %2.</source>
         <translation type="unfinished"></translation>
Index: /trunk/translations/qtconfig_ru.ts
===================================================================
--- /trunk/translations/qtconfig_ru.ts	(revision 768)
+++ /trunk/translations/qtconfig_ru.ts	(revision 769)
@@ -47,5 +47,5 @@
         <location line="+31"/>
         <source>Phonon GStreamer backend not available.</source>
-        <translation type="unfinished">ÐÐŸÐŽÑÐ»Ñ Phonon Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐºÐž GStreamer ÐœÐµÐŽÐŸÑÑÑÐ¿ÐµÐœ.</translation>
+        <translation>ÐÐŸÐŽÑÐ»Ñ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐºÐž GStreamer ÐœÐµÐŽÐŸÑÑÑÐ¿ÐµÐœ.</translation>
     </message>
     <message>
@@ -162,60 +162,60 @@
     <name>MainWindowBase</name>
     <message>
-        <location filename="../tools/qtconfig/mainwindowbase.ui" line="+54"/>
+        <location filename="../tools/qtconfig/mainwindowbase.ui"/>
         <source>Qt Configuration</source>
         <translation>ÐÐŸÐœÑÐžÐ³ÑÑÐ°ÑÐžÑ Qt</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>Appearance</source>
         <translation>ÐÐœÐµÑÐœÐžÐ¹ Ð²ÐžÐŽ</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>GUI Style</source>
         <translation>Ð¡ÑÐžÐ»Ñ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»ÑÑÐºÐŸÐ³ÐŸ Ð³ÑÐ°ÑÐžÑÐµÑÐºÐŸÐ³ÐŸ ÐžÐœÑÐµÑÑÐµÐ¹ÑÐ°</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Select GUI &amp;Style:</source>
         <translation type="unfinished">&amp;Ð¡ÑÐžÐ»Ñ ÐžÐœÑÐµÑÑÐµÐ¹ÑÐ°:</translation>
     </message>
     <message>
-        <location line="+88"/>
+        <location/>
         <source>Build Palette</source>
         <translation type="unfinished">ÐÐ°Ð»ÐžÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>&amp;3-D Effects:</source>
         <translation>Ð­ÑÑÐµÐºÑÑ &amp;3D:</translation>
     </message>
     <message>
-        <location line="+31"/>
+        <location/>
         <source>Window Back&amp;ground:</source>
         <translation>&amp;Ð€ÐŸÐœ ÐŸÐºÐœÐ°:</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <location/>
         <source>&amp;Tune Palette...</source>
         <translation>&amp;ÐÐ°ÑÑÑÐŸÐžÑÑ Ð¿Ð°Ð»ÐžÑÑÑ...</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Please use the KDE Control Center to set the palette.</source>
         <translation>ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ ÐŠÐµÐœÑÑ ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ KDE ÐŽÐ»Ñ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž ÑÐ²ÐµÑÐŸÐ².</translation>
     </message>
     <message>
-        <location line="-154"/>
+        <location/>
         <source>Preview</source>
         <translation>ÐÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Select &amp;Palette:</source>
         <translation>ÐÑÐ±ÐŸÑ &amp;Ð¿Ð°Ð»ÐžÑÑÑ:</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>Active Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° Ð°ÐºÑÐžÐ²ÐœÑÑ
@@ -223,5 +223,5 @@
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Inactive Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° ÐœÐµÐ°ÐºÑÐžÐ²ÐœÑÑ
@@ -229,5 +229,5 @@
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Disabled Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° Ð²ÑÐºÐ»ÑÑÐµÐœÐœÑÑ
@@ -235,120 +235,115 @@
     </message>
     <message>
-        <location line="+138"/>
+        <location/>
         <source>Fonts</source>
         <translation>ÐšÑÐžÑÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Default Font</source>
         <translation>ÐšÑÐžÑÑ Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+45"/>
+        <location/>
         <source>&amp;Style:</source>
         <translation>&amp;ÐÐ°ÑÐµÑÑÐ°ÐœÐžÐµ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;Point Size:</source>
         <translation>&amp;Ð Ð°Ð·ÐŒÐµÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>F&amp;amily:</source>
         <translation>&amp;ÐšÑÐžÑÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Sample Text</source>
         <translation>Ð¢ÐµÐºÑÑ ÐŽÐ»Ñ Ð¿ÑÐžÐŒÐµÑÐ° (Sample Text)</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Font Substitution</source>
         <translation>ÐÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÐ° ÑÑÐžÑÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>S&amp;elect or Enter a Family:</source>
         <translation>&amp;ÐÑÐ±ÐµÑÐžÑÐµ ÑÑÐžÑÑ ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ:</translation>
     </message>
     <message>
-        <location line="+38"/>
+        <location/>
         <source>Current Substitutions:</source>
         <translation>Ð¢ÐµÐºÑÑÐžÐµ Ð·Ð°ÐŒÐµÐœÑ:</translation>
     </message>
     <message>
-        <location line="+18"/>
-        <location line="+501"/>
+        <location/>
         <source>Up</source>
         <translation>ÐÑÑÐµ</translation>
     </message>
     <message>
-        <location line="-494"/>
-        <location line="+508"/>
+        <location/>
         <source>Down</source>
         <translation>ÐÐžÐ¶Ðµ</translation>
     </message>
     <message>
-        <location line="-501"/>
-        <location line="+494"/>
+        <location/>
         <source>Remove</source>
         <translation>Ð£ÐŽÐ°Ð»ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-464"/>
+        <location/>
         <source>Select s&amp;ubstitute Family:</source>
         <translation>&amp;ÐÐ°ÐŒÐµÐœÑÑÑ ÐœÐ° ÑÑÐžÑÑ:</translation>
     </message>
     <message>
-        <location line="+20"/>
-        <location line="+487"/>
+        <location/>
         <source>Add</source>
         <translation>ÐÐŸÐ±Ð°Ð²ÐžÑÑ</translation>
     </message>
     <message>
-        <location line="-474"/>
+        <location/>
         <source>Interface</source>
         <translation>ÐÐœÑÐµÑÑÐµÐ¹Ñ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Feel Settings</source>
         <translation type="unfinished">ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° ÑÐºÐ°Ð·Ð°ÑÐµÐ»Ñ</translation>
     </message>
     <message>
-        <location line="+12"/>
-        <location line="+26"/>
+        <location/>
         <source> ms</source>
         <translation> ÐŒÑ</translation>
     </message>
     <message>
-        <location line="-13"/>
+        <location/>
         <source>&amp;Double Click Interval:</source>
         <translation>&amp;ÐÐœÑÐµÑÐ²Ð°Ð» ÐŽÐ²ÐŸÐ¹ÐœÐŸÐ³ÐŸ ÑÐµÐ»ÑÐºÐ°:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>No blinking</source>
         <translation>ÐÐµÐ· ÐŒÐžÐ³Ð°ÐœÐžÑ</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>&amp;Cursor Flash Time:</source>
         <translation>&amp;ÐÐµÑÐžÐŸÐŽ ÐŒÐžÐ³Ð°ÐœÐžÑ ÐºÑÑÑÐŸÑÐ°:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source> lines</source>
         <translation> ÑÑÑÐŸÐº</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Wheel &amp;Scroll Lines:</source>
         <translation type="unfinished">&amp;ÐÑÐŸÐºÑÑÑÐžÐ²Ð°ÑÑ ÑÑÑÐŸÐº Ð¿ÑÐž Ð¿ÐŸÐ²ÐŸÑÐŸÑÐµ ÐºÐŸÐ»ÑÑÐžÐºÐ°:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Resolve symlinks in URLs</source>
         <translation>Ð Ð°Ð·ÑÐµÑÐ°ÑÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐœÑÐµ ÑÑÑÐ»ÐºÐž Ð² URL-Ð°Ñ
@@ -356,57 +351,50 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>GUI Effects</source>
         <translation type="unfinished">Ð­ÑÑÐµÐºÑÑ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»ÑÑÐºÐŸÐ³ÐŸ ÐžÐœÑÐµÑÑÐµÐ¹ÑÐ°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>&amp;Enable</source>
         <translation>&amp;ÐÐºÐ»ÑÑÐžÑÑ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Alt+E</source>
         <translation>Alt+D</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location/>
         <source>&amp;Menu Effect:</source>
         <translation>Ð­ÑÑÐµÐºÑ &amp;ÐŒÐµÐœÑ:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>C&amp;omboBox Effect:</source>
         <translation type="unfinished">Ð­ÑÑÐµÐºÑ C&amp;omboBox:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>&amp;ToolTip Effect:</source>
         <translation type="unfinished">Ð­ÑÑÐµÐºÑ &amp;ToolTip:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Tool&amp;Box Effect:</source>
         <translation type="unfinished">Ð­ÑÑÐµÐºÑ Tool&amp;Box:</translation>
     </message>
     <message>
-        <location line="+17"/>
-        <location line="+19"/>
-        <location line="+14"/>
-        <location line="+19"/>
+        <location/>
         <source>Disable</source>
         <translation>ÐÑÐºÐ»ÑÑÐµÐœ</translation>
     </message>
     <message>
-        <location line="-47"/>
-        <location line="+19"/>
-        <location line="+14"/>
-        <location line="+19"/>
+        <location/>
         <source>Animate</source>
         <translation>ÐÐœÐžÐŒÐ°ÑÐžÑ</translation>
     </message>
     <message>
-        <location line="-47"/>
-        <location line="+33"/>
+        <location/>
         <source>Fade</source>
         <translation>ÐÐ°ÑÑÑ
@@ -414,114 +402,110 @@
     </message>
     <message>
-        <location line="+28"/>
+        <location/>
         <source>Global Strut</source>
         <translation type="unfinished">Ð¡Ð¿ÐµÑÐžÐ°Ð»ÑÐœÑÐµ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐž</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Minimum &amp;Width:</source>
         <translation>ÐÐžÐœÐžÐŒÐ°Ð»ÑÐœÐ°Ñ &amp;ÑÐžÑÐžÐœÐ°:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Minimum Hei&amp;ght:</source>
         <translation>ÐÐžÐœÐžÐŒÐ°Ð»ÑÐœÐ°Ñ Ð²&amp;ÑÑÐŸÑÐ°:</translation>
     </message>
     <message>
-        <location line="+10"/>
-        <location line="+10"/>
+        <location/>
         <source> pixels</source>
         <translation> Ð¿ÐžÐºÑÐµÐ»ÐµÐ¹</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Enhanced support for languages written right-to-left</source>
         <translation>Ð Ð°ÑÑÐžÑÐµÐœÐœÐ°Ñ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐºÐ° Ð¿ÐžÑÑÐŒÐ° ÑÐ¿ÑÐ°Ð²Ð° ÐœÐ°Ð»ÐµÐ²ÐŸ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>XIM Input Style:</source>
         <translation>Ð¡ÑÐžÐ»Ñ Ð²Ð²ÐŸÐŽÐ° XIM:</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>On The Spot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Over The Spot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Off The Spot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Root</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Default Input Method:</source>
         <translation>ÐÐµÑÐŸÐŽ Ð²Ð²ÐŸÐŽÐ° Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ:</translation>
     </message>
     <message>
-        <location line="+31"/>
+        <location/>
         <source>Printer</source>
         <translation>ÐÑÐžÐœÑÐµÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Enable Font embedding</source>
         <translation>Ð Ð°Ð·ÑÐµÑÐžÑÑ Ð²ÑÑÑÐ°ÐžÐ²Ð°ÐœÐžÐµ ÑÑÐžÑÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>Font Paths</source>
         <translation>ÐÑÑÐž Ðº ÑÑÐžÑÑÐ°ÐŒ</translation>
     </message>
     <message>
-        <location line="+77"/>
+        <location/>
         <source>Browse...</source>
         <translation>ÐÐ±Ð·ÐŸÑ...</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Press the &lt;b&gt;Browse&lt;/b&gt; button or enter a directory and press Enter to add them to the list.</source>
         <translation>ÐÐ°Ð¶ÐŒÐžÑÐµ ÐºÐœÐŸÐ¿ÐºÑ &lt;b&gt;ÐÐ±Ð·ÐŸÑ...&lt;/b&gt; ÐžÐ»Ðž ÑÐºÐ°Ð¶ÐžÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³ Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐÐ²ÐŸÐŽ ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÐµÐ³ÐŸ Ð² ÑÐ¿ÐžÑÐŸÐº.</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>Phonon</source>
         <translation>Phonon</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>About Phonon</source>
         <translation>Ð Phonon</translation>
     </message>
     <message>
-        <location line="+6"/>
-        <location line="+44"/>
+        <location/>
         <source>Current Version:</source>
         <translation>Ð¢ÐµÐºÑÑÐ°Ñ Ð²ÐµÑÑÐžÑ:</translation>
     </message>
     <message>
-        <location line="-37"/>
-        <location line="+44"/>
+        <location/>
         <source>Not available</source>
         <translation>ÐÐµÐŽÐŸÑÑÑÐ¿ÐœÐŸ</translation>
     </message>
     <message>
-        <location line="-37"/>
-        <location line="+44"/>
+        <location/>
         <source>Website:</source>
         <translation>ÐÑÐ±-ÑÐ°Ð¹Ñ:</translation>
     </message>
     <message>
-        <location line="-37"/>
+        <location/>
         <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -536,10 +520,10 @@
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>About GStreamer</source>
         <translation>Ð GStreamer</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location/>
         <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -554,20 +538,20 @@
     </message>
     <message>
-        <location line="+17"/>
+        <location/>
         <source>GStreamer backend settings</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž ÐŒÐŸÐŽÑÐ»Ñ GStreamer</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Preferred audio sink:</source>
         <translation>ÐÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÐŸÐµ Ð·Ð²ÑÐºÐŸÐ²ÐŸÐµ ÑÑÑÑÐŸÐ¹ÑÑÐ²ÐŸ:</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Preferred render method:</source>
         <translation>ÐÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÑÐ¹ ÐŒÐµÑÐŸÐŽ ÐŸÑÑÐžÑÐŸÐ²ÐºÐž:</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -583,15 +567,15 @@
     </message>
     <message>
-        <location line="+68"/>
+        <location/>
         <source>&amp;File</source>
         <translation>&amp;Ð€Ð°Ð¹Ð»</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <source>&amp;Help</source>
         <translation>&amp;Ð¡Ð¿ÑÐ°Ð²ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Save</source>
         <translation>&amp;Ð¡ÐŸÑ
@@ -599,5 +583,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save</source>
         <translation>Ð¡ÐŸÑ
@@ -605,10 +589,10 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+S</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>E&amp;xit</source>
         <translation>Ð&amp;ÑÑ
@@ -616,5 +600,5 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Exit</source>
         <translation>ÐÑÑ
@@ -622,20 +606,20 @@
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;About</source>
         <translation>&amp;Ð Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒÐµ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>About</source>
         <translation>Ð Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒÐµ</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>About &amp;Qt</source>
         <translation>Ð &amp;Qt</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>About Qt</source>
         <translation>Ð Qt</translation>
@@ -645,10 +629,10 @@
     <name>PaletteEditorAdvancedBase</name>
     <message>
-        <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui" line="+61"/>
+        <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui"/>
         <source>Tune Palette</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ° Ð¿Ð°Ð»ÐžÑÑÑ</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>&lt;b&gt;Edit Palette&lt;/b&gt;&lt;p&gt;Change the palette of the current widget or form.&lt;/p&gt;&lt;p&gt;Use a generated palette or select colors for each color group and each color role.&lt;/p&gt;&lt;p&gt;The palette can be tested with different widget layouts in the preview section.&lt;/p&gt;</source>
         <translation>&lt;b&gt;ÐÐ·ÐŒÐµÐœÐµÐœÐžÐµ Ð¿Ð°Ð»ÐžÑÑÑ&lt;/b&gt;&lt;p&gt;ÐÐ·ÐŒÐµÐœÐµÐœÐžÐµ Ð¿Ð°Ð»ÐžÑÑÑ ÑÐµÐºÑÑÐµÐ³ÐŸ Ð²ÐžÐŽÐ¶ÐµÑÐ° ÐžÐ»Ðž ÑÐŸÑÐŒÑ.&lt;/p&gt;&lt;p&gt;ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ ÑÑÐŸÑÐŒÐžÑÐŸÐ²Ð°ÐœÐœÑÑ Ð¿Ð°Ð»ÐžÑÑÑ ÐžÐ»Ðž Ð²ÑÐ±ÐµÑÐžÑÐµ ÑÐ²ÐµÑÐ° ÐŽÐ»Ñ ÐºÐ°Ð¶ÐŽÐŸÐ¹ Ð³ÑÑÐ¿Ð¿Ñ ÑÐ²ÐµÑÐŸÐ² Ðž ÐºÐ°Ð¶ÐŽÐŸÐ¹ ÐžÑ
@@ -659,10 +643,10 @@
     </message>
     <message>
-        <location line="+29"/>
+        <location/>
         <source>Select &amp;Palette:</source>
         <translation>ÐÑÐ±ÐŸÑ &amp;Ð¿Ð°Ð»ÐžÑÑÑ:</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Active Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° Ð°ÐºÑÐžÐ²ÐœÑÑ
@@ -670,5 +654,5 @@
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Inactive Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° ÐœÐµÐ°ÐºÑÐžÐ²ÐœÑÑ
@@ -676,5 +660,5 @@
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Disabled Palette</source>
         <translation>ÐÐ°Ð»ÐžÑÑÐ° Ð²ÑÐºÐ»ÑÑÐµÐœÐœÑÑ
@@ -682,30 +666,30 @@
     </message>
     <message>
-        <location line="+21"/>
+        <location/>
         <source>Auto</source>
         <translation>ÐÐ²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐž</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Build inactive palette from active</source>
         <translation type="unfinished">Ð¡ÐŸÐ·ÐŽÐ°ÑÑ ÐœÐµÐ°ÐºÑÐžÐ²ÐœÑÑ Ð¿Ð°Ð»ÐžÑÑÑ ÐžÐ· Ð°ÐºÑÐžÐ²ÐœÐŸÐ¹</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>Build disabled palette from active</source>
         <translation type="unfinished">Ð¡ÐŸÐ·ÐŽÐ°ÑÑ Ð²ÑÐºÐ»ÑÑÐµÐœÐœÑÑ Ð¿Ð°Ð»ÐžÑÑÑ ÐžÐ· Ð°ÐºÑÐžÐ²ÐœÐŸÐ¹</translation>
     </message>
     <message>
-        <location line="+16"/>
+        <location/>
         <source>Central color &amp;roles</source>
         <translation type="unfinished">Ð ÐŸÐ»Ðž &amp;ÑÐ²ÐµÑÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>Choose central color role</source>
         <translation type="unfinished">ÐÑÐ±ÐµÑÐžÑÐµ ÑÐŸÐ»Ñ ÑÐ²ÐµÑÐ°</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available central roles are: &lt;ul&gt; &lt;li&gt;Window - general background color.&lt;/li&gt; &lt;li&gt;WindowText - general foreground color. &lt;/li&gt; &lt;li&gt;Base - used as background color for e.g. text entry widgets, usually white or another light color. &lt;/li&gt; &lt;li&gt;Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. &lt;/li&gt; &lt;li&gt;Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. &lt;/li&gt; &lt;li&gt;ButtonText - a foreground color used with the Button color. &lt;/li&gt; &lt;li&gt;Highlight - a color to indicate a selected or highlighted item. &lt;/li&gt; &lt;li&gt;HighlightedText - a text color that contrasts to Highlight. &lt;/li&gt; &lt;li&gt;BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;ÐÑÐ±ÐŸÑ ÑÐŸÐ»Ðž ÑÐ²ÐµÑÐ°.&lt;/b&gt;&lt;p&gt;ÐÐŸÑÑÑÐ¿ÐœÑ ÑÐ»ÐµÐŽÑÑÑÐžÐµ ÑÐŸÐ»Ðž: &lt;ul&gt;&lt;li&gt;Window - ÐŸÑÐœÐŸÐ²ÐœÐŸÐ¹ ÑÐ²ÐµÑ ÑÐŸÐœÐ°.&lt;/li&gt; &lt;li&gt;WindowText - ÐŸÑÐœÐŸÐ²ÐœÐŸÐ¹ ÑÐ²ÐµÑ ÑÐµÐºÑÑÐ°.&lt;/li&gt; &lt;li&gt;Base - ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ Ð² ÐºÐ°ÑÐµÑÑÐ²Ðµ ÑÐŸÐœÐ° ÐŽÐ»Ñ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ, Ð²ÐžÐŽÐ¶ÐµÑÐŸÐ² Ñ ÑÐµÐºÑÑÐŸÐ²ÑÐŒÐž Ð¿ÐŸÐ»ÑÐŒÐž, ÐŸÐ±ÑÑÐœÐŸ, Ð±ÐµÐ»ÑÐ¹ ÐžÐ»Ðž ÐŽÑÑÐ³ÐŸÐ¹ ÑÐ²ÐµÑÐ»ÑÐ¹ ÑÐ²ÐµÑ.&lt;/li&gt; &lt;li&gt;Text - ÑÐ²ÐµÑ ÑÐµÐºÑÑÐ° ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÐŒÑÐ¹ ÑÐŸÐ²ÐŒÐµÑÑÐœÐŸ Ñ Base. ÐÐ±ÑÑÐœÐŸ, ÐŸÐœ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÐµÑ Ñ WindowText, ÑÐ°Ðº ÐºÐ°Ðº Ð² ÑÑÐŸÐŒ ÑÐ»ÑÑÐ°Ðµ Ð¿ÐŸÐ»ÑÑÐ°ÐµÑÑÑ ÐŒÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÑÐ¹ ÐºÐŸÐœÑÑÐ°ÑÑ Ðž Ñ Window, Ðž Ñ Base.&lt;/li&gt; &lt;li&gt;Button - ÐŸÑÐœÐŸÐ²ÐœÐŸÐ¹ ÑÐ²ÐµÑ ÑÐŸÐœÐ° ÐºÐœÐŸÐ¿ÐºÐž, ÐºÐŸÑÐŸÑÐŸÐ¹ ÑÑÐµÐ±ÑÐµÑÑÑ ÑÐ²ÐµÑ ÐŸÑÐ»ÐžÑÐœÑÐ¹ ÐŸÑ Window, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ, Ð² ÑÑÐžÐ»Ðµ Macintosh.&lt;/li&gt; &lt;li&gt;ButtonText - ÑÐ²ÐµÑ ÑÐµÐºÑÑÐ° ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÐŒÑÐ¹ ÑÐŸÐ²ÐŒÐµÑÑÐœÐŸ Ñ Button.&lt;/li&gt; &lt;li&gt;Highlight - ÑÐ²ÐµÑ ÐŽÐ»Ñ ÐŸÐ±ÐŸÐ·ÐœÐ°ÑÐµÐœÐžÑ Ð²ÑÐ±ÑÐ°ÐœÐœÐŸÐ³ÐŸ ÐžÐ»Ðž Ð²ÑÐŽÐµÐ»ÐµÐœÐœÐŸÐ³ÐŸ ÑÐ»ÐµÐŒÐµÐœÑÐ°.&lt;/li&gt; &lt;li&gt;HighlightedText - ÑÐ²ÐµÑ ÑÐµÐºÑÑÐ° ÐºÐŸÐœÑÑÐ°ÑÑÐžÑÑÑÑÐžÐ¹ Ñ Highlight.&lt;/li&gt; &lt;li&gt;BrightText - ÑÐ²ÐµÑ ÑÐµÐºÑÑÐ°, ÐºÐŸÑÐŸÑÑÐ¹ ÐŸÑÐ»ÐžÑÐ°ÐµÑÑÑ ÐŸÑ WindowText Ðž Ñ
@@ -713,66 +697,65 @@
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>WindowText</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Button</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Base</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>BrightText</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>ButtonText</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Highlight</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>HighlightedText</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+52"/>
+        <location/>
         <source>&amp;Select Color:</source>
         <translation>&amp;ÐÑÐ±ÐŸÑ ÑÐ²ÐµÑÐ°:</translation>
     </message>
     <message>
-        <location line="+24"/>
-        <location line="+171"/>
+        <location/>
         <source>Choose a color</source>
         <translation>ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ²ÐµÑ</translation>
     </message>
     <message>
-        <location line="-168"/>
+        <location/>
         <source>Choose a color for the selected central color role.</source>
         <translation>ÐÑÐ±ÐµÑÐžÑÐµ ÑÐ²ÐµÑ ÐŽÐ»Ñ ÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐ¹ ÑÐŸÐ»Ðž.</translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location/>
         <source>3-D shadow &amp;effects</source>
         <translation>Ð­ÑÑÐµÐºÑÑ Ñ&amp;ÑÐµÑ
@@ -780,15 +763,15 @@
     </message>
     <message>
-        <location line="+29"/>
+        <location/>
         <source>Build &amp;from button color</source>
         <translation>ÐÐŸÐ»ÑÑ&amp;ÐžÑÑ ÐžÐ· ÑÐ²ÐµÑÐ° ÐºÐœÐŸÐ¿ÐºÐž</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Generate shadings</source>
         <translation type="unfinished">Ð¡ÐŸÐ·ÐŽÐ°ÐœÐžÐµ Ð¿ÐŸÐ»ÑÑÐŸÐœÐŸÐ²</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Check to let 3D-effect colors be calculated from button-color.</source>
         <translation type="unfinished">ÐÐºÐ»ÑÑÐžÑÐµ, ÑÑÐŸÐ±Ñ ÑÐ²ÐµÑÐ° ÑÑÑÐµÐºÑÐ° ÑÑÑÑ
@@ -796,5 +779,5 @@
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Choose 3D-effect color role</source>
         <translation type="unfinished">ÐÑÐ±ÐŸÑ ÑÐŸÐ»Ðž ÑÐ²ÐµÑÐ° ÐŽÑÐ» ÑÑÑÐµÐºÑÐ° ÑÑÑÑ
@@ -802,60 +785,60 @@
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available effect roles are: &lt;ul&gt; &lt;li&gt;Light - lighter than Button color. &lt;/li&gt; &lt;li&gt;Midlight - between Button and Light. &lt;/li&gt; &lt;li&gt;Mid - between Button and Dark. &lt;/li&gt; &lt;li&gt;Dark - darker than Button. &lt;/li&gt; &lt;li&gt;Shadow - a very dark color. &lt;/li&gt; &lt;/ul&gt;</source>
         <translation>&lt;b&gt;ÐÑÐ±ÐŸÑ ÑÐŸÐ»Ðž ÑÐ²ÐµÑÐ°.&lt;/b&gt;&lt;p&gt;ÐÐŸÑÑÑÐ¿ÐœÑ ÑÐ»ÐµÐŽÑÑÑÐžÐµ ÑÐŸÐ»Ðž: &lt;ul&gt; &lt;li&gt;Light - ÑÐ²ÐµÑÐ»ÐµÐµ ÑÐ²ÐµÑÐ° Button. &lt;/li&gt; &lt;li&gt;Midlight - ÑÑÐµÐŽÐœÐµÐµ ÐŒÐµÐ¶ÐŽÑ Light Ðž Button. &lt;/li&gt; &lt;li&gt;Mid - ÑÑÐµÐŽÐœÐµÐµ ÐŒÐµÐ¶ÐŽÑ Button Ðž Dark. &lt;/li&gt; &lt;li&gt;Dark - ÑÐµÐŒÐœÐµÐµ ÑÐ²ÐµÑÐ° Button. &lt;/li&gt; &lt;li&gt;Shadow - ÐŸÑÐµÐœÑ ÑÐµÐŒÐœÑÐ¹ ÑÐ²ÐµÑ. &lt;/li&gt; &lt;/ul&gt;</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location/>
         <source>Light</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Midlight</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Mid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Dark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Shadow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location/>
         <source>Select Co&amp;lor:</source>
         <translation>ÐÑÐ±ÐŸÑ &amp;ÑÐ²ÐµÑÐ°:</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location/>
         <source>Choose a color for the selected effect color role.</source>
         <translation type="unfinished">ÐÑÐ±ÐŸÑ ÑÐ²ÐµÑÐ° ÐŽÐ»Ñ ÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐ¹ ÑÐŸÐ»Ðž.</translation>
     </message>
     <message>
-        <location line="+42"/>
+        <location/>
         <source>OK</source>
         <translation>ÐÑÐžÐœÑÑÑ</translation>
     </message>
     <message>
-        <location line="+9"/>
+        <location/>
         <source>Close dialog and apply all changes.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ Ñ Ð¿ÑÐžÐŒÐµÐœÐµÐœÐžÐµÐŒ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹.</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Cancel</source>
         <translation>ÐÑÐŒÐµÐœÐ°</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Close dialog and discard all changes.</source>
         <translation>ÐÐ°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ Ñ ÐŸÑÐŒÐµÐœÐŸÐ¹ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹.</translation>
@@ -873,60 +856,60 @@
     <name>PreviewWidgetBase</name>
     <message>
-        <location filename="../tools/qtconfig/previewwidgetbase.ui" line="+66"/>
+        <location filename="../tools/qtconfig/previewwidgetbase.ui"/>
         <source>Preview Window</source>
         <translation>ÐÐºÐœÐŸ Ð¿ÑÐµÐŽÐ¿ÑÐŸÑÐŒÐŸÑÑÐ°</translation>
     </message>
     <message>
-        <location line="+40"/>
+        <location/>
         <source>ButtonGroup</source>
         <translation>ButtonGroup</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>RadioButton1</source>
         <translation>RadioButton1</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>RadioButton2</source>
         <translation>RadioButton2</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>RadioButton3</source>
         <translation>RadioButton3</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>ButtonGroup2</source>
         <translation>ButtonGroup2</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location/>
         <source>CheckBox1</source>
         <translation>CheckBox1</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>CheckBox2</source>
         <translation>CheckBox2</translation>
     </message>
     <message>
-        <location line="+36"/>
+        <location/>
         <source>LineEdit</source>
         <translation>LineEdit</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <source>ComboBox</source>
         <translation>ComboBox</translation>
     </message>
     <message>
-        <location line="+29"/>
+        <location/>
         <source>PushButton</source>
         <translation>PushButton</translation>
     </message>
     <message>
-        <location line="+41"/>
+        <location/>
         <source>&lt;p&gt;
 &lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
@@ -936,5 +919,5 @@
 &lt;/p&gt;</source>
         <translation>&lt;p&gt;
-&lt;a href=&quot;http://qtsoftware.com&quot;&gt;http://qtsoftware.com&lt;/a&gt;
+&lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
 &lt;/p&gt;
 &lt;p&gt;
Index: /trunk/translations/qvfb_ru.ts
===================================================================
--- /trunk/translations/qvfb_ru.ts	(revision 768)
+++ /trunk/translations/qvfb_ru.ts	(revision 769)
@@ -5,5 +5,5 @@
     <name>AnimationSaveWidget</name>
     <message>
-        <location filename="../tools/qvfb/qvfb.cpp" line="+865"/>
+        <location filename="../tools/qvfb/qvfb.cpp" line="+868"/>
         <location line="+204"/>
         <source>Record</source>
@@ -85,55 +85,60 @@
     <name>Config</name>
     <message>
-        <location filename="../tools/qvfb/config.ui" line="+54"/>
+        <location filename="../tools/qvfb/config.ui"/>
         <source>Configure</source>
         <translation>ÐÐ°ÑÑÑÐŸÐ¹ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+29"/>
+        <location/>
         <source>Size</source>
         <translation>Ð Ð°Ð·ÐŒÐµÑ</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>176x220 &quot;SmartPhone&quot;</source>
         <translation>176x220 &quot;SmartPhone&quot;</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>240x320 &quot;PDA&quot;</source>
         <translation>240x320 &quot;PDA&quot;</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>320x240 &quot;TV&quot; / &quot;QVGA&quot;</source>
         <translation>320x240 &quot;TV&quot; / &quot;QVGA&quot;</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>640x480 &quot;VGA&quot;</source>
         <translation>640x480 &quot;VGA&quot;</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
+        <source>800x480</source>
+        <translation>800x480</translation>
+    </message>
+    <message>
+        <location/>
         <source>800x600</source>
         <translation>800x600</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>1024x768</source>
         <translation>1024x768</translation>
     </message>
     <message>
-        <location line="+21"/>
+        <location/>
         <source>Custom</source>
         <translation>ÐÑÐŸÐ±ÑÐ¹</translation>
     </message>
     <message>
-        <location line="+44"/>
+        <location/>
         <source>Depth</source>
         <translation>ÐÐ»ÑÐ±ÐžÐœÐ°</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>1 bit monochrome</source>
         <translation>1 Ð±ÐžÑ (ÐŒÐŸÐœÐŸÑ
@@ -141,75 +146,75 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>2 bit grayscale</source>
         <translation>2 Ð±ÐžÑÐ° (Ð³ÑÐ°ÐŽÐ°ÑÐžÐž ÑÐµÑÐŸÐ³ÐŸ)</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>4 bit grayscale</source>
         <translation>4 Ð±ÐžÑÐ° (Ð³ÑÐ°ÐŽÐ°ÑÐžÐž ÑÐµÑÐŸÐ³ÐŸ)</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>8 bit</source>
         <translation>8 Ð±ÐžÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>12 (16) bit</source>
         <translation>12 (16) Ð±ÐžÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>15 bit</source>
         <translation>15 Ð±ÐžÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>16 bit</source>
         <translation>16 Ð±ÐžÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>18 bit</source>
         <translation>18 Ð±ÐžÑ</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>24 bit</source>
         <translation>24 Ð±ÐžÑÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>32 bit</source>
         <translation>32 Ð±ÐžÑÐ°</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>32 bit ARGB</source>
         <translation>32 Ð±ÐžÑÐ° (ARGB)</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Swap red and blue channels</source>
         <translation>ÐÐŸÐŒÐµÐœÑÑÑ ÑÐžÐœÐžÐ¹ Ðž ÐºÑÐ°ÑÐœÑÐ¹ ÐºÐ°ÐœÐ°Ð»Ñ</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>BGR format</source>
         <translation>Ð€ÐŸÑÐŒÐ°Ñ BGR</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location/>
         <source>Skin</source>
         <translation>ÐÐ±Ð»ÐŸÐ¶ÐºÐ°</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>None</source>
         <translation>ÐÐµÑ</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Emulate touch screen (no mouse move)</source>
         <translatorcomment>ÑÐºÐ°Ð·Ð°ÑÐµÐ»Ñ?</translatorcomment>
@@ -217,5 +222,5 @@
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source>
         <translation>Ð­ÐŒÑÐ»ÐžÑÐŸÐ²Ð°ÑÑ Ð¶/Ðº ÑÐºÑÐ°Ðœ (ÑÐŸÐ»ÑÐºÐŸ Ñ 3-Ñ
@@ -223,53 +228,50 @@
     </message>
     <message>
-        <location line="+26"/>
+        <location/>
         <source>&lt;p&gt;Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth &lt;i&gt;above&lt;/i&gt;. You may freely modify the Gamma &lt;i&gt;below&lt;/i&gt;.</source>
         <translation>&lt;p&gt;ÐÐŒÐµÐ¹ÑÐµ Ð² Ð²ÐžÐŽÑ, ÑÑÐŸ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒÑ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑÑÐžÐµ ÑÑÑÐ¹ÐŒÐ±ÑÑÐµÑ, Ð±ÑÐŽÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐœÑ, ÐµÑÐ»Ðž ÐžÐ·ÐŒÐµÐœÐžÑÑÑ &lt;i&gt;ÑÐ°Ð·ÐŒÐµÑ&lt;/i&gt; Ðž/ÐžÐ»Ðž &lt;i&gt;Ð³Ð»ÑÐ±ÐžÐœÐ°&lt;/i&gt; ÑÐºÑÐ°ÐœÐ°.</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Gamma</source>
         <translation>ÐÐ°ÐŒÐŒÐ°</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Blue</source>
         <translation>Ð¡ÐžÐœÐžÐ¹</translation>
     </message>
     <message>
-        <location line="+489"/>
-        <location line="+496"/>
-        <location line="+14"/>
-        <location line="+496"/>
+        <location/>
         <source>1.0</source>
         <translation>1.0</translation>
     </message>
     <message>
-        <location line="-999"/>
+        <location/>
         <source>Green</source>
         <translation>ÐÐµÐ»ÐµÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+496"/>
+        <location/>
         <source>All</source>
         <translation>ÐÑÐµ</translation>
     </message>
     <message>
-        <location line="+496"/>
+        <location/>
         <source>Red</source>
         <translation>ÐÑÐ°ÑÐœÑÐ¹</translation>
     </message>
     <message>
-        <location line="+496"/>
+        <location/>
         <source>Set all to 1.0</source>
         <translation>ÐÑÑÑÐ°Ð²ÐžÑÑ Ð²ÑÐµ Ð² 1.0</translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location/>
         <source>&amp;OK</source>
         <translation>&amp;ÐÐ</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location/>
         <source>&amp;Cancel</source>
         <translation>ÐÑ&amp;ÐŒÐµÐœÐ°</translation>
@@ -337,10 +339,10 @@
     <name>QVFb</name>
     <message>
-        <location filename="../tools/qvfb/qvfb.cpp" line="-501"/>
+        <location filename="../tools/qvfb/qvfb.cpp" line="-504"/>
         <source>Browse...</source>
         <translation>ÐÐ±Ð·ÐŸÑ...</translation>
     </message>
     <message>
-        <location line="+140"/>
+        <location line="+143"/>
         <source>Load Custom Skin...</source>
         <translation>ÐÐ°Ð³ÑÑÐ·ÐžÑÑ ÐŸÐ±Ð»ÐŸÐ¶ÐºÑ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»Ñ...</translation>
Index: /trunk/translations/translations.pri
===================================================================
--- /trunk/translations/translations.pri	(revision 768)
+++ /trunk/translations/translations.pri	(revision 769)
@@ -9,14 +9,10 @@
 }
 
-LUPDATE = $$QT_BUILD_TREE/bin/lupdate
-win32 {
-    LUPDATE ~= s,/,$$QMAKE_DIR_SEP,
-    LUPDATE = $${LUPDATE}.exe
-}
+qtPrepareTool(LUPDATE, lupdate)
 LUPDATE += -locations relative -no-ui-lines
 
 ###### Qt Libraries
 
-QT_TS        = ar da de es fr iw ja_JP pl pt ru sk sl sv uk zh_CN zh_TW
+QT_TS        = ar cs da de es fr he ja_JP pl pt ru sk sl sv uk zh_CN zh_TW
 
 ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
Index: /trunk/translations/translations.pro
===================================================================
--- /trunk/translations/translations.pro	(revision 768)
+++ /trunk/translations/translations.pro	(revision 769)
@@ -1,9 +1,5 @@
 TRANSLATIONS = $$files(*.ts)
 
-LRELEASE = $$QT_BUILD_TREE/bin/lrelease
-win32 {
-    LRELEASE ~= s,/,$$QMAKE_DIR_SEP,
-    LRELEASE = $${LRELEASE}.exe
-}
+qtPrepareTool(LRELEASE, lrelease)
 
 contains(TEMPLATE_PREFIX, vc):vcproj = 1
@@ -47,4 +43,5 @@
 translations.files = $$TRANSLATIONS
 translations.files ~= s,\\.ts$,.qm,g
+translations.files ~= s,^,$$OUT_PWD/,g
 translations.CONFIG += no_check_exist
 INSTALLS += translations
